{
  "openapi": "3.0.1",
  "info": {
    "title": "Fireservice USA P2 Api",
    "description": "P2 Web Api",
    "version": "v1"
  },
  "paths": {
    "/api/v1/Accounts": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get All Accounts",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Create Account",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/ListAccounts/{id}": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get List Account By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/Lists": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get Account List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/Customer/GlAccounts": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get GL Accounts for Specific Customer",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/Customer/Classes": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get Customer Class List",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/Search/{searchTerm}": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Search Accounts",
        "parameters": [
          {
            "name": "searchTerm",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accountTypeId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{id}": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get Account by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Account"
        ],
        "summary": "Update Account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Account"
        ],
        "summary": "Delete Account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/Contacts/{accountId}": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get Account contacts",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/AccountExists": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Check If Account With Same Address Exists",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Account"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/Duplicates": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Check for Duplicate Accounts",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PartialAccountDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartialAccountDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PartialAccountDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PartialAccountDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/Integrate/{intLogId}/{reIntegrate}": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Re-Integrate Account",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "intLogId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "reIntegrate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/IntegrateAllAccounts/{accountId}": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Super Admin - Integrate All Accounts",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/AccountsListInfinite": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Get Account List Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/ProjectsWidget/{contactId}/From/{fromDt}/To/{toDt}": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get Projects Widget",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fromDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/AddressesV2/{addressV2Id}": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Assign Address V2 to Account",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressTypeId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "isDefaultBilling",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "isDefaultJob",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Account"
        ],
        "summary": "Remove Address V2 from Account",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/AddressesV2": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get Addresses V2 for Account",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/AddressesV2/{accountAddressId}/IsPrimary": {
      "put": {
        "tags": [
          "Account"
        ],
        "summary": "Update IsPrimary status for an Account Address",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountAddressId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "text/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "boolean"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/AddressesV2/{accountAddressId}/IsDefaultBilling": {
      "put": {
        "tags": [
          "Account"
        ],
        "summary": "Update IsDefaultBilling status for an Account Address",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountAddressId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "text/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "boolean"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/AddressesV2/{accountAddressId}/IsDefaultJob": {
      "put": {
        "tags": [
          "Account"
        ],
        "summary": "Update IsDefaultJob status for an Account Address",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountAddressId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "text/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "boolean"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/Contacts": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get Contacts for Account via AccountContact link table",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/Contacts/{contactId}": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Link a Contact to an Account",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/Contacts/{accountContactId}": {
      "delete": {
        "tags": [
          "Account"
        ],
        "summary": "Unlink a Contact from an Account",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountContactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/Contacts/{accountContactId}/IsPrimary": {
      "put": {
        "tags": [
          "Account"
        ],
        "summary": "Update IsPrimary status for an Account Contact",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountContactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "text/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "boolean"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/Jobs": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get Jobs associated with an Account with relationship details",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "The account ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/favorites/{accountId}": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Adds an account to the current user's favorites",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "The account ID to add to favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Account"
        ],
        "summary": "Removes an account from the current user's favorites",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "The account ID to remove from favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/favorites": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Gets the current user's favorite accounts",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/recents/{accountId}": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Updates the current user's recently accessed accounts\r\nMaintains maximum of 20 recent entries, removing oldest when limit is reached",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "The account ID that was accessed",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/recents": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Gets the current user's recently accessed accounts\r\nReturns up to 20 most recent entries sorted by access date descending",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/History": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Gets entity tracking history for an account",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/AddressesV2/{addressV2Id}/AssignJobType": {
      "post": {
        "tags": [
          "Account"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/AddressesV2/{addressV2Id}/AssignBillType": {
      "post": {
        "tags": [
          "Account"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/AssignBillingType": {
      "post": {
        "tags": [
          "Account"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{accountId}/IntegrateBillingToGp": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Sync a billing account to GP during job bill-account setup.",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{id}/linked-entities": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get counts of all entities linked to this account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{sourceId}/reassign/{targetId}": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Reassign all entities from source account to target account, then delete source",
        "parameters": [
          {
            "name": "sourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "targetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Accounts/{id}/unlink-all": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Unlink all entities from this account (set FKs to null, delete junction records), then delete account\r\nNote: Will fail if any jobs use this account as JobAccountId (required field)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AccountTypes": {
      "get": {
        "tags": [
          "AccountType"
        ],
        "summary": "Get All Account Types",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "AccountType"
        ],
        "summary": "Create Account Type",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AccountType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AccountType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AccountTypes/EditableAccountTypes": {
      "get": {
        "tags": [
          "AccountType"
        ],
        "summary": "Get Users Editable Contact Types",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AccountTypes/{id}": {
      "get": {
        "tags": [
          "AccountType"
        ],
        "summary": "Get Account Type By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AccountType"
        ],
        "summary": "Update Account Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AccountType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AccountType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "AccountType"
        ],
        "summary": "Delete Account Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/{id}": {
      "get": {
        "tags": [
          "Activity"
        ],
        "summary": "Get Job by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Activity"
        ],
        "summary": "Update Activity",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Activity"
        ],
        "summary": "Delete Activity",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/List": {
      "get": {
        "tags": [
          "Activity"
        ],
        "summary": "Get Activities List",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/ActivitiesListInfinite": {
      "post": {
        "tags": [
          "Activity"
        ],
        "summary": "Get Activities List Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/UsersList": {
      "get": {
        "tags": [
          "Activity"
        ],
        "summary": "Get Activities List",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/List/{dateStart}/{dateEnd}": {
      "get": {
        "tags": [
          "Activity"
        ],
        "summary": "Get Activities List",
        "parameters": [
          {
            "name": "dateStart",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "dateEnd",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities": {
      "post": {
        "tags": [
          "Activity"
        ],
        "summary": "Create Activity",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/Types/List": {
      "get": {
        "tags": [
          "Activity"
        ],
        "summary": "Get All Activity Types",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/referrers/{referrerId}/last-activity-dates": {
      "get": {
        "tags": [
          "Activity"
        ],
        "summary": "Returns the latest overall and in-person activity dates for a referrer.",
        "parameters": [
          {
            "name": "referrerId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/favorites/{activityId}": {
      "post": {
        "tags": [
          "Activity"
        ],
        "summary": "Adds an activity to the current user's favorites",
        "parameters": [
          {
            "name": "activityId",
            "in": "path",
            "description": "The activity ID to add to favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Activity"
        ],
        "summary": "Removes an activity from the current user's favorites",
        "parameters": [
          {
            "name": "activityId",
            "in": "path",
            "description": "The activity ID to remove from favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/favorites": {
      "get": {
        "tags": [
          "Activity"
        ],
        "summary": "Gets the current user's favorite activities",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/recents/{activityId}": {
      "post": {
        "tags": [
          "Activity"
        ],
        "summary": "Updates the current user's recently accessed activities\r\nMaintains maximum of 20 recent entries, removing oldest when limit is reached",
        "parameters": [
          {
            "name": "activityId",
            "in": "path",
            "description": "The activity ID that was accessed",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/activities/recents": {
      "get": {
        "tags": [
          "Activity"
        ],
        "summary": "Gets the current user's recently accessed activities\r\nReturns up to 20 most recent entries sorted by access date descending",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ActivityTypes": {
      "get": {
        "tags": [
          "ActivityType"
        ],
        "summary": "Get All Activity Types",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "ActivityType"
        ],
        "summary": "Create Activity Type",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ActivityTypes/{id}": {
      "get": {
        "tags": [
          "ActivityType"
        ],
        "summary": "Get Activity Type By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "ActivityType"
        ],
        "summary": "Update Activity Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ActivityType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ActivityType"
        ],
        "summary": "Delete Activity Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/{addressId}/checkDupTypeUpdate": {
      "post": {
        "tags": [
          "Address"
        ],
        "summary": "Check for duplicate address type (BILLING, PRIMARY, SECONDARY)",
        "parameters": [
          {
            "name": "addressId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/{addressId}/checkDupTypeCreate": {
      "post": {
        "tags": [
          "Address"
        ],
        "summary": "Check for duplicate address type (BILLING, PRIMARY, SECONDARY)",
        "parameters": [
          {
            "name": "addressId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/{addressId}/CheckDupCreate": {
      "post": {
        "tags": [
          "Address"
        ],
        "parameters": [
          {
            "name": "addressId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/{addressId}/CheckDupUpdate": {
      "post": {
        "tags": [
          "Address"
        ],
        "parameters": [
          {
            "name": "addressId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/{addressId}/DoesDefaultAddressExist": {
      "post": {
        "tags": [
          "Address"
        ],
        "summary": "Does default address exist",
        "parameters": [
          {
            "name": "addressId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses": {
      "get": {
        "tags": [
          "Address"
        ],
        "summary": "Get All Addresses",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Address"
        ],
        "summary": "Create Contact",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Address"
        ],
        "summary": "Update Address",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Address"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/Search": {
      "get": {
        "tags": [
          "Address"
        ],
        "summary": "Simple address search - searches Address1, Address2, City, Entity (Account name), and Email",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/AddressId/{addressId}": {
      "get": {
        "tags": [
          "Address"
        ],
        "summary": "Get Address",
        "parameters": [
          {
            "name": "addressId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/AddressesListInfinite": {
      "post": {
        "tags": [
          "Address"
        ],
        "summary": "Get Addresses List Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/Accounts/{accountId}": {
      "get": {
        "tags": [
          "Address"
        ],
        "summary": "Get Addresses by Account ID",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Addresses/{id}": {
      "delete": {
        "tags": [
          "Address"
        ],
        "summary": "Delete Address",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressTypes": {
      "get": {
        "tags": [
          "AddressType"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "AddressType"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressTypes/{id}": {
      "get": {
        "tags": [
          "AddressType"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AddressType"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "AddressType"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Stripe/BalanceTransactions": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List balance transactions on the Stripe platform account",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Max number of transactions to fetch (default 100)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 100
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Start date for filtering transactions (optional)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "End date for filtering transactions (optional)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Pagination cursor for fetching next page",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get All Users",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "includeRoles",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create User",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddUserVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddUserVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddUserVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddUserVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update User",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EditUserVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditUserVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EditUserVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EditUserVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/List": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get User List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/SalesUsers/List": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get Sales User List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/RepairUsers/List": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get REPAIR Department User List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/EstimatorUsers/List": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get REPAIR Department User List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Search/{val}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Search Users",
        "parameters": [
          {
            "name": "val",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/{userId}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get User By Id",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete User",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Roles": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get Roles",
        "parameters": [
          {
            "name": "roleName",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Roles/{roleName}": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create Role",
        "parameters": [
          {
            "name": "roleName",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Roles/{roleName}/User/{userId}": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Assign Role to User",
        "parameters": [
          {
            "name": "roleName",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/{userId}/Upload/ProfilePicture": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Upload Profile Picture for a User",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ProfilePictureUploadVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfilePictureUploadVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfilePictureUploadVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ProfilePictureUploadVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/{userId}/ProfilePicture": {
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Remove Profile Picture for a User",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/{userId}/MicrosoftLink": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Link a P2 user to their Microsoft 365 account for calendar integration.\r\nValidates the UPN exists in Azure AD and stores it. The multi-year Outlook pull and\r\nwebhook subscription are queued and run one user at a time.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LinkMicrosoftAccountVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkMicrosoftAccountVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkMicrosoftAccountVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LinkMicrosoftAccountVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Unlink a P2 user's Microsoft 365 account.\r\nClears the stored IDs and removes any active Graph subscriptions.\r\nExisting P2 appointments, including ones this user organizes or is assigned to, are left in place.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Email/ResendConfirmation": {
      "post": {
        "tags": [
          "Admin"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EditUserVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditUserVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EditUserVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EditUserVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Password/Reset": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Reset User Password",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ForgotPasswordViewModel"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ForgotPasswordViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ForgotPasswordViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ForgotPasswordViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Roles/Seed": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Seed Roles",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/KPIs/Entity/{entity}/{entityId}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get All KPIs by Entity",
        "parameters": [
          {
            "name": "entity",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Financial/Accounts": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get GL Accounts",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CommissionPeriods/{dt}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get Commission Periods",
        "parameters": [
          {
            "name": "dt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CommissionPeriod": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create Commission Period",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CommissionPeriod"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommissionPeriod"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CommissionPeriod"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CommissionPeriod"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update Commission Period",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CommissionPeriod"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommissionPeriod"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CommissionPeriod"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CommissionPeriod"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CommissionPeriod/{id}": {
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete Commission Period",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ClaimsForAdmin": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get Claims for Admin",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ClaimsForUserId/{userId}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "ClaimsForUserId",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ClaimType/{claimType}/ClaimValue/{claimValue}/User/{userId}": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Assign Claim To User",
        "parameters": [
          {
            "name": "claimType",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "claimValue",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Remove Claims Fo User",
        "parameters": [
          {
            "name": "claimType",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "claimValue",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AssignAdminClaimsToUser/{userId}": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Assign Admin Claims To User",
        "parameters": [
          {
            "name": "claimType",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "claimValue",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/SeedClaimsAdmin": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Seed Claims for Admin",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/LocationAndDepartmentOptions": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get Location and Department options",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/TimeApprovalResponsibilities/{userId}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get Time Approval responsibilities",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CreateTimeApprovalRespnsibility/{userId}/{location}/{department}": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create Time Approval responsibility",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "location",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "department",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/DeleteTimeApprovalRespnsibility/{id}": {
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete Time Approval responsibility",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/IntegrateBusDevReps/{userId}": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - Integrate Bus Dev Reps",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/UpdateFullyPaidStatusOnJobs/{jobId}": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - Update Fully Paid Status on Jobs",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/UpdateActualsAndFullyPaidOnJobs/{jobId}": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - Update Actuals on Jobs",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/RepairDrywallFtprpMapping": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - Repair Exactimate drywall FTPRP headers and related JobEstimatePhases.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DrywallFtprpRepairRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DrywallFtprpRepairRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DrywallFtprpRepairRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DrywallFtprpRepairRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/UpdateEstOnJobs/{jobId}": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - UPDATE ESTIMATES ON JOBS",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/UpdateActiveStatusEstActualProjs": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - UPDATE ESTIMATES ON ALL JOBS",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/UploadDataImportDoc": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - Upload Data Import",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/FileUploadVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FileUploadVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FileUploadVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FileUploadVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/PopulateCommisionPeriod": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - Populate Commision Period on Job",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/PopulateGPCustNum": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - Populate GPCustomerNumber field",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/PopulateProjFieldsFromJob": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Super Admin - Populate Proj Fields From Job (ref contact, bus dev rep, team)",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/IntLogRetryIntegrateAADimensionCode": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "IntLogRetryIntegrateAADimensionCode",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/IntLogRetryIntegrateAADimensionCodeRestriction": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "IntLogRetryIntegrateAADimensionCodeRestriction",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/TimelineFields/{timelineFieldId}/ValidateDate": {
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update Timeline Fields Validate After Date",
        "parameters": [
          {
            "name": "timelineFieldId",
            "in": "path",
            "description": "ID of the timeline field to update",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "New validate after date (null to clear)",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "string",
                "format": "date-time"
              }
            },
            "application/json": {
              "schema": {
                "type": "string",
                "format": "date-time"
              }
            },
            "text/json": {
              "schema": {
                "type": "string",
                "format": "date-time"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string",
                "format": "date-time"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/LoyaltyRewardsProgramRates": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Gets all loyalty rewards program rates",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Creates a new loyalty rewards program rate",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LoyaltyRewardsProgramRateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoyaltyRewardsProgramRateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LoyaltyRewardsProgramRateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LoyaltyRewardsProgramRateDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/LoyaltyRewardsProgramRates/{id}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Gets a specific loyalty rewards program rate by ID",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Updates an existing loyalty rewards program rate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LoyaltyRewardsProgramRateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoyaltyRewardsProgramRateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LoyaltyRewardsProgramRateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LoyaltyRewardsProgramRateDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Deletes a loyalty rewards program rate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/LoyaltyRewardsProgramRates/{id}/toggle-inactive": {
      "patch": {
        "tags": [
          "Admin"
        ],
        "summary": "Toggles the inactive status of a rate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/LoyaltyRewardsProgramRates/EntityTracking": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Gets entity tracking history for loyalty rewards program rates",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "eventType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "changedBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "jobTypeId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressesV2/AddressesV2ListInfinite": {
      "post": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Get AddressV2 List Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressesV2/AddressV2Id/{addressV2Id}": {
      "get": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Get AddressV2 by ID",
        "parameters": [
          {
            "name": "addressV2Id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressesV2": {
      "post": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Create AddressV2",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressV2"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressV2"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Update AddressV2",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressV2"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressV2"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressesV2/{id}": {
      "delete": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Delete AddressV2",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressesV2/favorites/{addressV2Id}": {
      "post": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Adds an addressV2 to the current user's favorites",
        "parameters": [
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "The addressV2 ID to add to favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Removes an addressV2 from the current user's favorites",
        "parameters": [
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "The addressV2 ID to remove from favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressesV2/favorites": {
      "get": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Gets the current user's favorite addressesV2",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressesV2/recents/{addressV2Id}": {
      "post": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Updates the current user's recently accessed addressesV2\r\nMaintains maximum of 20 recent entries, removing oldest when limit is reached",
        "parameters": [
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "The addressV2 ID that was accessed",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddressesV2/recents": {
      "get": {
        "tags": [
          "AdminAddressesV2"
        ],
        "summary": "Gets the current user's recently accessed addressesV2\r\nReturns up to 20 most recent entries sorted by access date descending",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/holidays": {
      "get": {
        "tags": [
          "AdminHolidays"
        ],
        "summary": "Get all holidays, optionally filtered by year",
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "description": "Optional year filter",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "Include inactive holidays",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "AdminHolidays"
        ],
        "summary": "Create a new holiday",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AdminHoliday"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminHoliday"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminHoliday"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdminHoliday"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/holidays/{id}": {
      "get": {
        "tags": [
          "AdminHolidays"
        ],
        "summary": "Get a single holiday by ID",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AdminHolidays"
        ],
        "summary": "Update an existing holiday",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AdminHoliday"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminHoliday"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdminHoliday"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdminHoliday"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "AdminHolidays"
        ],
        "summary": "Delete a holiday (soft delete by setting InActive = true)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/holidays/check/{date}": {
      "get": {
        "tags": [
          "AdminHolidays"
        ],
        "summary": "Check if a specific date is a holiday",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "description": "Date to check",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/MagicPlan/Dashboard": {
      "get": {
        "tags": [
          "AdminMagicPlan"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/MagicPlan/PollEnabled": {
      "put": {
        "tags": [
          "AdminMagicPlan"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MagicPlanPollEnabledRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MagicPlanPollEnabledRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MagicPlanPollEnabledRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MagicPlanPollEnabledRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/MagicPlan/RecentMedia": {
      "get": {
        "tags": [
          "AdminMagicPlan"
        ],
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          },
          {
            "name": "mediaType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "jobId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tracked",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/MagicPlan/SyncRuns": {
      "get": {
        "tags": [
          "AdminMagicPlan"
        ],
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/MagicPlan/OpenCandidates": {
      "get": {
        "tags": [
          "AdminMagicPlan"
        ],
        "summary": "Open P2 jobs that match a MagicPlan project name (leading job number).\r\nCalls MagicPlan list API — load only when the admin opens the Candidates tab.",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/MagicPlan/SyncNow": {
      "post": {
        "tags": [
          "AdminMagicPlan"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/Summary": {
      "get": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "summary": "Get summary statistics for duplicate accounts",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/Search": {
      "post": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "summary": "Search for duplicate accounts with pagination - fetch complete groups",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/GetEntities": {
      "post": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "summary": "Get entities for specific accounts",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/Merge": {
      "post": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "summary": "Merge accounts - moves all relationships from duplicate to primary",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeAccountRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeAccountRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeAccountRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeAccountRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/ToggleAccountExemption": {
      "post": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "summary": "Toggle ExemptFromDuplicate status for a single account",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/ToggleGroupExemption": {
      "post": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "summary": "Toggle ExemptFromDuplicate status for all accounts in a group",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/ReconcileLogs": {
      "get": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/StartBulkReconciliation": {
      "post": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "summary": "Start bulk account reconciliation job to automatically merge duplicate accounts",
        "requestBody": {
          "description": "Optional request parameters for the reconciliation job",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkAccountReconciliationRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkAccountReconciliationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkAccountReconciliationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkAccountReconciliationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/CancelReconciliation/{jobId}": {
      "post": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "summary": "Cancel a running account reconciliation job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID to cancel",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAccounts/CurrentReconciliationJob": {
      "get": {
        "tags": [
          "AdminReconcileAccounts"
        ],
        "summary": "Get the status of the current account reconciliation job",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/Summary": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "includeMigrated",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/PossibleDuplicates": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "includeMigrated",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "address1Search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/GroupDetails/{addressId}": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "addressId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeMigrated",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/AddressEntityDetails/{addressId}": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "addressId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/AddressEntitiesForAddresses": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressEntitiesRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressEntitiesRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressEntitiesRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddressEntitiesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/MergeAddresses": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeAddressRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeAddressRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeAddressRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeAddressRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/{id}": {
      "delete": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/Summary": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/PossibleDuplicates": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "threshold",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 85
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/AddressDetails/{addressId}": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "addressId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/MissingCoordinates": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/Geocode/{id}": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/AddressHistory/{addressV2Id}": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "addressV2Id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/GeocodeBatch": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/StartGeocodeMissing": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/GeocodeMissingRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeocodeMissingRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GeocodeMissingRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GeocodeMissingRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/GeocodeJobStatus/{jobId}": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/CancelGeocode/{jobId}": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/MigrationStatus": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/MergeAddresses": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeV2AddressesRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeV2AddressesRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeV2AddressesRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeV2AddressesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/CheckExistingAddressV2": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CheckExistingAddressV2Request"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckExistingAddressV2Request"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckExistingAddressV2Request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CheckExistingAddressV2Request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/MergeToV2": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeToV2Request"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeToV2Request"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeToV2Request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeToV2Request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/MigrateAllV1DuplicateGroups": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/StartMigrateAllV1DuplicateGroups": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/StartMigrateAllV1Addresses": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MigrateAllV1Request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/JobStatus/{jobId}": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/ReconcileLogs": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/CancelMigration/{jobId}": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/ResumeMigration/{jobId}": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/V2/CurrentMigrationJob": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/AllV1Addresses": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "hasMigratedToV2",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/AllV1AddressCounts": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/AllV2Addresses": {
      "get": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sortDesc",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "searchQuery",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileAddresses/LinkToExistingV2": {
      "post": {
        "tags": [
          "AdminReconcileAddresses"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LinkToExistingV2Request"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkToExistingV2Request"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkToExistingV2Request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LinkToExistingV2Request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileContacts/Summary": {
      "get": {
        "tags": [
          "AdminReconcileContacts"
        ],
        "summary": "Get summary statistics for duplicate contacts",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileContacts/Search": {
      "post": {
        "tags": [
          "AdminReconcileContacts"
        ],
        "summary": "Search for duplicate contacts with pagination - fetch complete groups",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileContacts/GetEntities": {
      "post": {
        "tags": [
          "AdminReconcileContacts"
        ],
        "summary": "Get entities for specific contacts",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileContacts/Merge": {
      "post": {
        "tags": [
          "AdminReconcileContacts"
        ],
        "summary": "Merge contacts - moves all relationships from duplicate to primary",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeContactRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeContactRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeContactRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeContactRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileContacts/ReconcileLogs": {
      "get": {
        "tags": [
          "AdminReconcileContacts"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileContacts/ToggleContactExemption": {
      "post": {
        "tags": [
          "AdminReconcileContacts"
        ],
        "summary": "Toggle ExemptFromDuplicate status for a single contact",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileContacts/ToggleGroupExemption": {
      "post": {
        "tags": [
          "AdminReconcileContacts"
        ],
        "summary": "Toggle ExemptFromDuplicate status for all contacts in a group",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileReferringEntities/Summary": {
      "get": {
        "tags": [
          "AdminReconcileReferringEntities"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileReferringEntities/Search": {
      "post": {
        "tags": [
          "AdminReconcileReferringEntities"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileReferringEntities/GetEntities": {
      "post": {
        "tags": [
          "AdminReconcileReferringEntities"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileReferringEntities/Merge": {
      "post": {
        "tags": [
          "AdminReconcileReferringEntities"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeReferringEntityRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeReferringEntityRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MergeReferringEntityRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MergeReferringEntityRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileReferringEntities/ReconcileLogs": {
      "get": {
        "tags": [
          "AdminReconcileReferringEntities"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileReferringEntities/ToggleEntityExemption": {
      "post": {
        "tags": [
          "AdminReconcileReferringEntities"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReconcileReferringEntities/ToggleGroupExemption": {
      "post": {
        "tags": [
          "AdminReconcileReferringEntities"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/AdminSiteSettings": {
      "get": {
        "tags": [
          "AdminSiteSettings"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AdminSiteSettings"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SiteSettings"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SiteSettings"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SiteSettings"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SiteSettings"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/tempagencies": {
      "get": {
        "tags": [
          "AdminTempAgencies"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "AdminTempAgencies"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgency"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgency"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgency"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgency"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/tempagencies/{id}": {
      "get": {
        "tags": [
          "AdminTempAgencies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AdminTempAgencies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgency"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgency"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgency"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgency"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "AdminTempAgencies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/tempagencypayrates": {
      "get": {
        "tags": [
          "AdminTempAgencyPayRates"
        ],
        "parameters": [
          {
            "name": "agencyId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "AdminTempAgencyPayRates"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgencyPayRate"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgencyPayRate"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgencyPayRate"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgencyPayRate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/tempagencypayrates/{id}": {
      "get": {
        "tags": [
          "AdminTempAgencyPayRates"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AdminTempAgencyPayRates"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgencyPayRate"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgencyPayRate"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgencyPayRate"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TempAgencyPayRate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "AdminTempAgencyPayRates"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/temporaryworkers": {
      "get": {
        "tags": [
          "AdminTemporaryWorkers"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "AdminTemporaryWorkers"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TemporaryWorker"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemporaryWorker"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TemporaryWorker"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TemporaryWorker"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/temporaryworkers/{id}": {
      "get": {
        "tags": [
          "AdminTemporaryWorkers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AdminTemporaryWorkers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TemporaryWorker"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemporaryWorker"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TemporaryWorker"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TemporaryWorker"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "AdminTemporaryWorkers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "inactivateReason",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/vehicles": {
      "get": {
        "tags": [
          "AdminVehicles"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "AdminVehicles"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VehicleData"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VehicleData"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VehicleData"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VehicleData"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/vehicles/open-job-locations": {
      "get": {
        "tags": [
          "AdminVehicles"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/vehicles/{id}": {
      "get": {
        "tags": [
          "AdminVehicles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AdminVehicles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VehicleData"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VehicleData"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VehicleData"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VehicleData"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "AdminVehicles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/vehicles/{id}/users": {
      "post": {
        "tags": [
          "AdminVehicles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "force",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVehicleUserRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVehicleUserRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVehicleUserRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignVehicleUserRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/vehicles/{vehicleId}/users/{assignmentId}": {
      "delete": {
        "tags": [
          "AdminVehicles"
        ],
        "parameters": [
          {
            "name": "vehicleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "assignmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/vehicles/auto-assign": {
      "post": {
        "tags": [
          "AdminVehicles"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AutoAssignItem"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AutoAssignItem"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AutoAssignItem"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/AutoAssignItem"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/vehicles/sync": {
      "post": {
        "tags": [
          "AdminVehicles"
        ],
        "summary": "Sync vehicle catalog (master data) from Verizon Connect. Per-vehicle GPS sync uses POST {id}/sync.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/vehicles/{id}/sync": {
      "post": {
        "tags": [
          "AdminVehicles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/AdSources": {
      "get": {
        "tags": [
          "AdSource"
        ],
        "summary": "Get All AdSources",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "AdSource"
        ],
        "summary": "Create AdSource",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AdSource"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdSource"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdSource"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdSource"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/AdSources/List": {
      "get": {
        "tags": [
          "AdSource"
        ],
        "summary": "Get Ad Source List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/AdSources/{id}": {
      "get": {
        "tags": [
          "AdSource"
        ],
        "summary": "Get AdSource by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "AdSource"
        ],
        "summary": "Update AdSource",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AdSource"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AdSource"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AdSource"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AdSource"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "AdSource"
        ],
        "summary": "Delete AdSource",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/ArStatementJobList": {
      "get": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Get Ar Statement Job List",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/GetAllJobsForAccountId/{accountId}/{fullyPaid}": {
      "get": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Get All Jobs for AccountId",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fullyPaid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/GetAllJobsForProjectId/{projId}/{fullyPaid}": {
      "get": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Get All Jobs for ProjectId",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fullyPaid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/ArStatementJobListInfinite": {
      "post": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Get Ar Statement Job List Infinite",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/BillAccountAddresses/{billAccountId}": {
      "get": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Get Bill Account Addresses",
        "parameters": [
          {
            "name": "billAccountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/AaTransactions/{fromDate}/{toDate}": {
      "post": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Ge tAr Statement Details",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/EmailArStatement": {
      "post": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Email Pdf ar statement",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EmailArStatementRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailArStatementRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailArStatementRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EmailArStatementRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/CustomerAccount/{customerNumber}": {
      "get": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Get customer account",
        "parameters": [
          {
            "name": "customerNumber",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/ExistingPaymentRequest/{customerId}": {
      "get": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Get existing payment request for a customer (used by AR Statement)",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "Customer ID (MasterStringId)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/CreateStatementPaymentRequest": {
      "post": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Create a multi-invoice payment request for AR Statement",
        "requestBody": {
          "description": "AR Statement payment request details",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStatementPaymentRequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStatementPaymentRequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStatementPaymentRequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStatementPaymentRequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/CreateStatementPaymentRequestForJobs": {
      "post": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Create a multi-invoice payment request for AR Statement based on jobs/date range",
        "requestBody": {
          "description": "AR Statement payment request details",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStatementPaymentRequestForJobsVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStatementPaymentRequestForJobsVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStatementPaymentRequestForJobsVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateStatementPaymentRequestForJobsVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ArStatement/SendStatementPaymentWithPdf": {
      "post": {
        "tags": [
          "ArStatement"
        ],
        "summary": "Send professional payment request email with PDF attachment for AR Statement",
        "requestBody": {
          "description": "Statement payment request email details",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SendStatementPaymentWithPdfVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendStatementPaymentWithPdfVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SendStatementPaymentWithPdfVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SendStatementPaymentWithPdfVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/BulkDataExport/Queue": {
      "post": {
        "tags": [
          "BulkDataExport"
        ],
        "summary": "Queue an async export (Hangfire → blob → email). Always async so it appears in Recent downloads.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDataExportQueueRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDataExportQueueRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDataExportQueueRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDataExportQueueRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/BulkDataExport/Recent": {
      "get": {
        "tags": [
          "BulkDataExport"
        ],
        "summary": "Recent exports from all users (active + recent history).",
        "parameters": [
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 40
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/BulkDataExport/{id}": {
      "get": {
        "tags": [
          "BulkDataExport"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/BulkDataExport/{id}/DownloadUrl": {
      "get": {
        "tags": [
          "BulkDataExport"
        ],
        "summary": "Fresh SAS download URL for a Ready export (still within 72h).",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Summary": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/{outlookEventId}/Summary",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Notes": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/{outlookEventId}/Notes",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Events/{outlookEventId}/Notes",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventNoteVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventNoteVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventNoteVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventNoteVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Notes/{noteId}": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "summary": "PUT /api/v1/Calendar/Events/{outlookEventId}/Notes/{noteId}",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "noteId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventNoteVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventNoteVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventNoteVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventNoteVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Calendar"
        ],
        "summary": "DELETE /api/v1/Calendar/Events/{outlookEventId}/Notes/{noteId}",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "noteId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Photos": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/{outlookEventId}/Photos",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Events/{outlookEventId}/Photos",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventPhotosVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventPhotosVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventPhotosVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventPhotosVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Documents": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/{outlookEventId}/Documents",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Events/{outlookEventId}/Documents",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventDocumentsVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventDocumentsVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventDocumentsVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddCalendarEventDocumentsVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Photos/{photoId}": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "summary": "PUT /api/v1/Calendar/Events/{outlookEventId}/Photos/{photoId}",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "photoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventPhotoVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventPhotoVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventPhotoVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventPhotoVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Calendar"
        ],
        "summary": "DELETE /api/v1/Calendar/Events/{outlookEventId}/Photos/{photoId}",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "photoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Documents/{docId}": {
      "delete": {
        "tags": [
          "Calendar"
        ],
        "summary": "DELETE /api/v1/Calendar/Events/{outlookEventId}/Documents/{docId}",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "docId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Search/Jobs": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "parameters": [
          {
            "name": "term",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Projects/{projectId}/Jobs": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Search/Projects": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "parameters": [
          {
            "name": "term",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Search/Contacts": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "parameters": [
          {
            "name": "term",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Search/ReferringEntities": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "parameters": [
          {
            "name": "term",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Search/Accounts": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "parameters": [
          {
            "name": "term",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/AssociationEmails": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAssociationEmailRequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAssociationEmailRequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAssociationEmailRequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAssociationEmailRequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/AssociationLossInstruction": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAssociationLossInstructionRequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAssociationLossInstructionRequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAssociationLossInstructionRequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAssociationLossInstructionRequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events\r\nReturns canonical calendar events for all linked users in the date range.\r\nEach event includes an Attendees array (all P2 users who have this event in their calendar).",
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "userIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "showAs",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sensitivities",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "teamIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeNoTeam",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "appointmentTypeIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeNoAppointmentType",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "associationTypes",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeNoP2Association",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "onlyWithP2Association",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "myTeamOnly",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Events\r\nCreates a new event in Outlook and caches it locally.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCalendarEventVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCalendarEventVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCalendarEventVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCalendarEventVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/ByOutlookIds": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/ByOutlookIds\r\nReturns canonical events for specific Outlook IDs (incremental SignalR refresh).",
        "parameters": [
          {
            "name": "outlookEventIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "showAs",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sensitivities",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/ByAssociation": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/ByAssociation\r\nReturns calendar events linked to a single P2 entity via CalendarEventMetadata.",
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "end",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "projectId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "projectJobId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "contactId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "referringEntityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Respond": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Events/{outlookEventId}/Respond\r\nAccepts, tentatively accepts, or declines a meeting invite on the logged-in user's calendar.",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RespondToEventInviteVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RespondToEventInviteVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RespondToEventInviteVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RespondToEventInviteVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/CheckConflicts": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Events/CheckConflicts\r\nScans for events that overlap the proposed time window for each requested user.\r\nUsed by the create/edit modals to warn about double-booking before saving.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CheckEventConflictsVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckEventConflictsVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckEventConflictsVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CheckEventConflictsVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Metadata": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/{outlookEventId}/Metadata\r\nReturns P2-specific metadata for an event.",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Calendar"
        ],
        "summary": "PUT /api/v1/Calendar/Events/{outlookEventId}/Metadata",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "metadataScope",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveEventMetadataVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveEventMetadataVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveEventMetadataVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveEventMetadataVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/SyncState": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/{outlookEventId}/SyncState\r\nLightweight version stamp for edit-modal stale detection.",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/RecentCopySource": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/RecentCopySource\r\nReturns the current user's most recently P2-created appointment as a copy template.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "summary": "PUT /api/v1/Calendar/Events/{outlookEventId}\r\nUpdates an existing Outlook event and refreshes the local cache.",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCalendarEventVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Calendar"
        ],
        "summary": "DELETE /api/v1/Calendar/Events/{outlookEventId}\r\nSoft-deletes in P2 (keeps row/links/history) and removes from Outlook when synced.",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deleteScope",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/Restore": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Events/{outlookEventId}/Restore\r\nRestores a soft-deleted appointment (optional versionId) and recreates/updates Outlook.",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "versionId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/RestoreVersion/{versionId}": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Events/{outlookEventId}/RestoreVersion/{versionId}\r\nRestores appointment fields (and Outlook) to a prior snapshot.",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "versionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Users/{userId}/Sync": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Users/{userId}/Sync\r\nSyncs one user's Outlook calendar into the canonical event store.\r\nWindow: 1st of current month UTC through Graph's max calendarView range (~5 years forward).",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Users/{userId}/LinkJobsFromTitles": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Users/{userId}/LinkJobsFromTitles\r\nLinks this user's already-synced Outlook appointments to an existing P2 job\r\nwhen the title contains an unbroken run of exactly five digits. Appointments that\r\nalready have a job are left alone.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Users/{userId}/ApplySyncAppointmentType": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Users/{userId}/ApplySyncAppointmentType\r\nAssigns the user's saved Outlook sync appointment type to already-synced\r\nappointments that do not already have a type.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ApplySyncAppointmentTypeRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplySyncAppointmentTypeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplySyncAppointmentTypeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApplySyncAppointmentTypeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Users/{userId}/Subscribe": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Users/{userId}/Subscribe\r\nCreates a Graph webhook subscription for a user's calendar.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Calendar"
        ],
        "summary": "DELETE /api/v1/Calendar/Users/{userId}/Subscribe",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Users/{userId}/Status": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Users/{userId}/Status",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/UsersStatus": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/UsersStatus",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Webhook": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Webhook\r\nReceives Microsoft Graph change notifications.",
        "parameters": [
          {
            "name": "validationToken",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Webhook\r\nReceives Microsoft Graph change notifications.",
        "parameters": [
          {
            "name": "validationToken",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/BulkLinkByEmail": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/BulkLinkByEmail",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/DeduplicateEvents": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/DeduplicateEvents\r\nCleans up orphaned canonical events (no junction rows) — only needed after data migrations or bugs.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/ClearLocalCalendarData": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/ClearLocalCalendarData\r\nDeletes locally cached calendar data so admins can force a fresh sync without unlinking accounts.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Users/{userId}/RemoveFromAppointments": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Users/{userId}/RemoveFromAppointments\r\nRemoves this person from every P2 appointment. Appointments that then have nobody left are soft-deleted.\r\nShared appointments stay for the other people. Outlook and the Microsoft link are left alone.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Users/{userId}/ClearLocalEvents": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Users/{userId}/ClearLocalEvents\r\nDeletes one user's cached calendar rows from P2. Outlook, the Microsoft link, and the webhook are left alone.\r\nEvents other employees are also assigned to stay in P2 for those employees.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/BulkSubscribe": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/BulkSubscribe",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/BulkUnsubscribe": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/BulkUnsubscribe\r\nRemoves all locally stored Graph webhook subscriptions and attempts to delete them remotely.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/BulkSync": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/BulkSync\r\nQueues a mailbox pull for every active linked user. Pulls run one at a time.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Types": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Types",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/JobTimelineSync/Preview": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/JobTimelineSync/Preview",
        "parameters": [
          {
            "name": "projectJobId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "calendarEventTypeId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobTimelineDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/JobTimelineSync/Apply": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/JobTimelineSync/Apply",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ApplyJobTimelineSyncVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplyJobTimelineSyncVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplyJobTimelineSyncVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApplyJobTimelineSyncVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/LinkedUsers": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/LinkedUsers\r\nReturns users who have a usable Microsoft account link.\r\nPass includeUnlinked=true to also include active users without Outlook (for organizer picker).",
        "parameters": [
          {
            "name": "includeUnlinked",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Teams": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Teams\r\nActive teams for appointment tagging.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Users/{userId}/DefaultTeam": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Users/{userId}/DefaultTeam\r\nReturns the first active team for an organizer (for auto-select).",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Users/{userId}/Teams": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Users/{userId}/Teams\r\nReturns all active teams for an organizer (for auto-select).",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Settings": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Settings\r\nCalendar UI constants for the SPA.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/FilterPresets": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/FilterPresets",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/FilterPresets",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarFilterPresetVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarFilterPresetVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarFilterPresetVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarFilterPresetVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/FilterPresets/{id}": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "summary": "PUT /api/v1/Calendar/FilterPresets/{id}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarFilterPresetVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarFilterPresetVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarFilterPresetVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarFilterPresetVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Calendar"
        ],
        "summary": "DELETE /api/v1/Calendar/FilterPresets/{id}",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/FilterPresets/{id}/SetDefault": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "summary": "PUT /api/v1/Calendar/FilterPresets/{id}/SetDefault",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/FilterPresets/SetDefaultBuiltin": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "summary": "PUT /api/v1/Calendar/FilterPresets/SetDefaultBuiltin",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarDefaultBuiltinVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarDefaultBuiltinVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarDefaultBuiltinVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarDefaultBuiltinVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/FilterPresets/Default": {
      "delete": {
        "tags": [
          "Calendar"
        ],
        "summary": "DELETE /api/v1/Calendar/FilterPresets/Default",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/FilterPresets/SetDefaultViewClaim": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "summary": "PUT /api/v1/Calendar/FilterPresets/SetDefaultViewClaim\r\nThe signed-in user's favorite assigned view. Clears preset and built-in favorites.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarDefaultViewClaimVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarDefaultViewClaimVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarDefaultViewClaimVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarDefaultViewClaimVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/AppointmentTeams/Clear": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Admin/AppointmentTeams/Clear\r\nRemoves every team tag from occurrence and series appointments. Outlook is not changed.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/AppointmentTeams/Reapply": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Admin/AppointmentTeams/Reapply\r\nTags appointments organized or assigned to users with TagAppointmentsWithUserTeams,\r\nusing only those users' AllowOnCalendar teams.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/Settings": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/Settings/GeneralOrganizer": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SetGeneralOrganizerVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetGeneralOrganizerVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetGeneralOrganizerVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetGeneralOrganizerVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/Settings/OutlookOriginEditPolicy": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SetOutlookOriginEditPolicyVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetOutlookOriginEditPolicyVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetOutlookOriginEditPolicyVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetOutlookOriginEditPolicyVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/Settings/Integration": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarIntegrationSettingsVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarIntegrationSettingsVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarIntegrationSettingsVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetCalendarIntegrationSettingsVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/ViewClaims": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Calendar"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarViewClaimVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarViewClaimVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarViewClaimVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarViewClaimVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/ViewClaims/{id}": {
      "put": {
        "tags": [
          "Calendar"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarViewClaimVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarViewClaimVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarViewClaimVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveCalendarViewClaimVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Calendar"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/Audit": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Admin/Audit\r\nFinds calendar data mismatches (orphaned events, metadata drift, sync-block inconsistencies).",
        "parameters": [
          {
            "name": "daysBack",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 90
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Admin/Audit/Resolve": {
      "post": {
        "tags": [
          "Calendar"
        ],
        "summary": "POST /api/v1/Calendar/Admin/Audit/Resolve\r\nDeletes orphaned calendar rows/metadata flagged by the audit.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAuditResolveVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAuditResolveVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAuditResolveVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarAuditResolveVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Calendar/Events/{outlookEventId}/History": {
      "get": {
        "tags": [
          "Calendar"
        ],
        "summary": "GET /api/v1/Calendar/Events/{outlookEventId}/History",
        "parameters": [
          {
            "name": "outlookEventId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CalendarEventTypes": {
      "get": {
        "tags": [
          "CalendarEventType"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "CalendarEventType"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarEventType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarEventType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarEventType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarEventType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CalendarEventTypes/{id}": {
      "get": {
        "tags": [
          "CalendarEventType"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "CalendarEventType"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarEventType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarEventType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarEventType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CalendarEventType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "CalendarEventType"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Categories": {
      "get": {
        "tags": [
          "Category"
        ],
        "summary": "Get All Categories",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Category"
        ],
        "summary": "Create Category",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Category"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Category"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Category"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Category"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Categories/{id}": {
      "get": {
        "tags": [
          "Category"
        ],
        "summary": "Get Category By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Category"
        ],
        "summary": "Update Category",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Category"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Category"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Category"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Category"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Category"
        ],
        "summary": "Delete Category",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Channels": {
      "get": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Channel"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Channel"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Channel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Channel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Channel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Channels/List": {
      "get": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Channels/{id}": {
      "get": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Channel"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Channel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Channel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Channel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Channels/{channelId}/SubChannels": {
      "get": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "channelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "channelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Channels/{channelId}/Links": {
      "get": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "channelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Channels/{channelId}/SubChannels/{subChannelId}": {
      "post": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "channelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "subChannelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Channel"
        ],
        "parameters": [
          {
            "name": "channelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "subChannelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/ContactExists": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Check If Contact With Same Address Exists",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Contact"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Contact"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Contact"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Contact"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get All Contacts",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ContactVm"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Create Contact",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/Type/{contactType}": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Contacts by Single Type",
        "parameters": [
          {
            "name": "contactType",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Contact"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/Contacts/List": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Contact List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "contactTypeId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/Duplicates": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Check for Duplicate Contacts",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PartialContactDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartialContactDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PartialContactDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PartialContactDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/ContactsListInfinite": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Contact List Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/BusDevRepChanges/{dateStart}/{dateEnd}": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Business Dev Rep Changes",
        "parameters": [
          {
            "name": "dateStart",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "dateEnd",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/BusDevRepChangesInfinite": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Get BusDevRep changes Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/BusDevRepChangesByContact/{contactId}": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Business Dev Rep Changes By Contact",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/Search": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Search Contacts",
        "parameters": [
          {
            "name": "searchTerm",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "contactTypeId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "shouldLimit",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{id}": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Contact by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Contact"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Contact"
        ],
        "summary": "Update Contact",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Contact"
        ],
        "summary": "Delete Contact",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/IntegrateContacts/{contactId}": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Super Admin - Integrate All Contacts",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/ContactReport/{fromDate}/{toDate}": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Contact Report",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/GetContactReportInfinite/{fromDate}/{toDate}": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Job management Report infinite",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/ActivitiesWidget/{contactId}/{fromDt}/{toDt}": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Activities Widget",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fromDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/ActivitiesWidgetByReferringEntity/{referringEntityId}/{fromDt}/{toDt}": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Activities Widget by ReferringEntityId",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fromDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/ApExpensesWidget/{contactId}/{fromDt}/{toDt}": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get AP Expenses",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fromDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/ProjectsWidget/{contactId}/From/{fromDt}/To/{toDt}": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Projects Widget",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fromDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{contactId}/AddressesV2/{addressV2Id}": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Assign Address V2 to Contact",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Contact"
        ],
        "summary": "Remove Address V2 from Contact",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{contactId}/AddressesV2/{contactAddressId}/IsPrimary": {
      "put": {
        "tags": [
          "Contact"
        ],
        "summary": "Update IsPrimary status for a Contact Address",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "contactAddressId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "text/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "boolean"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{contactId}/AddressesV2": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Addresses V2 for Contact",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{contactId}/History": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Contact History",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/favorites/{contactId}": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Adds a contact to the current user's favorites",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "The contact ID to add to favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Contact"
        ],
        "summary": "Removes a contact from the current user's favorites",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "The contact ID to remove from favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/favorites": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Gets the current user's favorite contacts",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/recents/{contactId}": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Updates the current user's recently accessed contacts\r\nMaintains maximum of 20 recent entries, removing oldest when limit is reached",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "The contact ID that was accessed",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/recents": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Gets the current user's recently accessed contacts\r\nReturns up to 20 most recent entries sorted by access date descending",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{contactId}/Accounts": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get Contact Accounts (via AccountContact link table)",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{contactId}/LinkAccount/{accountId}": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Link Account to Contact",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{contactId}/UnlinkAccount/{accountContactId}": {
      "delete": {
        "tags": [
          "Contact"
        ],
        "summary": "Unlink Account from Contact",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountContactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{contactId}/TogglePrimaryAccount/{accountContactId}": {
      "put": {
        "tags": [
          "Contact"
        ],
        "summary": "Toggle Primary Account for Contact",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountContactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{id}/linked-entities": {
      "get": {
        "tags": [
          "Contact"
        ],
        "summary": "Get linked entities for a contact (for deletion reassignment)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{sourceId}/reassign/{targetId}": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Reassign all linked entities from source contact to target contact",
        "parameters": [
          {
            "name": "sourceId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "targetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Contacts/{id}/unlink-all": {
      "post": {
        "tags": [
          "Contact"
        ],
        "summary": "Unlink all entities from contact (set FKs to null where possible, delete junctions)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ContactTypes": {
      "get": {
        "tags": [
          "ContactType"
        ],
        "summary": "Get All Contact Types",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "ContactType"
        ],
        "summary": "Create Contact Type",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ContactTypes/EditableContactTypes": {
      "get": {
        "tags": [
          "ContactType"
        ],
        "summary": "Get Users Editable Contact Types",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ContactTypes/{id}": {
      "get": {
        "tags": [
          "ContactType"
        ],
        "summary": "Get Contact Type By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "ContactType"
        ],
        "summary": "Update Contact Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ContactType"
        ],
        "summary": "Delete Contact Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CopyJobExceptions": {
      "get": {
        "tags": [
          "CopyJobException"
        ],
        "summary": "Get All Copy Job Exceptions",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CopyJobExceptions/{id}": {
      "get": {
        "tags": [
          "CopyJobException"
        ],
        "summary": "Get Copy Job Exception By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "CopyJobException"
        ],
        "summary": "Delete Copy Job Exception",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CopyJobExceptions/{accountId}": {
      "post": {
        "tags": [
          "CopyJobException"
        ],
        "summary": "Create Copy Job Exception",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/status": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/staff-preview/handoff": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "summary": "Mint a short-lived staff preview handoff for the given portal (Angular View Portal).",
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/login/otp/request": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpRequestBody"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpRequestBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpRequestBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpRequestBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/login/otp/verify": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpVerifyBody"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpVerifyBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpVerifyBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpVerifyBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/otp/request": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpRequestBody"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpRequestBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpRequestBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpRequestBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/otp/verify": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpVerifyBody"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpVerifyBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpVerifyBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalOtpVerifyBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/signout": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/content": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/messages": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "afterId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 80
            }
          },
          {
            "name": "threadEmail",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "threadEmail",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMessagePostRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMessagePostRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMessagePostRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMessagePostRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/messages/attachments": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalThreadAttachmentRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalThreadAttachmentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalThreadAttachmentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalThreadAttachmentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-messages": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "threadEmail",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "afterId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 80
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "threadEmail",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMessagePostRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMessagePostRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMessagePostRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMessagePostRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-messages/attachments": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalThreadAttachmentRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalThreadAttachmentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalThreadAttachmentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalThreadAttachmentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/videos/uploads/init": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/videos/uploads/{uploadSessionId}/complete": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "uploadSessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/videos/{videoId}/status": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "videoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-videos/uploads/init": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-videos/uploads/{uploadSessionId}/complete": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "uploadSessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/live-sessions": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/live-sessions/{sessionId}/cancel": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-live-sessions": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "threadEmail",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-live-sessions/invite": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "threadEmail",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-live-sessions/{sessionId}/accept": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-live-sessions/{sessionId}/decline": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionDeclineRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionDeclineRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionDeclineRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveSessionDeclineRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/live-sessions/{sessionId}/join": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/live-sessions/{sessionId}/connected": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveConnectedRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveConnectedRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveConnectedRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveConnectedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/live-sessions/{sessionId}/end": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-live-sessions/{sessionId}/join": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-live-sessions/{sessionId}/connected": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveConnectedRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveConnectedRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveConnectedRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalLiveConnectedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-live-sessions/{sessionId}/end": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/acs/recording-events": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "summary": "Azure Event Grid webhook for ACS Call Automation recording events\r\n(subscription validation + Microsoft.Communication.RecordingFileStatusUpdated).",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/content/media": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "photo"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 40
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "shared-desc"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/downloads": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/downloads/zip": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalZipRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalZipRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalZipRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalZipRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/downloads/photosheet": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalPhotoSheetRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalPhotoSheetRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalPhotoSheetRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalPhotoSheetRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/members": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "summary": "Staff preview (Bearer or handoff) — add/update an approved email on this portal.",
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMemberInput"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMemberInput"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMemberInput"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMemberInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/members/{memberId}": {
      "delete": {
        "tags": [
          "CustomerPortal"
        ],
        "summary": "Staff preview — revoke an approved email on this portal.",
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "memberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/invite": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "summary": "Staff preview — email the portal link to selected (or all active) members.",
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalInviteRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalInviteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalInviteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalInviteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{publicId}/media/{mediaType}/{mediaId}/access": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mediaType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mediaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "download",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "thumbnail",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalProvisionRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalProvisionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalProvisionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalProvisionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/by-entity": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{portalId}": {
      "put": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "portalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalUpdateRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalUpdateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalUpdateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/media/{mediaType}/{mediaId}/access": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "summary": "Staff admin media preview/download SAS (no portal cookie; does not write recipient access logs).",
        "parameters": [
          {
            "name": "mediaType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mediaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "download",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "thumbnail",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/recipients": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/recipients/{email}/message-scopes": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/recipients/{email}": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/recipients/{email}/grants": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          },
          {
            "name": "mediaType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/recipients/{email}/access-log": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "eventType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-shares": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-shares/{email}/grants": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 500
            }
          },
          {
            "name": "mediaType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-shares/copy-grants": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalCopyEntityGrantsRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalCopyEntityGrantsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalCopyEntityGrantsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalCopyEntityGrantsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/entity-shares/{email}/access-log": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "eventType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/recipients/{email}/revoke": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/recipients/{email}/send-link": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalSendLinkRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalSendLinkRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalSendLinkRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalSendLinkRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/grants": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "mediaType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mediaId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "CustomerPortal"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalGrantPutRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalGrantPutRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalGrantPutRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalGrantPutRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/grants/counts": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "mediaType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{portalId}/members": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "portalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMemberInput"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMemberInput"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMemberInput"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalMemberInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{portalId}/members/{memberId}": {
      "delete": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "portalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "memberId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{portalId}/invite": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "portalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalInviteRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalInviteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalInviteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerPortalInviteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{portalId}/audit/link-copied": {
      "post": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "portalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/CustomerPortal/{portalId}/audit": {
      "get": {
        "tags": [
          "CustomerPortal"
        ],
        "parameters": [
          {
            "name": "portalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/RecentEmergencyServiceJobs/{date}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Today's Emergency Service Jobs",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/RecentHurricaneJobs/{date}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Today's Hurricane Jobs",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/RecentMoldJobs/{date}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Today's Mold Jobs",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/RecentSignedRepairJobs": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Today's Signed Repair Jobs",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/UpcomingActivities": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Upcoming Activities",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/TodaysActivities/Date/{date}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Todays Activities",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/SignedUnsignedRepairJobs": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Signed / Unsigned Repair Jobs count",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/UnapprovedARJobTransactions": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get AR And Job Transactions",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/SalesUsersContacts": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Sales User's Contacts",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/UsersContacts": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get User's Contacts",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/UsersReferringEntities": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get User's Referring Entities",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/UsersActivities": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get User's Activities",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/MyTeamsJobs": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get User's Team's Jobs",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/FavoritedJobs": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/FavoritedProjects": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/MyTeamsSignedUnsignedRepairJobs": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get User's Team's Signed / Unsigned Repair Jobs count",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/MyTeamsUnapprovedARJobTransactions": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get My Treams AR And Job Transactions",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/AvgRecentJobRevByType/{fromDate}/{toDate}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Average Revenue of Recent Jobs, grouped by type",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/UnassignedJobs": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Jobs that are not assigned to a team",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/UnassignedJobsBusDev": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Jobs that do not have a bus dev rep assigned",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/SalesUnreviewedJobs": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get ureviewed jobs for sales dashboard",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/SalesMyReviewedJobs": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get reviewed jobs for the logged in user for sales dashboard",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/AllUnbilledActiveOpenJobsDetails": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get All Unbilled Active Open JobsDetails",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/TotalCompanyRevenue/{fromDate}/{toDate}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get Total company Revenue Rolling 12 Months",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/TopRevContacts/{fromDate}/{toDate}/{whichRev}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Top Rev Contacts",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "whichRev",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "default": "all"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/TopRevReferringEntities/{fromDate}/{toDate}/{whichRev}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Top Revenue Producing Referring Entities (updated for new ReferringEntity system)",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "whichRev",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "default": "all"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/TopProjCountReferringEntities/{fromDate}/{toDate}/{whichCount}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Top Project Count Referring Entities (updated for new ReferringEntity system)",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "whichCount",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "default": "all"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/TopProjCountContacts/{fromDate}/{toDate}/{whichCount}": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Top Project Count Contacts",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "whichCount",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "default": "all"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Dashboard/UnfulfilledEspRequests": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get unfulfilled ESP Request Days (Status != Complete) for the dashboard widget",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/Divisions": {
      "get": {
        "tags": [
          "Division"
        ],
        "summary": "Get All Divisions",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Division"
        ],
        "summary": "Create Division",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Division"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Division"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Division"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Division"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/Divisions/List": {
      "get": {
        "tags": [
          "Division"
        ],
        "summary": "Get Division List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/admin/Divisions/{id}": {
      "get": {
        "tags": [
          "Division"
        ],
        "summary": "Get Division by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Division"
        ],
        "summary": "Update Division",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Division"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Division"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Division"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Division"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Division"
        ],
        "summary": "Delete Division",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityDocuments": {
      "get": {
        "tags": [
          "EntityDocuments"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "contactId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "referringEntityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityDocuments/Accounts/{accountId}/Upload": {
      "post": {
        "tags": [
          "EntityDocuments"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityDocuments/Contacts/{contactId}/Upload": {
      "post": {
        "tags": [
          "EntityDocuments"
        ],
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityDocuments/Referrers/{referringEntityId}/Upload": {
      "post": {
        "tags": [
          "EntityDocuments"
        ],
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUploadVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityDocuments/Update/{docId}": {
      "put": {
        "tags": [
          "EntityDocuments"
        ],
        "parameters": [
          {
            "name": "docId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUpdateVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUpdateVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUpdateVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentUpdateVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityDocuments/DownloadAsZip": {
      "post": {
        "tags": [
          "EntityDocuments"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentZipRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentZipRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentZipRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentZipRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityDocuments/Download/{docId}": {
      "get": {
        "tags": [
          "EntityDocuments"
        ],
        "parameters": [
          {
            "name": "docId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityDocuments/Email": {
      "post": {
        "tags": [
          "EntityDocuments"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentEmailVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentEmailVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentEmailVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityDocumentEmailVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityDocuments/Delete/{docId}": {
      "delete": {
        "tags": [
          "EntityDocuments"
        ],
        "parameters": [
          {
            "name": "docId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityPhotos": {
      "get": {
        "tags": [
          "EntityPhotos"
        ],
        "summary": "GET /api/v1/EntityPhotos?accountId=1",
        "parameters": [
          {
            "name": "accountId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "contactId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "referringEntityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityPhotos/Accounts/{accountId}/Upload": {
      "post": {
        "tags": [
          "EntityPhotos"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityPhotos/Contacts/{contactId}/Upload": {
      "post": {
        "tags": [
          "EntityPhotos"
        ],
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityPhotos/Referrers/{referringEntityId}/Upload": {
      "post": {
        "tags": [
          "EntityPhotos"
        ],
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUploadVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityPhotos/Update/{photoId}": {
      "put": {
        "tags": [
          "EntityPhotos"
        ],
        "parameters": [
          {
            "name": "photoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUpdateVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUpdateVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUpdateVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EntityPhotoUpdateVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityPhotos/Download/{photoId}": {
      "get": {
        "tags": [
          "EntityPhotos"
        ],
        "parameters": [
          {
            "name": "photoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/EntityPhotos/Delete/{photoId}": {
      "delete": {
        "tags": [
          "EntityPhotos"
        ],
        "parameters": [
          {
            "name": "photoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/SearchEquipment": {
      "get": {
        "tags": [
          "Equipment"
        ],
        "parameters": [
          {
            "name": "searchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "activeStatus",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "active"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentTypes": {
      "get": {
        "tags": [
          "Equipment"
        ],
        "summary": "Get All Equipment Types",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentType": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "summary": "Create EquipmentType",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentType/{id}": {
      "put": {
        "tags": [
          "Equipment"
        ],
        "summary": "Update EquipmentType",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Equipment"
        ],
        "summary": "Delete EquipmentType",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentInfScroll": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "summary": "Get EquipmentInfScroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentTracking": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "summary": "Get EquipmentTracking",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentByEquipmentType/{equipmentTypeId}": {
      "get": {
        "tags": [
          "Equipment"
        ],
        "summary": "Get Equipment By Equipment Type",
        "parameters": [
          {
            "name": "equipmentTypeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentOptions": {
      "get": {
        "tags": [
          "Equipment"
        ],
        "summary": "Get Equipment options",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/GetEquipment/{equipmentId}": {
      "get": {
        "tags": [
          "Equipment"
        ],
        "parameters": [
          {
            "name": "equipmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/GetAllEquipmentFromLocation": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/Equipment": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "summary": "Create Equipment",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/MoveEquipment": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/AccidentalDeleteSuggestion/{equipmentId}": {
      "get": {
        "tags": [
          "Equipment"
        ],
        "parameters": [
          {
            "name": "equipmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/DeleteAccidentalJobEquipment/{equipmentId}": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "parameters": [
          {
            "name": "equipmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MoveEquipmentInfoVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoveEquipmentInfoVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MoveEquipmentInfoVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MoveEquipmentInfoVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/MoveBulkEquipment": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/AdminEquipmentRemoveAll": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/{id}": {
      "put": {
        "tags": [
          "Equipment"
        ],
        "summary": "Update EquipmentType",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Equipment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Equipment"
        ],
        "summary": "Delete EquipmentType",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentLocations": {
      "get": {
        "tags": [
          "Equipment"
        ],
        "summary": "Get All Equipment Locations",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentLocation": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "summary": "Create EquipmentLocation",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentLocation"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentLocation"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentLocation"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentLocation"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Equipment/EquipmentLocation/{id}": {
      "put": {
        "tags": [
          "Equipment"
        ],
        "summary": "Update EquipmentLocation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentLocation"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentLocation"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentLocation"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentLocation"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Equipment"
        ],
        "summary": "Delete EquipmentLocation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/Options": {
      "get": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/JobArea": {
      "post": {
        "tags": [
          "EspJob"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobArea"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobArea"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobArea"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobArea"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "EspJob"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobArea"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobArea"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobArea"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobArea"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/JobArea/{jobAreaId}": {
      "delete": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "jobAreaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/JobAreas/{jobId}": {
      "get": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/AddEquipmentToJobArea/{equipmentId}/{jobAreaId}": {
      "post": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "equipmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobAreaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/AreaEquipmentSummary/{jobId}": {
      "get": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/MostRecentPsychDate/{jobId}": {
      "get": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/Psychometric/{jobId}/{frmDt}/{toDt}": {
      "get": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "frmDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/PsychometricLine": {
      "post": {
        "tags": [
          "EspJob"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PsychometricLine"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PsychometricLine"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PsychometricLine"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PsychometricLine"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "EspJob"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PsychometricLine"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PsychometricLine"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PsychometricLine"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PsychometricLine"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/PsychometricLine/{id}": {
      "delete": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/ESPTimeInOutRecsForJob/{jobId}": {
      "get": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/ESPTimeInOutRec": {
      "post": {
        "tags": [
          "EspJob"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ESPTimeInOut"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ESPTimeInOut"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ESPTimeInOut"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ESPTimeInOut"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "EspJob"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ESPTimeInOut"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ESPTimeInOut"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ESPTimeInOut"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ESPTimeInOut"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/ESPTimeInOutRec/{id}": {
      "delete": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/UpdateEsChecklist/{jobId}/{checklistOption}/{value}": {
      "put": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "checklistOption",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "value",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPJobController/EsChecklist/{jobId}": {
      "get": {
        "tags": [
          "EspJob"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days": {
      "get": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDayRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDayRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDayRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDayRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}": {
      "get": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}/Status": {
      "put": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateStatusRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateStatusRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateStatusRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateStatusRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}/ReadyForReview": {
      "put": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReadyForReviewRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReadyForReviewRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReadyForReviewRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReadyForReviewRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}/Trucks": {
      "post": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TruckRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TruckRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TruckRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TruckRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}/Trucks/{truckId}": {
      "put": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "truckId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TruckRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TruckRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TruckRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TruckRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "truckId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}/Trucks/{truckId}/Fulfill": {
      "put": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "truckId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/SupervisorUsers": {
      "get": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}/Resources": {
      "get": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EspRequestResources"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EspRequestResources"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EspRequestResources"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EspRequestResources"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}/Conflicts": {
      "get": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/InUse": {
      "get": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "date",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}/CopyFromPrevious": {
      "post": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EspRequest/Days/{dayId}/Fulfillment": {
      "post": {
        "tags": [
          "EspRequest"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FulfillmentRequest"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FulfillmentRequest"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FulfillmentRequest"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FulfillmentRequest"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPSetup/Areas": {
      "get": {
        "tags": [
          "ESPSetup"
        ],
        "summary": "Get All Areas",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPSetup/Area": {
      "post": {
        "tags": [
          "ESPSetup"
        ],
        "summary": "Create Area",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Area"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Area"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Area"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Area"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPSetup/Area/{id}": {
      "put": {
        "tags": [
          "ESPSetup"
        ],
        "summary": "Update Area",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Area"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Area"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Area"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Area"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ESPSetup"
        ],
        "summary": "Delete Area",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPSetup/FlooringTypes": {
      "get": {
        "tags": [
          "ESPSetup"
        ],
        "summary": "Get All FlooringTypes",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPSetup/FlooringType": {
      "post": {
        "tags": [
          "ESPSetup"
        ],
        "summary": "Create FlooringType",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/FlooringType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FlooringType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FlooringType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FlooringType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ESPSetup/FlooringType/{id}": {
      "put": {
        "tags": [
          "ESPSetup"
        ],
        "summary": "Update FlooringType",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/FlooringType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FlooringType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FlooringType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FlooringType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ESPSetup"
        ],
        "summary": "Delete FlooringType",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalAuth/{guid}": {
      "get": {
        "tags": [
          "ExternalAuth"
        ],
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalAuth/Sign/{guid}": {
      "post": {
        "tags": [
          "ExternalAuth"
        ],
        "summary": "Upload Job Signature",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}": {
      "get": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Get payment data for customer payment page by GUID",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/initialize": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Initializes legacy payment requests before the payment page renders.",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/complete": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Process payment completion (called by Stripe webhook or client)",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Payment completion data",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentCompletionVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentCompletionVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentCompletionVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentCompletionVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/validate/{paymentMethod}/{amount}": {
      "get": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Validate payment amount and get fee calculation",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentMethod",
            "in": "path",
            "description": "Payment method",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "amount",
            "in": "path",
            "description": "Payment amount",
            "required": true,
            "schema": {
              "type": "number",
              "format": "double"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/ValidateCardType": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Validate card type against selected payment method",
        "requestBody": {
          "description": "Card validation request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateCardTypeRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateCardTypeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateCardTypeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateCardTypeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/confirm-payment": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Confirm Stripe payment intent",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Payment confirmation request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmPaymentRequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmPaymentRequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmPaymentRequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmPaymentRequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/payment-status": {
      "get": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Get payment status for a payment request",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/create-payment-intent": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Create payment intent for Payment Element (supports dynamic payment method selection)",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Payment intent creation request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentIntentV2RequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentIntentV2RequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentIntentV2RequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentIntentV2RequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/update-payment-intent": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Update payment intent amount based on selected payment method and fees",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Update payment intent request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePaymentIntentRequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePaymentIntentRequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePaymentIntentRequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePaymentIntentRequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/submit-payment": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Single entry-point for payment submission.\r\nCreates a Pending Payment record, then confirms the PaymentIntent server-side with Stripe.\r\nThe webpage is not responsible for completion — the Stripe webhook promotes the record to Completed.",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitPaymentRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitPaymentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitPaymentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitPaymentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/confirm-and-process-payment": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Confirm Stripe payment and process P2 payment in one atomic operation",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Payment confirmation and processing request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmAndProcessPaymentRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmAndProcessPaymentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmAndProcessPaymentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ConfirmAndProcessPaymentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/payment-intent-details": {
      "get": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Get payment intent details including direct charge status",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "description": "Payment request GUID",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/calculate-payment-preview": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Calculate payment preview with fee breakdown",
        "requestBody": {
          "description": "Payment preview request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentPreviewRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentPreviewRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentPreviewRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentPreviewRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/ExternalPayment/{guid}/prepare-payment": {
      "post": {
        "tags": [
          "ExternalPayment"
        ],
        "summary": "Prepares payment by retrieving card details from Stripe, calculating fees, and updating payment intent",
        "parameters": [
          {
            "name": "guid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PreparePaymentRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreparePaymentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PreparePaymentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PreparePaymentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/FieldDocumentation/Days": {
      "get": {
        "tags": [
          "FieldDocumentation"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "FieldDocumentation"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCotWDayRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCotWDayRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCotWDayRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCotWDayRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/FieldDocumentation/Days/{dayId}": {
      "get": {
        "tags": [
          "FieldDocumentation"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "FieldDocumentation"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/FieldDocumentationDay"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FieldDocumentationDay"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FieldDocumentationDay"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FieldDocumentationDay"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "FieldDocumentation"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/FieldDocumentation/Days/{dayId}/Sign": {
      "put": {
        "tags": [
          "FieldDocumentation"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SignCotWDayRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignCotWDayRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SignCotWDayRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SignCotWDayRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "FieldDocumentation"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/FingerprintAnalysis/analyze": {
      "get": {
        "tags": [
          "FingerprintAnalysis"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/FingerprintAnalysis/device-sharing": {
      "get": {
        "tags": [
          "FingerprintAnalysis"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/FingerprintAnalysis/fingerprint-frequency": {
      "get": {
        "tags": [
          "FingerprintAnalysis"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/FingerprintAnalysis/user/{username}/fingerprints": {
      "get": {
        "tags": [
          "FingerprintAnalysis"
        ],
        "parameters": [
          {
            "name": "username",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/FingerprintAnalysis/consolidate-fingerprints": {
      "post": {
        "tags": [
          "FingerprintAnalysis"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolidationRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolidationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolidationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ConsolidationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/FingerprintAnalysis/hardware-analysis": {
      "get": {
        "tags": [
          "FingerprintAnalysis"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/FingerprintAnalysis/cross-browser-patterns": {
      "get": {
        "tags": [
          "FingerprintAnalysis"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/FingerprintAnalysis/fingerprint-migration": {
      "get": {
        "tags": [
          "FingerprintAnalysis"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/MoveTransactions": {
      "post": {
        "tags": [
          "FTPRPApproval"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/Options/{includeInactive}": {
      "get": {
        "tags": [
          "FTPRPApproval"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/WeeklyApproval/{fromDate}": {
      "get": {
        "tags": [
          "FTPRPApproval"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/DailyApproval/{fromDate}": {
      "get": {
        "tags": [
          "FTPRPApproval"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/Approve": {
      "post": {
        "tags": [
          "FTPRPApproval"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/Unapprove": {
      "post": {
        "tags": [
          "FTPRPApproval"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/Resync/{lineId}": {
      "post": {
        "tags": [
          "FTPRPApproval"
        ],
        "parameters": [
          {
            "name": "lineId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/AuthorizeJob/{jobId}": {
      "post": {
        "tags": [
          "FTPRPApproval"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/IsWeekClosed/{fromDate}": {
      "get": {
        "tags": [
          "FTPRPApproval"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/CloseWeek/{fromDate}": {
      "post": {
        "tags": [
          "FTPRPApproval"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/ReopenWeek/{fromDate}": {
      "post": {
        "tags": [
          "FTPRPApproval"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPApproval/GetClosedWeeks": {
      "get": {
        "tags": [
          "FTPRPApproval"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPHeaders/job/{jobId}": {
      "get": {
        "tags": [
          "FTPRPHeaders"
        ],
        "summary": "Get all FTPRP headers for a specific job (Repair jobs only)",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPHeaders/{id}": {
      "get": {
        "tags": [
          "FTPRPHeaders"
        ],
        "summary": "Get specific FTPRP header by ID with calculated amounts",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Header ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "FTPRPHeaders"
        ],
        "summary": "Update FTPRP header (non-calculated fields only)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Header ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Updated header data",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPHeaders"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPHeaders"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPHeaders"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPHeaders"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "FTPRPHeaders"
        ],
        "summary": "Delete FTPRP header and all associated lines",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Header ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPHeaders/from-xactimate": {
      "post": {
        "tags": [
          "FTPRPHeaders"
        ],
        "summary": "Create FTPRP headers from Xactimate data (Repair jobs only)",
        "requestBody": {
          "description": "Xactimate data for header creation",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFTPRPHeadersRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFTPRPHeadersRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFTPRPHeadersRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFTPRPHeadersRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPHeaders": {
      "post": {
        "tags": [
          "FTPRPHeaders"
        ],
        "summary": "Create individual FTPRP header manually",
        "requestBody": {
          "description": "Header data to create",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPHeaders"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPHeaders"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPHeaders"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPHeaders"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPHeaders/job/{jobId}/with-lines": {
      "get": {
        "tags": [
          "FTPRPHeaders"
        ],
        "summary": "Get FTPRP headers with nested lines for a specific job (single call)",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPHeaders/job/{jobId}/headers-only": {
      "get": {
        "tags": [
          "FTPRPHeaders"
        ],
        "summary": "Get FTPRP headers for a specific job (headers only - legacy endpoint)",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPHeaders/job/{jobId}/excel": {
      "get": {
        "tags": [
          "FTPRPHeaders"
        ],
        "summary": "Download FTPRP headers with lines as Excel file for a specific job.\r\nOptional query filters match the FTPRP UI filter bar; export rows and totals respect them.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "SearchText",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "XactimateLineNumber",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "XactimateIdentifier",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Group",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Technician",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ElementPhase",
            "in": "query",
            "description": "Element/Phase key in the form \"ElementDesc|PhaseDesc\".",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "DateOfWorkFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "DateOfWorkTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "DateApprovedFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "DateApprovedTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPJobs/RepairJobs": {
      "get": {
        "tags": [
          "FTPRPJob"
        ],
        "summary": "Get all repair jobs for FTPRP dropdown (project context)",
        "parameters": [
          {
            "name": "projectId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPJobs/RepairJob/{jobId}": {
      "get": {
        "tags": [
          "FTPRPJob"
        ],
        "summary": "Get specific repair job details for FTPRP",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPLines/header/{headerId}": {
      "get": {
        "tags": [
          "FTPRPLines"
        ],
        "summary": "Get all FTPRP lines for a specific header",
        "parameters": [
          {
            "name": "headerId",
            "in": "path",
            "description": "Header ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPLines": {
      "post": {
        "tags": [
          "FTPRPLines"
        ],
        "summary": "Create new FTPRP payment line",
        "requestBody": {
          "description": "New payment line data",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPLines"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPLines"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPLines"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPLines"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPLines/{id}": {
      "put": {
        "tags": [
          "FTPRPLines"
        ],
        "summary": "Update existing FTPRP payment line (unapproved only)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Line ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Updated line data",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPLines"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPLines"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPLines"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FTPRPLines"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "FTPRPLines"
        ],
        "summary": "Delete FTPRP payment line (unapproved only)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Line ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "get": {
        "tags": [
          "FTPRPLines"
        ],
        "summary": "Get FTPRP line by ID",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Line ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPLines/{id}/reviewed": {
      "post": {
        "tags": [
          "FTPRPLines"
        ],
        "summary": "Toggle the Reviewed status on a FTPRP line and set ReviewedBy to the current user when true",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Line ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Reviewed toggle payload",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleReviewedRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleReviewedRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleReviewedRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleReviewedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPLines/{id}/approve": {
      "post": {
        "tags": [
          "FTPRPLines"
        ],
        "summary": "Approve FTPRP payment line (cannot be undone)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Line ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/FTPRPLines/batch": {
      "post": {
        "tags": [
          "FTPRPLines"
        ],
        "summary": "Create multiple FTPRP payment lines in a single transaction",
        "requestBody": {
          "description": "Array of new payment line data",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FTPRPLines"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FTPRPLines"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FTPRPLines"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FTPRPLines"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Hobbies": {
      "get": {
        "tags": [
          "Hobbies"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Hobbies"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Hobby"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Hobby"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Hobby"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Hobby"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Hobbies/{id}": {
      "get": {
        "tags": [
          "Hobbies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Hobbies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Hobby"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Hobby"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Hobby"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Hobby"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Hobbies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/HurricaneScopeSheet": {
      "get": {
        "tags": [
          "HurricaneScopeSheet"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "HurricaneScopeSheet"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/HurricaneScopeSheet"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HurricaneScopeSheet"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/HurricaneScopeSheet"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/HurricaneScopeSheet"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/HurricaneScopeSheet/Sign": {
      "put": {
        "tags": [
          "HurricaneScopeSheet"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SignScopeSheetRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignScopeSheetRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SignScopeSheetRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SignScopeSheetRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "HurricaneScopeSheet"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/IntegrationLogs/{includeSuccess}/{startDate}/{endDate}": {
      "get": {
        "tags": [
          "IntegrationLog"
        ],
        "summary": "Get All Integration Logs",
        "parameters": [
          {
            "name": "includeSuccess",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "startDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/IntegrationLogs": {
      "post": {
        "tags": [
          "IntegrationLog"
        ],
        "summary": "Posts an integration log",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests": {
      "get": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Get all payment requests with filtering options",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "Filter by status: all, pending, paid, expired, canceled",
            "schema": {
              "type": "string",
              "default": "all"
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "Filter from date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "Filter to date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "dateType",
            "in": "query",
            "description": "Type of date to filter on: created, sent, lastSent, paid",
            "schema": {
              "type": "string",
              "default": "created"
            }
          },
          {
            "name": "searchText",
            "in": "query",
            "description": "Search across invoice numbers, job IDs, customer names, confirmation numbers, and Stripe payment intent IDs",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "invoiceNumber",
            "in": "query",
            "description": "Filter by invoice number",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "confirmationNumber",
            "in": "query",
            "description": "Filter by confirmation number",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stripeIntentId",
            "in": "query",
            "description": "Filter by Stripe payment intent ID",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "jobId",
            "in": "query",
            "description": "Filter by Job ID",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerName",
            "in": "query",
            "description": "Filter by customer name",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerEmail",
            "in": "query",
            "description": "Filter by customer email",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paymentMethod",
            "in": "query",
            "description": "Filter by payment method: CreditCard, DebitCard, ACH",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "jobTrxError",
            "in": "query",
            "description": "Filter by jobTrxError: any, none, specific error message",
            "schema": {
              "type": "string",
              "default": "any"
            }
          },
          {
            "name": "glPostError",
            "in": "query",
            "description": "Filter by glPostError: any, none, specific error message",
            "schema": {
              "type": "string",
              "default": "any"
            }
          },
          {
            "name": "cashReceiptError",
            "in": "query",
            "description": "Filter by cashReceiptError: any, none, specific error message",
            "schema": {
              "type": "string",
              "default": "any"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Number of records per page",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          },
          {
            "name": "sortBy",
            "in": "query",
            "description": "Sort column",
            "schema": {
              "type": "string",
              "default": "sentDate"
            }
          },
          {
            "name": "sortDirection",
            "in": "query",
            "description": "Sort direction (asc/desc)",
            "schema": {
              "type": "string",
              "default": "desc"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}": {
      "get": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Get payment request by ID",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Payment request ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/create": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Create a payment request without sending email (for PDF embedding)",
        "requestBody": {
          "description": "Payment request details",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentRequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentRequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentRequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePaymentRequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/send-with-pdf": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Send a professional payment request email with PDF attachment",
        "requestBody": {
          "description": "Payment request email details",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SendPaymentRequestWithPdfVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendPaymentRequestWithPdfVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SendPaymentRequestWithPdfVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SendPaymentRequestWithPdfVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/send": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Send a new payment request for an invoice",
        "requestBody": {
          "description": "Payment request details",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SendPaymentRequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendPaymentRequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SendPaymentRequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SendPaymentRequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}/resend": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Resend an existing payment request",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Payment request ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}/resend-microdeposit-email": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Resend the ACH microdeposit verification email for a payment request",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ResendMicrodepositEmailRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResendMicrodepositEmailRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ResendMicrodepositEmailRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ResendMicrodepositEmailRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}/toggle-manual-bank-entry": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Toggle the manual bank entry (AllowManualBankEntry) flag on a payment request.\r\nClears the Stripe PaymentIntent so the next page load creates a new one with the correct VerificationMethod.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleManualBankEntryRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleManualBankEntryRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleManualBankEntryRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleManualBankEntryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/by-invoice/{arTrxId}/set-manual-bank-entry": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Update GeneratedViaManualPayment on all open payment requests for a given invoice,\r\nclearing StripePaymentIntentId so the next page load creates a new PI with the correct VerificationMethod.",
        "parameters": [
          {
            "name": "arTrxId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleManualBankEntryRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleManualBankEntryRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleManualBankEntryRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToggleManualBankEntryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}/reset-expiration": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Reset the expiration date for a payment request",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Payment request ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}/cancel": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Cancel a payment request",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Payment request ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}/sync-ar-balances": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Mark payment request complete when all linked AR headers have zero balance (e.g. after GP credits + Stripe remainder).",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}/update": {
      "put": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Update an existing payment request with new email addresses",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Payment request ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Update details",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePaymentRequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePaymentRequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePaymentRequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePaymentRequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}/resync": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Resync payment request GP integration",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Payment request ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/requests/{id}/retry-gp-integration": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Retry specific GP integration component (CashReceipt, GlPosting, JobTrx)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Payment request ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Retry request details",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RetryGpIntegrationModel"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RetryGpIntegrationModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RetryGpIntegrationModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RetryGpIntegrationModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/payments/{paymentId}/retry-gp-integration": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Retry GP integration for a specific payment (multi-payment support)",
        "parameters": [
          {
            "name": "paymentId",
            "in": "path",
            "description": "Payment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Retry request details",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RetryGpIntegrationModel"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RetryGpIntegrationModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RetryGpIntegrationModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RetryGpIntegrationModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/payments/{paymentId}/mark-received": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Admin override to mark a pending ACH payment as received and run the normal downstream processing.",
        "parameters": [
          {
            "name": "paymentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/payments/{paymentId}/cancel-pending": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Cancel a pending payment record and its Stripe PaymentIntent (if any).",
        "parameters": [
          {
            "name": "paymentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/{id}/invalidate": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Invalidate a completed payment request (e.g., for ACH failures)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InvalidatePaymentRequestModel"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvalidatePaymentRequestModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InvalidatePaymentRequestModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InvalidatePaymentRequestModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/InvoicePayment/{id}/update-sync-error": {
      "post": {
        "tags": [
          "InvoicePayment"
        ],
        "summary": "Update GP sync error message for a payment request (used when resync fails)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGpSyncErrorModel"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGpSyncErrorModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGpSyncErrorModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateGpSyncErrorModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/CreateLetterPDF": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Update letter properties (in holding state)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/RegenerateLetterPDF": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Super Admin only: rebuild an existing letter PDF from stored letter fields/signatures\r\n(layout fixes) without clearing signatures or opening recreate mode.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/DownloadLetterUnsigned": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Generate an unsigned letter PDF (no Azure upload, no document record, no note).\r\nRequires rep signature + required fields; customer signature is not required.\r\nReturns the raw base64 PDF string for immediate browser download.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/UpdateLetter": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Update letter properties (in holding state)",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Upload/Diagram": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Upload Job Diagram",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Diagaram/{diagramId}": {
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete Job Diagram",
        "parameters": [
          {
            "name": "diagramId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Diagram/{diagramId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Download Diagram",
        "parameters": [
          {
            "name": "diagramId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/DiagramDataPoints/{diagramId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Diagram Data Points",
        "parameters": [
          {
            "name": "diagramId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Upload/Images": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Upload Job Image",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Images": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Images\r\n<param name=\"jobId\"></param>",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Photos/{id}": {
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete Job Photo",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Photo": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job Photo",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhotos"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhotos"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhotos"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhotos"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Upload/Docs": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Upload Job Doc",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Upload/Letter": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Upload Job Doc",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/WorkAuthURL": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job WorkAuth",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/WorkAuthRefresh": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job WorkAuth",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/GetDiagrams/{jobId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Documents",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Docs": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Documents",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Docs/{id}": {
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete Job Document",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Docs": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job Document",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobDocuments"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobDocuments"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobDocuments"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobDocuments"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/LinkedSpecialInstructions": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Notes",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Notes": {
      "get": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Notes/BusinessDevelopment": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Active Business Development notes for a job, its project(s), and sibling jobs on those projects.\r\nFiltered server-side for efficiency.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Note": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Job Note by Id",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job Note",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Note/{noteId}": {
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete Job Note",
        "parameters": [
          {
            "name": "noteId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/AddProject/{projId}/ToJob/{jobId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Add Project To Job",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/RemoveProject/{projId}/FromJob/{jobId}": {
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Remove job from project",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/IntegrateJobs/{jobId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Super Admin - Integrate Jobs",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/UpdateReconciled/JobId/{jobId}/Status/{status}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Update Reconciled Status",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/GetJobAndBillAccountContacts/{jobId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Active Job And Bill Account Contacts",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/AssessmentReports": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Assessment reports for a job, newest first. One job can have many.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Letters/{jobId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Letters",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "letterType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "letterType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "categoryId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "documentId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Letters/{jobId}/{letterType}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Letters",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "letterType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "letterType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "categoryId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "documentId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/AddCompanionJob/{newProjectId}/Project/{oldProjectId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Add Companion Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "newProjectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "oldProjectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/TimelineFields/{jobType}": {
      "get": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "jobType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/TransactionDetails/{type}": {
      "get": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "type",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/DryLogs": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Dry Logs for Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Dry Log",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDryLogRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDryLogRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDryLogRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDryLogRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/DryLogs/{dryLogId}/Record": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Record Dry Log",
        "parameters": [
          {
            "name": "dryLogId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/ClearSignature/{signatureType}": {
      "put": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "signatureType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Transactions/AA/Summary": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Summary of AA Transactions",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Transactions/AA/Detail/Level/{level}/Element/{element}/Phase/{phase}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Aa Detail Transactions",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "level",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "element",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/BackChargeRpt/{activeStatus}/Transactions/AA/Detail/{reconciled}/{startDate}/{endDate}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Back charge report",
        "parameters": [
          {
            "name": "activeStatus",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reconciled",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "startDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{activeStatus}/Transactions/AA/Detail/{backChargeRpt}/{startDate}/{endDate}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get All Aa Detail Transactions\r\nJob Transaction Rpt",
        "parameters": [
          {
            "name": "activeStatus",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "backChargeRpt",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "startDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Invoices/Paid/AA/Detail/CommissionPeriodId/{comPeriodId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get All Aa Detail Transactions",
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "comPeriodId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/HasJobBeenPhased": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Check if a job has been phased (phases with revenue).\r\nDefault: at least two. Diller teams: at least one.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID to check",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/SmsOptions": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get SMS options for a job, including active technicians and deduped recipients.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Sms/VehicleEta": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Get vehicles (with GPS when available) for SMS vehicle ETA.\r\nPass UserIds for assigned-vehicle lookup, VehicleDataIds for explicit vehicle selection, or both.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobSmsVehicleEtaRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobSmsVehicleEtaRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobSmsVehicleEtaRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobSmsVehicleEtaRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Sms/Enroll": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Enroll an SMS recipient entity (account, contact, or referring entity).",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EnrollSmsRecipientRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnrollSmsRecipientRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EnrollSmsRecipientRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EnrollSmsRecipientRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Sms": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Send SMS for a job and create an audit note.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SendJobSmsRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendJobSmsRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SendJobSmsRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SendJobSmsRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/JobContacts": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Contacts",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/CreateJobContact/{contactId}/{customDesc}/{limitEdit}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Job Contacts",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "customDesc",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limitEdit",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/UpdateJobContact": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job Contact",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobContact"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobContact"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobContact"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobContact"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/DeleteJobContact/{contactId}": {
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete Job Contacts. Optionally cascade remove to linked project and/or sibling jobs.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "removeFromProject",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "removeFromSiblingJobs",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Emails": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Emails",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Jobs/Emails": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Get Jobs Emails",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/EmailJobPhotos": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Email Job Photos",
        "parameters": [
          {
            "name": "allPhotos",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/DownloadPhotosAsZip": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Download Photos as zip",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/EmailPDF": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Email Pdf Job Cover",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Photo/{blobContainer}/{jobId}/{photoUrl}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Download Image",
        "parameters": [
          {
            "name": "blobContainer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "photoUrl",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/WorkAuth/{blobContainer}/{jobId}/LetterType/{letterType}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Download work auth",
        "parameters": [
          {
            "name": "blobContainer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "letterType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/DownloadWorkAuthUnsigned/{jobId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/SubmitCatPack": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "SubmitCatPack � generates a signed PDF, stores it in blob, marks the JobDocument as IsSigned.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/DownloadCatPack/{jobId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "DownloadCatPack � returns the submitted CatPack PDF as base64. Falls back to generating on-the-fly.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/DownloadCatPackDraft/{jobId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "DownloadCatPackDraft � generates a draft CatPack PDF on-the-fly (no submission required).\r\nWorks even if the undersigned has not yet signed.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/EmailCatPack": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "EmailCatPack � emails the CatPack PDF (submitted or draft) to the provided recipients.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/RemoveCatPack": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "RemoveCatPack � clears the submitted CatPack PDF, resets IsSigned, and optionally wipes all signatures.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/RedoCatPack": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "RedoCatPack � inserts a brand-new blank CatPack JobDocument so the job reloads as a fresh form.\r\nThe previous document history is preserved (not deleted).",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/CatPackURL": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "GetCatPackUrl � returns the UriString of the most recent submitted CatPack document.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Download/{documentId}/Job/{jobId}/Letter/{letterType}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Download letter",
        "parameters": [
          {
            "name": "documentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "letterType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/GetLetterUrl/{documentId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get letter url",
        "parameters": [
          {
            "name": "documentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/EmailWorkAuth": {
      "post": {
        "tags": [
          "Job"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/EmailWorkAuthUnsigned": {
      "post": {
        "tags": [
          "Job"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/EmailRemoteWorkAuthRequest": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Email Remote Work Auth Request",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/EmailRemoteCatPackRequest": {
      "post": {
        "tags": [
          "Job"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/DownloadPhotoSheetPDF": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "DownloadPhotoSheetPDF with optional aggressive compression",
        "parameters": [
          {
            "name": "compress",
            "in": "query",
            "description": "Whether to apply aggressive compression (default: false)",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/EmailPhotoSheetPDF": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "EmailPhotoSheetPDF with optional aggressive compression",
        "parameters": [
          {
            "name": "compress",
            "in": "query",
            "description": "Whether to apply aggressive compression (default: false)",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/EmailInvoice/{docType}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Email Pdf Invoice",
        "parameters": [
          {
            "name": "docType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/JobWorkAuthsInProj": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Email Pdf Job Cover",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/CopyWorkAuthorizatin/FromJobId/{fromJobId}/ToJobId/{toJobId}/DocId/{docId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "CopyWorkAuthorization",
        "parameters": [
          {
            "name": "fromJobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "toJobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "docId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/ResyncWorkAuth/JobId/{jobId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "ResyncWorkAuth",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/UpdateWorkAuthorizationFromProject": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "UpdateWorkAuthorizationFromProject",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/SubmitAccountingAuthorization/{jobId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "SubmitAccountingAuthorization",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The ID of the job to authorize",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/RemoveAccountingAuthorization/{jobId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "RemoveAccountingAuthorization",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The ID of the job to remove authorization from",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/SubmitWorkAuthorization": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "SubmitWorkAuthorization",
        "parameters": [
          {
            "name": "isVerbalAuth",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "jobId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/SubmitWorkAuthorizationFromProject": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "SubmitWorkAuthorization",
        "parameters": [
          {
            "name": "isVerbalAuth",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "jobId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/RemoveWorkAuthorization": {
      "post": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "isVerbalAuth",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "jobId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Upload/Signature": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Upload Job Signature",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Upload/LetterSignature": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Upload Job Signature",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Clear/LetterSignature": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Clear a customer or rep signature on a letter in holding state.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/JobDataForLetter/{jobId}/{letterType}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job data for letter",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "letterType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get all Jobs",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Job",
        "parameters": [
          {
            "name": "createJobTypeDependencies",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "createProject",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "projectId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/List": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job List",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/JobsListInfinite": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job List Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/JobsReviewListInfinite": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Review List Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/JobsManagementReportInfinite": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job management Report infinite",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{activeStatus}/Report/{startDate}/{endDate}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job management Report",
        "parameters": [
          {
            "name": "activeStatus",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/favorites": {
      "get": {
        "tags": [
          "Job"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/favorites/{jobId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{id}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{id}/eligible-loyalty-referrers": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get eligible loyalty referrers for a job",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Search": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Search Jobs",
        "parameters": [
          {
            "name": "searchTerm",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "isSigned",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/SearchJobModelWithAreas": {
      "get": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "searchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "isSigned",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/AutoUpdate/{autoUpdate}": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "autoUpdate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/UseSecondaryWorkAuth/{useSecondaryWorkAuth}": {
      "put": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "useSecondaryWorkAuth",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/ForceUseSecondaryAuth/{forceUseSecondaryAuth}": {
      "put": {
        "tags": [
          "Job"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "forceUseSecondaryAuth",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Copy/{jobId}": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Copy Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobTypeId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "projectId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "defaultSubTypeId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "resultingFromCopyButton",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "jobName",
            "in": "query",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "createNewProject",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "newProjectName",
            "in": "query",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/ToggleActiveStatusJob": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Inactivate Job",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/FullyPaid": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job Fully Apply Field",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/JobRevenueVm"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/JobRevenueVm"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/JobRevenueVm"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/JobRevenueVm"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/AR/{arTrxDocNumber}/PaidAmount/{paidAmount}/CashReceipts/{cashReceipts}": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update ArTrxHdr with paid amount",
        "parameters": [
          {
            "name": "arTrxDocNumber",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "paidAmount",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "cashReceipts",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/VerifyActuals": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Verify Job Actuals � refreshes ActualRev/ActualPay before close so that the\r\nloyalty-rewards preview and the close call itself operate on current data.\r\nCall this once before opening the close flow; the close/force-close endpoints\r\nno longer call RefreshJobActualsAndFullyPaidAsync themselves.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Close/ReasonCodeId/{reasonCodeId}/CommissionPeriodId/{commissionPeriodId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Close Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "reasonCodeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "commissionPeriodId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/ForceClose/ReasonCodeId/{reasonCodeId}/CommissionPeriodId/{commissionPeriodId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Close Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "reasonCodeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "commissionPeriodId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/ReOpen/ReasonCodeId/{reasonCodeId}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Re-Open Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "reasonCodeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/ProjectJobs": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Project Jobs",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProjectJobsVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProjectJobsVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProjectJobsVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProjectJobsVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{id}/project-siblings-for-review": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get unreviewed, open sibling jobs belonging to the same project as the specified job.\r\nUsed by the UI to offer batch-confirm during job review.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/bulk-review": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Bulk-review a list of jobs, optionally applying the project hierarchy and BusDevUser.\r\nOnly jobs that are not already reviewed, closed, or inactive are processed.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkReviewRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkReviewRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkReviewRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkReviewRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Review/{updateProjJobs}": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Review Job",
        "parameters": [
          {
            "name": "updateProjJobs",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewJobVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewJobVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewJobVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReviewJobVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/CommissionPeriods": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Commission Periods",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}": {
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/AddressesV2/{addressV2Id}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Assign AddressV2 to Job (sets JobAddressIdV2)",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Remove AddressV2 from Job (set JobAddressIdV2 to null)",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/MarkFTPRPComplete": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Mark FTPRP Complete for a job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/MarkFTPRPReopen": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Reopen FTPRP for a job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Estimates": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Estimates",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Estimates/{id}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Single Job Estimate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete Job Estimate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/EstimateIdByJobId": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Estimate Id By Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Estimates": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Estimate By Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Job Estimate",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job Estimate",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/clearEstimate": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Clear job estimate",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Estimates/Elements": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Elements for Job Estimate",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Estimates/Phases": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get all Job Estimate Phases",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Job Estimate Phase",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobEstimatePhaseVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobEstimatePhaseVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobEstimatePhaseVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobEstimatePhaseVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Estimates/Phases/{id}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Single Job Estimate Phase",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job Estimate Phase",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobEstimatePhaseVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobEstimatePhaseVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobEstimatePhaseVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobEstimatePhaseVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete Job Estimate Phase",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Transactions/Job": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Transactions By Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{activeStatus}/Transactions/Job/{startDate}/{endDate}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get Job Transactions for all jobs",
        "parameters": [
          {
            "name": "activeStatus",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/Job": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Job Trx",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdr"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdr"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdr"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdr"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job Trx",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdr"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdr"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdr"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdr"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/Job/Fee": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Job Transaction which represents an automated fee",
        "parameters": [
          {
            "name": "rev",
            "in": "query",
            "description": "",
            "schema": {
              "type": "number",
              "format": "double"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Job"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/Job/CreditCardFee": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create Job Transaction which represents an automated fee",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdrVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdrVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdrVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxHdrVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/Job/{trxId}": {
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete Job Transaction",
        "parameters": [
          {
            "name": "trxId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/Job/{jobTrxId}/Approve": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Approve Job Trx",
        "parameters": [
          {
            "name": "jobTrxId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/Job/{jobTrxId}/ApproveGPOnly": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Approve Job Trx",
        "parameters": [
          {
            "name": "jobTrxId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/Job/{jobTrxId}/Integrate/{intLogId}/{reIntegrate}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Integrate Job trx",
        "parameters": [
          {
            "name": "jobTrxId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "intLogId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "reIntegrate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/RelatedEmergencyServiceUnpaidInvoices": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "For Mold Remediation / Repair jobs: find unpaid Invoice AR trx on related open Emergency Service jobs\r\nlinked via the same project(s) (ProjectJobs) that also share a Job or Bill AddressV2 with the source job.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/Transactions/AR": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get AR Transactions By Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{activeStatus}/Transactions/AR/{startDate}/{endDate}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get AR Transactions for all jobs",
        "parameters": [
          {
            "name": "activeStatus",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/ARTrxApproval": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Ar Transaction Approval, Infinite Scroll",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/JobTrxApproval": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Job Transaction Approval, Infinite Scroll",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/AR": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create AR Trx",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update AR Trx",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/ArTrxApprovalUpdate": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update AR Trx Approval",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxApprovalVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxApprovalVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxApprovalVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxApprovalVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/AR/{arTrxId}/Approve": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Approve Ar Trx",
        "parameters": [
          {
            "name": "arTrxId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/JobTrxApprovalUpdate": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update Job Trx Approval",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxApprovalVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxApprovalVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxApprovalVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrxApprovalVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/AR/{arTrxId}/ApproveGPOnly": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Approve Job Trx in GP, skip is submitted check",
        "parameters": [
          {
            "name": "arTrxId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/AR/{arTrxId}": {
      "delete": {
        "tags": [
          "Job"
        ],
        "summary": "Delete AR Transaction",
        "parameters": [
          {
            "name": "arTrxId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/AR/{arTrxId}/Integrate/{intLogId}/{reIntegrate}": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Integrate Job trx",
        "parameters": [
          {
            "name": "arTrxId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "intLogId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "reIntegrate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/Transactions/AR/Void": {
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Void AR Invoice - Creates Reversing Credit Memo",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ArTrxHdr"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobElements": {
      "get": {
        "tags": [
          "JobElement"
        ],
        "summary": "Get all Job Elements",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "JobElement"
        ],
        "summary": "Create Job Element",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobElement"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobElement"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobElement"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobElement"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobElements/JobPhases": {
      "get": {
        "tags": [
          "JobElement"
        ],
        "summary": "Get Job Element Phases",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobElements/{id}": {
      "get": {
        "tags": [
          "JobElement"
        ],
        "summary": "Get Job Element by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "JobElement"
        ],
        "summary": "Update Job Element",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobElement"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobElement"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobElement"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobElement"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "JobElement"
        ],
        "summary": "Delete Job Element",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobElements/{jobElementId}/JobPhases/{jobPhaseId}": {
      "post": {
        "tags": [
          "JobElement"
        ],
        "summary": "Create Job Element Phase",
        "parameters": [
          {
            "name": "jobElementId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobPhaseId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobElements/{jobElementId}/JobPhases/{jobPhaseId}/EstProfitMargin/{estProfitMargin}": {
      "put": {
        "tags": [
          "JobElement"
        ],
        "summary": "Update Job Element Phase",
        "parameters": [
          {
            "name": "jobElementId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobPhaseId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "estProfitMargin",
            "in": "path",
            "required": true,
            "schema": {
              "type": "number",
              "format": "double"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobElements/JobPhases/{id}": {
      "delete": {
        "tags": [
          "JobElement"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobElements/IntegrateJobElements": {
      "post": {
        "tags": [
          "JobElement"
        ],
        "summary": "Super Admin - Integrate Job Elements",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobHistory/Options": {
      "get": {
        "tags": [
          "JobHistory"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobHistory/JobHistoryReport/{divisionId}/{jobTypeId}": {
      "get": {
        "tags": [
          "JobHistory"
        ],
        "parameters": [
          {
            "name": "divisionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobTypeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobHistory/JobList/{month}/{year}/{divisionId}/{jobTypeId}": {
      "get": {
        "tags": [
          "JobHistory"
        ],
        "parameters": [
          {
            "name": "month",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "year",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "divisionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobTypeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/jobInactivateReview/pending": {
      "get": {
        "tags": [
          "JobInactivateReview"
        ],
        "summary": "Jobs that are still active and open but have an inactivation reason set (pending review).",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/jobInactivateReview/{jobId}/approve": {
      "post": {
        "tags": [
          "JobInactivateReview"
        ],
        "summary": "Approve inactivation — runs the same ToggleActiveStatusJob inactivate path, then notes/KPIs.\r\nReason fields are kept on the inactive job for audit; they are cleared on reactivate.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/jobInactivateReview/{jobId}/deny": {
      "post": {
        "tags": [
          "JobInactivateReview"
        ],
        "summary": "Deny inactivation request — clears reason fields and writes note/KPI.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/GetJobNoticeListInf": {
      "post": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get Job Notices Job List In",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/NTO/JobId/{jobId}/Status/{status}": {
      "post": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Update NTO Status",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/ThirtyDayNotice/JobId/{jobId}/Status/{status}": {
      "post": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Update Thirty Day Notice Status",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/LienLetter/JobId/{jobId}/Status/{status}": {
      "post": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Update Lien Letter Status",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/JobDataForLetterModal/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get JobDataForLetterModal",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/30DayNoticeData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get 30 Day Notice Data",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/CertOfSatisfactionData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get Certificate of Satisfaction data",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/ClaimOfLienCoverLetterData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get ClaimOfLienCoverLetterData",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/ClaimOfLienLetterData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get ClaimOfLienLetterData",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/ConditionalWaiverData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get ConditionalWaiverData",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/ContractorData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get ContractorData",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/LegalDemandWithInterestData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get LegalDemandWithInterestData",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/LegalDemandWithoutInterestData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get LegalDemandWithoutInterestData",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/SatisfactionOfLienData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get Satisfaction Of Lien Data",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/NoticeToOwnerCoverLetterData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get Notice To Owner Cover Data",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/NoticeToOwnerData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get Notice To Owner Data",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/RefsualAndReleaseData/{jobId}": {
      "get": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Get Refusal and Release Data",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/{jobId}/UploadLetter": {
      "post": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Upload Letter",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobNotice/EmailLetter": {
      "post": {
        "tags": [
          "JobNotice"
        ],
        "summary": "Email Letter",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobPhases": {
      "get": {
        "tags": [
          "JobPhase"
        ],
        "summary": "Get all Job Phases",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "JobPhase"
        ],
        "summary": "Create Job Phase",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobPhases/{id}": {
      "get": {
        "tags": [
          "JobPhase"
        ],
        "summary": "Get Job Phase by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "JobPhase"
        ],
        "summary": "Update Job Phase",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobPhase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "JobPhase"
        ],
        "summary": "Delete Job Phase",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobPhases/Elements/{elementId}": {
      "get": {
        "tags": [
          "JobPhase"
        ],
        "summary": "Get Phases for an Element",
        "parameters": [
          {
            "name": "elementId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobPhases/IntegrateJobPhases": {
      "post": {
        "tags": [
          "JobPhase"
        ],
        "summary": "Super Admin - Integrate Job Phases",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobPhoto/BulkUpdateCategory": {
      "post": {
        "tags": [
          "JobPhoto"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateCategoryRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateCategoryRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateCategoryRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateCategoryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobPhoto/BulkUpdateNote": {
      "post": {
        "tags": [
          "JobPhoto"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateNoteRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateNoteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateNoteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateNoteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobPhoto/BulkDelete": {
      "post": {
        "tags": [
          "JobPhoto"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDeleteRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDeleteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDeleteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDeleteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/JobPhoto/BulkUpdateJobArea": {
      "post": {
        "tags": [
          "JobPhoto"
        ],
        "summary": "Bulk update the room (job area) for multiple photos",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateJobAreaRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateJobAreaRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateJobAreaRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateJobAreaRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/save": {
      "put": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Replaces the job's referral hierarchy with the provided nodes/edges payload.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveJobHierarchyRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveJobHierarchyRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveJobHierarchyRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveJobHierarchyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/main-referrer/{entityId}": {
      "put": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Updates the main referrer flag on existing referrals and cascades BusDev\r\nto the job, its associated project, and sibling jobs — without replacing\r\nthe full hierarchy.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/entities": {
      "get": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Gets the entities assigned to a specific job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferralAccountViewModel"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferralAccountViewModel"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReferralAccountViewModel"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals": {
      "get": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Gets the job referral hierarchy for a specific job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/JobReferralHierarchyViewModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobReferralHierarchyViewModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobReferralHierarchyViewModel"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/chart": {
      "get": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Gets the job referral chart data for visualization",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/JobReferralChartViewModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobReferralChartViewModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobReferralChartViewModel"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/assign": {
      "post": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Assigns an account to a job with referral information",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The account assignment request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AccountAssignmentRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountAssignmentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountAssignmentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AccountAssignmentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              },
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              },
              "text/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/calculate-revenue": {
      "post": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Calculates revenue credits for a job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/preview-import": {
      "post": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Previews the import of an entity and its hierarchy into a job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The import request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportPreviewViewModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportPreviewViewModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportPreviewViewModel"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/confirm-import": {
      "post": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Confirms the import of an entity and its hierarchy into a job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The import request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResultViewModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResultViewModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportResultViewModel"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/loyalty-rewards": {
      "get": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Gets all loyalty rewards records for a job's referring entities",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LoyaltyRewardViewModel"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LoyaltyRewardViewModel"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LoyaltyRewardViewModel"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Manually creates a new loyalty reward for a referring entity",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The loyalty reward creation request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyRewardRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyRewardRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyRewardRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateLoyaltyRewardRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRewardViewModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRewardViewModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRewardViewModel"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/loyalty-rewards/preview": {
      "get": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Previews loyalty reward that will be issued when closing a job (based on ActualRev delta)",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRewardsPreviewViewModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRewardsPreviewViewModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRewardsPreviewViewModel"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/loyalty-rewards/process": {
      "post": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Processes loyalty rewards for eligible invoices after user confirmation",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRewardsProcessResultViewModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRewardsProcessResultViewModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoyaltyRewardsProcessResultViewModel"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/loyalty-rewards/approve": {
      "post": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Approves all pending loyalty rewards for a job (called during job review)",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": { }
              },
              "application/json": {
                "schema": { }
              },
              "text/json": {
                "schema": { }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/loyalty-rewards/{rewardId}": {
      "delete": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Deletes a loyalty reward. If the reward was approved, deducts the amount from the referring entity's balance.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "rewardId",
            "in": "path",
            "description": "The loyalty reward ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": { }
              },
              "application/json": {
                "schema": { }
              },
              "text/json": {
                "schema": { }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Updates a loyalty reward. Handles balance adjustments when amount, status, or referring entity changes.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "rewardId",
            "in": "path",
            "description": "The loyalty reward ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The update data",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateJobLoyaltyRewardRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateJobLoyaltyRewardRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateJobLoyaltyRewardRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateJobLoyaltyRewardRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": { }
              },
              "application/json": {
                "schema": { }
              },
              "text/json": {
                "schema": { }
              }
            }
          }
        }
      }
    },
    "/api/v1/jobs/{jobId}/referrals/loyalty-rewards/preview/close": {
      "get": {
        "tags": [
          "JobReferral"
        ],
        "summary": "Previews loyalty rewards eligibility for a job before closing",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobStatuses": {
      "get": {
        "tags": [
          "JobStatus"
        ],
        "summary": "Get all Job Statuses",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "JobStatus"
        ],
        "summary": "Create Job Status",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobStatus"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobStatus"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobStatus"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobStatus"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobStatuses/List": {
      "get": {
        "tags": [
          "JobStatus"
        ],
        "summary": "Get JobStatus List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobStatuses/JobTypes/{jobTypeId}": {
      "get": {
        "tags": [
          "JobStatus"
        ],
        "summary": "Get All Job Statuses by Job Type",
        "parameters": [
          {
            "name": "jobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobStatuses/{id}": {
      "get": {
        "tags": [
          "JobStatus"
        ],
        "summary": "Get Job Status by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "JobStatus"
        ],
        "summary": "Update Job Status",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobStatus"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobStatus"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobStatus"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobStatus"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "JobStatus"
        ],
        "summary": "Delete Job Status",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get All Job Types",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "JobType"
        ],
        "summary": "Create Job Type",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/{jobTypeId}/Children": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get All Child Job Types",
        "parameters": [
          {
            "name": "jobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/{jobTypeId}/Details": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get All Job Types",
        "parameters": [
          {
            "name": "jobTypeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/List": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get JobType List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/JobElements/JobPhases": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get all Job Type Element Phases",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/{jobTypeId}/JobElements/JobPhases": {
      "get": {
        "tags": [
          "JobType"
        ],
        "parameters": [
          {
            "name": "jobTypeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/{jobTypeId}/SubJobTypes": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get Sub Types by Job Type Id",
        "parameters": [
          {
            "name": "jobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/JobTimeLineFields": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get all Job Type TimeLine Fields",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/{jobTypeId}/JobTypeTimeLineFields": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get all Job Type TimeLine Fields",
        "parameters": [
          {
            "name": "jobTypeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/{id}": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get Job Type By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "JobType"
        ],
        "summary": "Update Job Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "JobType"
        ],
        "summary": "Delete Job Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/{jobTypeId}/JobElements/JobPhases/{jobElementPhaseId}": {
      "post": {
        "tags": [
          "JobType"
        ],
        "summary": "Create Job Type Element Phase",
        "parameters": [
          {
            "name": "jobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobElementPhaseId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/{jobTypeId}/JobTimeLineFields/{jobTimeLineFieldId}": {
      "post": {
        "tags": [
          "JobType"
        ],
        "summary": "Create Job Type TiemLine Fields",
        "parameters": [
          {
            "name": "jobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobTimeLineFieldId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/JobTypeDependencies/ParentJobTypeId/{parentJobTypeId}": {
      "get": {
        "tags": [
          "JobType"
        ],
        "summary": "Get Job Type Dependencies",
        "parameters": [
          {
            "name": "parentJobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/JobTypeDependency/ParentJobTypeId/{parentJobTypeId}/ChildJobTypeId/{childJobTypeId}/DefaultChildSubJobTypeID/{defaultChildSubJobTypeId}": {
      "post": {
        "tags": [
          "JobType"
        ],
        "summary": "Create Job Type Dependency",
        "parameters": [
          {
            "name": "parentJobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "childJobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "defaultChildSubJobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/JobTypeDependency/ParentJobTypeId/{parentJobTypeId}/ChildJobTypeId/{childJobTypeId}": {
      "delete": {
        "tags": [
          "JobType"
        ],
        "summary": "Delete Job Type Dependency",
        "parameters": [
          {
            "name": "parentJobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "childJobTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/JobElements/JobPhases/{jobTypeElementPhaseId}": {
      "delete": {
        "tags": [
          "JobType"
        ],
        "summary": "Delete Job Type Element Phase",
        "parameters": [
          {
            "name": "jobTypeElementPhaseId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobTypes/JobTimeLineFields/{jobTypeTimeLineFieldId}": {
      "delete": {
        "tags": [
          "JobType"
        ],
        "summary": "Delete Job Type TimeLine Field",
        "parameters": [
          {
            "name": "jobTypeTimeLineFieldId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/loginhistory/List": {
      "get": {
        "tags": [
          "LoginHistory"
        ],
        "summary": "Get all login records with optional filtering",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/loginhistory/user/{username}": {
      "get": {
        "tags": [
          "LoginHistory"
        ],
        "summary": "Get login history for specific user",
        "parameters": [
          {
            "name": "username",
            "in": "path",
            "description": "Username to get history for",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/loginhistory/analytics": {
      "get": {
        "tags": [
          "LoginHistory"
        ],
        "summary": "Get login analytics summary for all users",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/loginhistory/suspicious": {
      "get": {
        "tags": [
          "LoginHistory"
        ],
        "summary": "Get suspicious multi-location logins",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/loginhistory/failed": {
      "get": {
        "tags": [
          "LoginHistory"
        ],
        "summary": "Get failed login attempts",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/loginhistory/newdevices": {
      "get": {
        "tags": [
          "LoginHistory"
        ],
        "summary": "Get new device logins",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/loginhistory/accountsharing": {
      "get": {
        "tags": [
          "LoginHistory"
        ],
        "summary": "Get potential account sharing indicators",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/loginhistory/anomalies": {
      "get": {
        "tags": [
          "LoginHistory"
        ],
        "summary": "Get login frequency anomalies",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/MagicPlanWebhook": {
      "get": {
        "tags": [
          "MagicPlanWebhook"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "MagicPlanWebhook"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/MagicPlanWebhook/update": {
      "post": {
        "tags": [
          "MagicPlanWebhook"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/MagicPlanWebhook/sync/{projectId}": {
      "post": {
        "tags": [
          "MagicPlanWebhook"
        ],
        "summary": "Manual / ops trigger to re-sync a MagicPlan project without waiting for export button.\r\nStill requires the MagicPlan API key (header or query).",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "listing",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Notes": {
      "get": {
        "tags": [
          "Note"
        ],
        "summary": "Get All Notes — disabled. Notes table is huge; use job/project scoped endpoints.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Note"
        ],
        "summary": "Create Note",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Notes/{id}": {
      "get": {
        "tags": [
          "Note"
        ],
        "summary": "Get Note by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Note"
        ],
        "summary": "Update Note",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Note"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Note"
        ],
        "summary": "Delete Note",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Notes/Job/{jobId}": {
      "get": {
        "tags": [
          "Note"
        ],
        "summary": "Get Notes by Job Id",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The Job ID to filter notes by",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Entities/Notifications": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get Notification Entities",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Entities/{entityType}/Notifications": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get Notification Types by Entity",
        "parameters": [
          {
            "name": "entityType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Type/{notificationTypeId}/Notifications": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get All Job Notifications by Type",
        "parameters": [
          {
            "name": "notificationTypeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/{userId}/Notifications": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get all Notification for a User",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/User/Notifications": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get all Notification for Current User",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Teams/{teamId}/Notifications": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get all Notifications for a Team",
        "parameters": [
          {
            "name": "teamId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Type/{notificationTypeId}/Notifications/Teams": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get All Notifications By Type for Teams",
        "parameters": [
          {
            "name": "notificationTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobType",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "subJobType",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "categoryId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Type/{notificationTypeId}/Notifications/CurrentUser": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get All Notifications By Type for current user",
        "parameters": [
          {
            "name": "notificationTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobType",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "subJobType",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "categoryId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/User/{userId}/Jobs": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get All User's Jobs",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Type/{notificationTypeId}/Notifications/Users": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get All Notifications By Type for Users",
        "parameters": [
          {
            "name": "notificationTypeId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobType",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "subJobType",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "categoryId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/UsersJobNotifications/{userId}": {
      "get": {
        "tags": [
          "Notification"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddRemoveUserJobNotification": {
      "post": {
        "tags": [
          "Notification"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddRemoveUsersJobNotificationVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddRemoveUsersJobNotificationVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddRemoveUsersJobNotificationVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddRemoveUsersJobNotificationVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/AddRemoveUserJobNotificationAll": {
      "post": {
        "tags": [
          "Notification"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AddRemoveUsersJobNotificationVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddRemoveUsersJobNotificationVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AddRemoveUsersJobNotificationVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AddRemoveUsersJobNotificationVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/JobNotificationsForUser/{jobId}/{userId}": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get Job Notification for user Id",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Notifications/{id}": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get Notification By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Notification"
        ],
        "summary": "Update Notification",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Notification"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Notification"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Notification"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Notification"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Notification"
        ],
        "summary": "Delete Notification",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Notifications": {
      "post": {
        "tags": [
          "Notification"
        ],
        "summary": "Creat Notification",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Notification"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Notification"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Notification"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Notification"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Notifications/Teams": {
      "post": {
        "tags": [
          "Notification"
        ],
        "summary": "Post Team Notifications - Create / Delete",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamNotificationVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamNotificationVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamNotificationVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamNotificationVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Notifications/Users": {
      "post": {
        "tags": [
          "Notification"
        ],
        "summary": "Post User Notifications - Create / Delete",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UserNotificationVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserNotificationVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserNotificationVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserNotificationVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ScheduledNotification/{id}": {
      "delete": {
        "tags": [
          "Notification"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Options": {
      "get": {
        "tags": [
          "Notification"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/InternalNotifications": {
      "get": {
        "tags": [
          "Notification"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/DismissAllInternalNotifications": {
      "post": {
        "tags": [
          "Notification"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/DismissInternalNotification/{notificationId}": {
      "put": {
        "tags": [
          "Notification"
        ],
        "parameters": [
          {
            "name": "notificationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/NotificationTrigger": {
      "put": {
        "tags": [
          "Notification"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationTrigger"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationTrigger"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationTrigger"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationTrigger"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CreateNotification": {
      "post": {
        "tags": [
          "Notification"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateNotificationVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateNotificationVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateNotificationVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateNotificationVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/GetNotificationHistory/FromDate/{fromDate}/ToDate/{toDate}": {
      "post": {
        "tags": [
          "Notification"
        ],
        "summary": "Get Notification History (infinite scroll)",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/SendManualNotifications": {
      "post": {
        "tags": [
          "Notification"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/PaymentAdminSettings": {
      "get": {
        "tags": [
          "Payment"
        ],
        "summary": "Get all payment settings and system settings for admin interface",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/PaymentSettingsAdmin": {
      "get": {
        "tags": [
          "Payment"
        ],
        "summary": "Get payment settings",
        "parameters": [
          {
            "name": "paymentMethod",
            "in": "query",
            "description": "Optional: filter by payment method",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Payment"
        ],
        "summary": "Create or update payment settings",
        "requestBody": {
          "description": "Array of payment settings",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSettingsVm"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSettingsVm"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSettingsVm"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSettingsVm"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/PaymentSystemSettings": {
      "post": {
        "tags": [
          "Payment"
        ],
        "summary": "Update payment system settings",
        "requestBody": {
          "description": "Array of system settings",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSystemSettingsVm"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSystemSettingsVm"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSystemSettingsVm"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSystemSettingsVm"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "get": {
        "tags": [
          "PaymentSystemSettings"
        ],
        "summary": "Get all payment system settings",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/PaymentSettings": {
      "get": {
        "tags": [
          "PaymentSettings"
        ],
        "summary": "Get all payment settings",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "Include inactive payment methods",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "PaymentSettings"
        ],
        "summary": "Create new payment settings",
        "requestBody": {
          "description": "Payment settings model",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSettingsVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSettingsVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSettingsVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSettingsVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/PaymentSettings/{paymentMethod}": {
      "get": {
        "tags": [
          "PaymentSettings"
        ],
        "summary": "Get payment settings by payment method",
        "parameters": [
          {
            "name": "paymentMethod",
            "in": "path",
            "description": "Payment method (e.g., CreditCard, DebitCard, ACH)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/PaymentSettings/{id}": {
      "put": {
        "tags": [
          "PaymentSettings"
        ],
        "summary": "Update existing payment settings",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Payment settings ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Updated payment settings model",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSettingsVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSettingsVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSettingsVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSettingsVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "PaymentSettings"
        ],
        "summary": "Delete payment settings (soft delete by setting IsActive = false)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Payment settings ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/PaymentSettings/{paymentMethod}/calculate-fees/{amount}": {
      "get": {
        "tags": [
          "PaymentSettings"
        ],
        "summary": "Calculate fees for a payment amount",
        "parameters": [
          {
            "name": "paymentMethod",
            "in": "path",
            "description": "Payment method",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "amount",
            "in": "path",
            "description": "Payment amount",
            "required": true,
            "schema": {
              "type": "number",
              "format": "double"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/PaymentSystemSettings/{settingName}": {
      "get": {
        "tags": [
          "PaymentSystemSettings"
        ],
        "summary": "Get a specific payment system setting by name",
        "parameters": [
          {
            "name": "settingName",
            "in": "path",
            "description": "Setting name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "PaymentSystemSettings"
        ],
        "summary": "Update payment system setting",
        "parameters": [
          {
            "name": "settingName",
            "in": "path",
            "description": "Setting name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Updated setting model",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSystemSettingsVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSystemSettingsVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSystemSettingsVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentSystemSettingsVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/PaymentSystemSettings/bulk": {
      "put": {
        "tags": [
          "PaymentSystemSettings"
        ],
        "summary": "Bulk update multiple system settings",
        "requestBody": {
          "description": "List of settings to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSystemSettingsVm"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSystemSettingsVm"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSystemSettingsVm"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PaymentSystemSettingsVm"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/Options/{includeInactive}": {
      "get": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get All Projects",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Create Project",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Project"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Project"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Project"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Project"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/ProjectsByJobId/{jobId}": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Project Ids By Job Id",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/ProjectsListInfinite": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Get Projects List Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/favorites": {
      "get": {
        "tags": [
          "Project"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/favorites/{projectId}": {
      "post": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{id}": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Project by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Project"
        ],
        "summary": "Update Project",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Project"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Project"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Project"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Project"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Project"
        ],
        "summary": "Delete Project",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/ProjectJobs/{projectId}": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Project Jobs by Project Id",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/{jobId}": {
      "delete": {
        "tags": [
          "Project"
        ],
        "summary": "Remove job from project",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Add job to project",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/Estimates": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Estimate Rollup for Project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/Estimates/Elements": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Job Elements By Project Id",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/Transactions/AA/Summary": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get AA Summary by Project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/Transactions/AA/Detail/Level/{level}/Element/{element}/Phase/{phase}": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get AA Detail By Project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "level",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "element",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/Search": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Search Projects",
        "parameters": [
          {
            "name": "searchTerm",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/UpdateProjectEstimateActualsActiveByProjId/{projId}": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "UpdateProjectEstimateActualsActiveByProjId",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/UpdateProjectEstimateActualsActiveByJobId/{jobId}": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "UpdateProjectEstimateActualsActiveByJobId",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skipReferrerAggregates",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/ProjectAccounts/{projId}": {
      "get": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/ProjectAccountVm/{accountId}": {
      "get": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/AssignAccount/{accountId}": {
      "post": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/RemoveAccount/{accountId}": {
      "delete": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/ProjectContacts/{projId}": {
      "get": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/ProjectContactVm/{contactId}": {
      "get": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/GetCompanionJobs/{jobTypeId}/{jobAccountId}": {
      "get": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobTypeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "jobAccountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/ProjectContactVm": {
      "put": {
        "tags": [
          "Project"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactWrapper"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactWrapper"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactWrapper"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ContactWrapper"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/AssignContact/{contactId}": {
      "post": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/RemoveContact/{contactId}": {
      "delete": {
        "tags": [
          "Project"
        ],
        "summary": "Remove Contact from project. Optionally cascade remove to all jobs on the project.",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "removeFromJobs",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/Transactions/AR": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get AR Transactions By Project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/Transactions/Job": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Job Transactions By Project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/Photos": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Job Images\r\n<param name=\"projId\"></param>",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/Upload/Images": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Upload Job Image",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/Photo/{blobContainer}/{projId}/{photoUrl}": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Download Image",
        "parameters": [
          {
            "name": "blobContainer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "photoUrl",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/DownloadPhotosAsZip": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Download Photos as zip",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/Emails": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Project Emails",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/EmailJobPhotos": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Email Project Photos",
        "parameters": [
          {
            "name": "allPhotos",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/DownloadPhotoSheetPDF": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "DownloadPhotoSheetPDF with optional aggressive compression",
        "parameters": [
          {
            "name": "compress",
            "in": "query",
            "description": "Whether to apply aggressive compression (default: false)",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/EmailPhotoSheetPDF": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "EmailPhotoSheetPDF with optional aggressive compression",
        "parameters": [
          {
            "name": "compress",
            "in": "query",
            "description": "Whether to apply aggressive compression (default: false)",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/LinkedSpecialInstructions": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Project Notes",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/Notes": {
      "get": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/Documents": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Project Documents",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/Upload/Docs": {
      "post": {
        "tags": [
          "Project"
        ],
        "summary": "Upload Project Doc",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/FileUploadVm"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projId}/Diagrams": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get Project Diagrams",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/KPIs/{projId}": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get All KPIs",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/EstimateActualSummary": {
      "get": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/eligible-loyalty-referrers": {
      "get": {
        "tags": [
          "Project"
        ],
        "summary": "Get eligible loyalty referrers for a project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{projectId}/TransactionDetails/{type}": {
      "get": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "type",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{id}/UseSecondaryWorkAuth/{useSecondaryWorkAuth}": {
      "put": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "useSecondaryWorkAuth",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Projects/{id}/ForceUseSecondaryAuth/{forceUseSecondaryAuth}": {
      "put": {
        "tags": [
          "Project"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "forceUseSecondaryAuth",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/referrals/save": {
      "put": {
        "tags": [
          "ProjectReferral"
        ],
        "summary": "Saves the referral hierarchy for a project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "version",
            "in": "query",
            "description": "Current version for optimistic concurrency",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "overwrite",
            "in": "query",
            "description": "Force save even if version mismatch",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "requestBody": {
          "description": "The referral hierarchy data",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferralHierarchyData"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferralHierarchyData"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferralHierarchyData"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferralHierarchyData"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/referrals/main-referrer/{entityId}": {
      "put": {
        "tags": [
          "ProjectReferral"
        ],
        "summary": "Updates the main referrer flag on existing referrals and cascades BusDev\r\nto the project and all of its jobs — without replacing the full hierarchy.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/referrals": {
      "get": {
        "tags": [
          "ProjectReferral"
        ],
        "summary": "Gets the referral hierarchy for a project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ProjectReferral"
        ],
        "summary": "Clears all referral relationships for a project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReasonCodes": {
      "get": {
        "tags": [
          "ReasonCode"
        ],
        "summary": "Get All ReasonCodes (excludes Estimator and InactiveJob categories)",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "ReasonCode"
        ],
        "summary": "Create ReasonCode",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReasonCode"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReasonCode"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReasonCode"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReasonCode"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReasonCodes/Estimator": {
      "get": {
        "tags": [
          "ReasonCode"
        ],
        "summary": "Get ReasonCodes where Category = Estimator",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReasonCodes/InactiveJob": {
      "get": {
        "tags": [
          "ReasonCode"
        ],
        "summary": "Get ReasonCodes where Category = InactiveJob",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReasonCodes/All": {
      "get": {
        "tags": [
          "ReasonCode"
        ],
        "summary": "Get All ReasonCodes (no category filtering)",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReasonCodes/{id}": {
      "get": {
        "tags": [
          "ReasonCode"
        ],
        "summary": "Get ReasonCode By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "ReasonCode"
        ],
        "summary": "Update ReasonCode",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReasonCode"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReasonCode"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReasonCode"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReasonCode"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ReasonCode"
        ],
        "summary": "Delete Reason Code",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reconcile/UpdateJobActualsAndFullyPaid/{jobId}": {
      "post": {
        "tags": [
          "Reconcile"
        ],
        "summary": "Update Actuals And Fully Paid on Jobs",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reconcile/UpdateJobEstimatedCostAndRev/{jobId}": {
      "post": {
        "tags": [
          "Reconcile"
        ],
        "summary": "Update EstimatedCost And EstimatedRev on Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reconcile/UpdateProjectEstimateActualsActiveByProjId/{projId}": {
      "post": {
        "tags": [
          "Reconcile"
        ],
        "summary": "UpdateProjectEstimateActualsActiveByProjId",
        "parameters": [
          {
            "name": "projId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reconcile/UpdateProjectEstimateActualsActiveByJobId/{jobId}": {
      "post": {
        "tags": [
          "Reconcile"
        ],
        "summary": "UpdateProjectEstimateActualsActiveByJobId",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reconcile/IntegrateAccount/{accountId}": {
      "post": {
        "tags": [
          "Reconcile"
        ],
        "summary": "Integrate Accounts to GP",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reconcile/IntegrateBusDevRep/{userId}": {
      "post": {
        "tags": [
          "Reconcile"
        ],
        "summary": "Super Admin - Integrate Bus Dev Reps",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reconcile/IntegrateContact/{contactId}": {
      "post": {
        "tags": [
          "Reconcile"
        ],
        "summary": "Integrate Contact",
        "parameters": [
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reconcile/integrateJobAndJobElements/{jobId}": {
      "post": {
        "tags": [
          "Reconcile"
        ],
        "summary": "Integrate Job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/RefContactClasses": {
      "get": {
        "tags": [
          "RefContactClass"
        ],
        "summary": "Get All Ref Contact Classes",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "RefContactClass"
        ],
        "summary": "Create Referring Contact Class",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RefContactClass"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefContactClass"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RefContactClass"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RefContactClass"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/RefContactClasses/{id}": {
      "get": {
        "tags": [
          "RefContactClass"
        ],
        "summary": "Get Ref Contact Class By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "RefContactClass"
        ],
        "summary": "Update Ref Contact Class",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RefContactClass"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefContactClass"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RefContactClass"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RefContactClass"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "RefContactClass"
        ],
        "summary": "Delete RefContactClass",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/RefEntityAdminAssignment/Missing": {
      "get": {
        "tags": [
          "RefEntityAdminAssignment"
        ],
        "summary": "Referring entities missing Channel and/or Category, based on missingFilter.\r\nSubChannel is optional and does not count as missing.\r\nmissingFilter: channel | category | either (default either)\r\nhasReferredOnly: when true (default), only entities that appear on a job referral.\r\nReturns every matching row.",
        "parameters": [
          {
            "name": "missingFilter",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "either"
            }
          },
          {
            "name": "referringEntityTypeId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "FullName"
            }
          },
          {
            "name": "orderDirection",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "asc"
            }
          },
          {
            "name": "hasReferredOnly",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/RefEntityAdminAssignment/Assign": {
      "post": {
        "tags": [
          "RefEntityAdminAssignment"
        ],
        "summary": "Bulk-assign Channel/SubChannel and/or Category to selected referring entities.\r\nApplyMode: channel | category | both",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRefEntityAdminAssignmentRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRefEntityAdminAssignmentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRefEntityAdminAssignmentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRefEntityAdminAssignmentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/recalculate-aggregates-all": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Recalculates aggregate fields for all referring entities",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{referringEntityId}/loyalty-rewards": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Gets all loyalty rewards for a specific referring entity",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{referringEntityId}/loyalty-rewards/{rewardId}": {
      "put": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Updates a loyalty reward for a referring entity",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "rewardId",
            "in": "path",
            "description": "The loyalty reward ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The update data",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferrerLoyaltyRewardRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferrerLoyaltyRewardRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferrerLoyaltyRewardRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateReferrerLoyaltyRewardRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Deletes a loyalty reward for a referring entity",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "rewardId",
            "in": "path",
            "description": "The loyalty reward ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{referringEntityId}/credit-memo-history": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Gets credit memo (loyalty rewards) usage history for a specific referring entity\r\nIncludes saved/unapproved and approved records.",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{referringEntityId}/restore-loyalty-balance": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Restores loyalty rewards balance when a credit memo is deleted",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The request containing the amount to restore",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RestoreLoyaltyBalanceRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RestoreLoyaltyBalanceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RestoreLoyaltyBalanceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RestoreLoyaltyBalanceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{referringEntityId}/deduct-loyalty-balance": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Deducts from loyalty rewards balance when a credit memo is created/approved",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The request containing the amount to deduct",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DeductLoyaltyBalanceRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeductLoyaltyBalanceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DeductLoyaltyBalanceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DeductLoyaltyBalanceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/search-entities": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Searches for referring entities with optional filtering",
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "description": "Search term",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "enrolledInLoyaltyRewards",
            "in": "query",
            "description": "Filter by loyalty rewards enrollment",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/entity-tracking": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get entity tracking history for a referring entity",
        "parameters": [
          {
            "name": "entity",
            "in": "query",
            "description": "The entity type (e.g., \"ReferringEntity\")",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "description": "The entity ID",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Number of records to skip for pagination",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "description": "Number of records to take for pagination",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Gets a paginated list of referring entities with optional search",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-based)",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Number of items per page",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 25
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Optional search term to filter by name or GP identifier",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Creates a new referring entity with related collections (types, hobbies, addresses)",
        "requestBody": {
          "description": "JSON object containing entity data and related collections",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/scan-business-card": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Analyze a business card image and return prefilled referring entity fields.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessCardScanRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessCardScanRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessCardScanRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessCardScanRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{referringEntityId}/AddressesV2/{addressV2Id}": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Add or reactivate AddressV2 link for Referring Entity (legacy route)",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Remove AddressV2 link for Referring Entity",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{id}": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Gets a single referring entity by ID with all related data",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Updates an existing referring entity and related collections (types, hobbies, addresses)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The referring entity ID to update",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "JSON object containing updated entity data and collections",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Deletes a referring entity by ID",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The referring entity ID to delete",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/PendingReviews": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "startIndex",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "numOfRecs",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "searchTerm",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "requestType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{id}/PendingReview": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/PendingReviews/{requestId}/Approve": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/PendingReviews/{requestId}/Deny": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/PendingReviews/{requestId}/RequestInfo": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/PendingReviews/{requestId}/RequestApproval": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "requestId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{id}/GpSync": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/update-orphaned-status": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Updates the IsOrphaned status for multiple entities based on their current relationships",
        "requestBody": {
          "description": "JSON object containing array of entity IDs to check",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{id}/DeleteCheck": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{id}/ReassignForDelete": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReassignReferrerAddressesRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReassignReferrerAddressesRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReassignReferrerAddressesRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReassignReferrerAddressesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{id}/ReassignAddresses": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReassignReferrerAddressesRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReassignReferrerAddressesRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReassignReferrerAddressesRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReassignReferrerAddressesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/{id}/UnlinkAddresses": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UnlinkReferrerAddressesRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnlinkReferrerAddressesRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UnlinkReferrerAddressesRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UnlinkReferrerAddressesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/track-hierarchy-update": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Logs an entity tracking entry for each referring entity touched during a hierarchy save",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TrackHierarchyUpdateRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrackHierarchyUpdateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TrackHierarchyUpdateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TrackHierarchyUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/FilterOptions": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Gets available filter options for the referrers list (Sales-role bus dev users, entity types, customer classes)",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/Search": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Search for ReferringEntities by search term",
        "parameters": [
          {
            "name": "searchTerm",
            "in": "query",
            "description": "The term to search for",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "Whether to include inactive entities",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "enrolledInLoyaltyRewards",
            "in": "query",
            "description": "Whether to filter to only entities enrolled in loyalty rewards program",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/CheckDuplicates": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Checks for potential duplicate referring entities based on name similarity.\r\nUsed when creating new entities to warn users of existing similar names.",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "description": "The entity name to check for duplicates",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/ReferrersListInfinite": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Gets a paginated list of referrers with infinite scroll support and advanced filtering.",
        "requestBody": {
          "description": "JSON object containing startIndex, numOfRecs, and searchParams.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/hierarchy/{entityId}": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get hierarchy graph for a referring entity",
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/ApExpensesWidget/{referringEntityId}/From/{fromDate}/To/{toDate}": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get AP expenses widget data for a referring entity using the GP identifier.\r\nQueries all GP identifiers including historical ones from merged entities.",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fromDate",
            "in": "path",
            "description": "Start date",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "description": "End date",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/ProjectsWidget/{referringEntityId}/From/{fromDate}/To/{toDate}": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get projects widget data for a referring entity",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "fromDate",
            "in": "path",
            "description": "Range start. Jobs on a project are included when the project create date falls in range; jobs with no project use the job create date.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "description": "Range end, inclusive",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/hierarchy/{entityId}/relationships": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get existing relationships for an entity to merge into current hierarchy",
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "currentEntityIds",
            "in": "query",
            "description": "Comma-separated list of entity IDs already in the current hierarchy",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/favorites/{entityId}": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Adds a referring entity to the current user's favorites",
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "description": "The referring entity ID to add to favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Removes a referring entity from the current user's favorites",
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "description": "The referring entity ID to remove from favorites",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/favorites": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Gets the current user's favorite referring entities",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/recents/{entityId}": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Updates the current user's recently accessed referring entities\r\nMaintains maximum of 20 recent entries, removing oldest when limit is reached",
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "description": "The referring entity ID that was accessed",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/recents": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Gets the current user's recently accessed referring entities\r\nReturns up to 20 most recent entries sorted by access date descending",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/BusDevRepChanges/{dateStart}/{dateEnd}": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get Business Dev Rep Changes",
        "parameters": [
          {
            "name": "dateStart",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "dateEnd",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/BusDevRepChangesInfinite": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get BusDevRep changes Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/GpSyncJobs": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/GpSyncJobs/{jobId}/Resume": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/GpSyncJobs/{jobId}/Pause": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/GpSyncJobs/{jobId}/Stop": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/GpSyncJobs/Latest": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 250
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/IntegrateReferringEntities/{referringEntityId}": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Integrate referring entities with GP AA dimension codes so they can be used in downstream reporting.\r\nAccepts either a specific referring entity id or 0 to integrate all entities.",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "Specific referring entity id or 0 for all",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "ignorePreviouslySynced",
            "in": "query",
            "description": "If true, re-sync entities that were previously synced. Default is false.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/BusDevRepChangesByReferringEntity/{referringEntityId}": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get Business Dev Rep Changes By Referring Entity",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/ReferringEntitiesReport": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get Referring Entities Report with infinite scroll",
        "requestBody": {
          "description": "Search and pagination parameters",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/ReferringEntitiesReportExcel": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get Referring Entities Report Excel Export",
        "requestBody": {
          "description": "Search and pagination parameters",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/ReferringEntityReferralActivityReport": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get Referring Entity Referral Activity Report",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/ReferringEntityReferralActivityReportExcel": {
      "get": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Get Referring Entity Referral Activity Report Excel Export",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "query",
            "description": "Filter by referring entity ID",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "fullName",
            "in": "query",
            "description": "Filter by full name",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "jobNumber",
            "in": "query",
            "description": "Filter by job number",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "projectNumber",
            "in": "query",
            "description": "Filter by project number",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "activityType",
            "in": "query",
            "description": "Filter by activity type",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "Filter by activity date from",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "Filter by activity date to",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "busDevRep",
            "in": "query",
            "description": "Filter by bus dev rep",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "hideNoActivity",
            "in": "query",
            "description": "Hide entities with no activity",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sort column",
            "schema": {
              "type": "string",
              "default": "ActivityDate"
            }
          },
          {
            "name": "orderDirection",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "type": "string",
              "default": "desc"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/recalculate-aggregates/{referringEntityId}": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Recalculates aggregate fields for a single referring entity",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "The referring entity ID to recalculate aggregates for",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Referrers/recalculate-aggregates-batch": {
      "post": {
        "tags": [
          "ReferrersApi"
        ],
        "summary": "Recalculates aggregate fields for multiple referring entities",
        "requestBody": {
          "description": "JSON object containing array of entity IDs",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/referring-entities/{entityId}/hierarchy-check": {
      "get": {
        "tags": [
          "ReferringEntitiesHierarchy"
        ],
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/referring-entities/{entityId}/ancestors": {
      "get": {
        "tags": [
          "ReferringEntitiesHierarchy"
        ],
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/referring-entities/{entityId}/complete-hierarchy": {
      "get": {
        "tags": [
          "ReferringEntitiesHierarchy"
        ],
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReferringEntityClasses": {
      "get": {
        "tags": [
          "ReferringEntityClass"
        ],
        "summary": "Get All Referring Entity Classes",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "ReferringEntityClass"
        ],
        "summary": "Create Referring Entity Class",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityClass"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityClass"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityClass"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityClass"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReferringEntityClasses/{id}": {
      "get": {
        "tags": [
          "ReferringEntityClass"
        ],
        "summary": "Get Referring Entity Class By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "ReferringEntityClass"
        ],
        "summary": "Update Referring Entity Class",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityClass"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityClass"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityClass"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityClass"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ReferringEntityClass"
        ],
        "summary": "Delete Referring Entity Class",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/referringentityrelationships/{referringEntityId}/AddressesV2/{addressV2Id}": {
      "post": {
        "tags": [
          "ReferringEntityRelationships"
        ],
        "summary": "Add or reactivate AddressV2 link for Referring Entity",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ReferringEntityRelationships"
        ],
        "summary": "Remove AddressV2 from ReferringEntity (soft delete the link table record)",
        "parameters": [
          {
            "name": "referringEntityId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "addressV2Id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/referringentityrelationships/entity/{entityId}": {
      "get": {
        "tags": [
          "ReferringEntityRelationships"
        ],
        "summary": "Get all relationships for a specific entity (as parent or child)",
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "description": "Include inactive relationships",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/referringentityrelationships/hierarchy/{entityId}": {
      "get": {
        "tags": [
          "ReferringEntityRelationships"
        ],
        "summary": "Get complete hierarchy graph for an entity (all connected relationships)",
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "description": "The referring entity ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/referringentityrelationships": {
      "post": {
        "tags": [
          "ReferringEntityRelationships"
        ],
        "summary": "Create a new relationship between two entities",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRelationshipRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRelationshipRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRelationshipRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateRelationshipRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/referringentityrelationships/{relationshipId}": {
      "delete": {
        "tags": [
          "ReferringEntityRelationships"
        ],
        "summary": "Delete a relationship",
        "parameters": [
          {
            "name": "relationshipId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "ReferringEntityRelationships"
        ],
        "summary": "Update relationship properties",
        "parameters": [
          {
            "name": "relationshipId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRelationshipRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRelationshipRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRelationshipRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateRelationshipRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/referringentityrelationships/types": {
      "get": {
        "tags": [
          "ReferringEntityRelationships"
        ],
        "summary": "Get all relationship types",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReferringEntityTypes": {
      "get": {
        "tags": [
          "ReferringEntityTypes"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "ReferringEntityTypes"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/ReferringEntityTypes/{id}": {
      "get": {
        "tags": [
          "ReferringEntityTypes"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "ReferringEntityTypes"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReferringEntityType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "ReferringEntityTypes"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/ReconcileServiceFee": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Get Service fee Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/ReconcileServiceFeeExclude/{jobId}": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Add to ReconcileServiceFeeExclude",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Reporting"
        ],
        "summary": "Remove from ReconcileServiceFeeExclude",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/NotesReportOptions": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "summary": "Notes report Options",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/NotesReport": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Get Notes Report Infinite Scroll",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/JobsTransactionsRpt": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Jobs Transactions Report, Infinite Scroll",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/BusDevRepExpensesRpt": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Jobs Sales Management > BusDevRepExpenses Report, Infinite Scroll",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/AgingTeamRpt": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Open / Received Aging Team Report, Infinite Scroll",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/Backcharge": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Backcharge report, Infinite Scroll",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/UpdateTrxReconciled/{status}": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Update Trx Reconciled Status",
        "parameters": [
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReconciledTrxV2"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReconciledTrxV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReconciledTrxV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReconciledTrxV2"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/ReferringContactReferrals": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "summary": "Referring Contact Referrals Report, Infinite Scroll",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/GetRefAccountsReport/{fromDate}/{toDate}": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Get Ref Accounts Report infinite",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/ReconcileReport/{date}": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/ReconcileTime/{id}/{status}": {
      "put": {
        "tags": [
          "Reporting"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "status",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/CashReceipts/{startDate}/{endDate}": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "summary": "Birds Eye Report",
        "parameters": [
          {
            "name": "startDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/ESPerformance/{date}": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "summary": "ES Performance Report",
        "parameters": [
          {
            "name": "date",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/ActiveESjobs": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "summary": "Get Active ES Jobs",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/RevExpensePay/signed/{signed}": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "summary": "Revenue Expense Pay",
        "parameters": [
          {
            "name": "active",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "signed",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/AgedReceivables": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "summary": "Aged Receivables Report",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/Invoices/{fromDate}/{toDate}": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "summary": "Get Invoices",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/GetTimeEntryReport/{fromDate}/{toDate}": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Get Ref Accounts Report infinite",
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "toDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/JobCostReportOptions": {
      "get": {
        "tags": [
          "Reporting"
        ],
        "summary": "Job Cost report options",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/GetJobCostReport": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Job Cost Report",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/JobsTransactionsRptV2": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Jobs Transactions Report V2, Infinite Scroll",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/BackchargeV2": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Reporting/ReconcileAllTransactions": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/reviewDryLog/unreviewed": {
      "get": {
        "tags": [
          "ReviewDryLog"
        ],
        "summary": "Get all unreviewed dry log requests",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/reviewDryLog/resend/{id}": {
      "post": {
        "tags": [
          "ReviewDryLog"
        ],
        "summary": "Resend email for a dry log request",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/reviewDryLog/complete/{id}": {
      "post": {
        "tags": [
          "ReviewDryLog"
        ],
        "summary": "Mark a dry log request as complete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "Get All Roles",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Role"
        ],
        "summary": "Create Role",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationRole"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationRole"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationRole"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationRole"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles/{id}": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "Get Role By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Role"
        ],
        "summary": "Update Role",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationRole"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationRole"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationRole"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationRole"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Role"
        ],
        "summary": "Delete Role",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles/AssignAdminClaimsToRole/{roleId}": {
      "post": {
        "tags": [
          "Role"
        ],
        "summary": "Assign Admin Claims To Role",
        "parameters": [
          {
            "name": "roleId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles/RoleSeeder": {
      "post": {
        "tags": [
          "Role"
        ],
        "summary": "Assign Admin Claims To Role",
        "parameters": [
          {
            "name": "roleId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles/ClaimsForRoleId/{roleId}": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "ClaimsForRoleId",
        "parameters": [
          {
            "name": "roleId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles/ClaimType/{claimType}/ClaimValue/{claimValue}/Role/{roleId}": {
      "post": {
        "tags": [
          "Role"
        ],
        "summary": "Assign Claim To Role",
        "parameters": [
          {
            "name": "claimType",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "claimValue",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "roleId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Role"
        ],
        "summary": "Remove Claims Fo Role",
        "parameters": [
          {
            "name": "claimType",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "claimValue",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "roleId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles/ClaimsForAdmin": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "Get Claims for Admin (all available claims)",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles/AuthTypeCurrentUser": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "Get Auth Type Current User",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles/RoleClaimsCurrentUser": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "Get Claims for Admin (all available claims)",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Roles/UserInfo": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "Get Claims for Admin (all available claims)",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/StripeWebhook": {
      "post": {
        "tags": [
          "StripeWebhook"
        ],
        "summary": "Stripe webhook endpoint for payment events",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/StripeWebhook/health": {
      "get": {
        "tags": [
          "StripeWebhook"
        ],
        "summary": "Health check endpoint for webhook configuration",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/SubChannels": {
      "get": {
        "tags": [
          "SubChannel"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "SubChannel"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SubChannel"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubChannel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SubChannel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SubChannel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/SubChannels/{id}": {
      "get": {
        "tags": [
          "SubChannel"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "SubChannel"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SubChannel"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubChannel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SubChannel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SubChannel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "SubChannel"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/SubJobTypes": {
      "get": {
        "tags": [
          "SubJobType"
        ],
        "summary": "Get all Sub Job Types",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "SubJobType"
        ],
        "summary": "Create Sub Job Type",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SubJobType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubJobType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SubJobType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SubJobType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/SubJobTypes/List": {
      "get": {
        "tags": [
          "SubJobType"
        ],
        "summary": "Get JobSubType List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/SubJobTypes/{id}": {
      "get": {
        "tags": [
          "SubJobType"
        ],
        "summary": "Get Sub Job Type by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "SubJobType"
        ],
        "summary": "Update Sub Job Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SubJobType"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubJobType"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SubJobType"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SubJobType"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "SubJobType"
        ],
        "summary": "Delete Sub Job Type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/SupplyUsage/Days": {
      "get": {
        "tags": [
          "SupplyUsage"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "SupplyUsage"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSupplyUsageDayRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSupplyUsageDayRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSupplyUsageDayRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSupplyUsageDayRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/SupplyUsage/Days/{dayId}": {
      "get": {
        "tags": [
          "SupplyUsage"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "SupplyUsage"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveSupplyUsageDayRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveSupplyUsageDayRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SaveSupplyUsageDayRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SaveSupplyUsageDayRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "SupplyUsage"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Jobs/{jobId}/SupplyUsage/Days/{dayId}/Sign": {
      "put": {
        "tags": [
          "SupplyUsage"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SignSupplyUsageDayRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignSupplyUsageDayRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SignSupplyUsageDayRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SignSupplyUsageDayRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "SupplyUsage"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "dayId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Teams": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Get All Teams",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Team"
        ],
        "summary": "Create Team",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Team"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Team"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Team"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Team"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/CurrentUsersTeams": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Get All Teams",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Teams/List": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Get Team List",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/TeamUsers": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Get All Team Users",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "Team"
        ],
        "summary": "Create Team User",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUser"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUser"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUser"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUser"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Teams/{id}": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Get Team By Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Team"
        ],
        "summary": "Update Team",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Team"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Team"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Team"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Team"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Team"
        ],
        "summary": "Delete Team",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/TeamUsers/{id}": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Get Team User by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Team"
        ],
        "summary": "Update Team User",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUser"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUser"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUser"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamUser"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Team"
        ],
        "summary": "Delete Team User",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/IntLogRetryIntegrateTeamToGpAsSalesUser": {
      "post": {
        "tags": [
          "Team"
        ],
        "summary": "IntLogRetryIntegrateTeamToGpAsSalesUser",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/IntegrationLog"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/TeamPositions": {
      "get": {
        "tags": [
          "TeamPosition"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "TeamPosition"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamPosition"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamPosition"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamPosition"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamPosition"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/TeamPositions/{id}": {
      "get": {
        "tags": [
          "TeamPosition"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "TeamPosition"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamPosition"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamPosition"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TeamPosition"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TeamPosition"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "TeamPosition"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerSignIns": {
      "get": {
        "tags": [
          "TempWorkerSignIns"
        ],
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "post": {
        "tags": [
          "TempWorkerSignIns"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TempWorkerSignIn"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TempWorkerSignIn"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TempWorkerSignIn"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TempWorkerSignIn"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerSignIns/{id}": {
      "delete": {
        "tags": [
          "TempWorkerSignIns"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerSignIns/{id}/times": {
      "put": {
        "tags": [
          "TempWorkerSignIns"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTempWorkerSignInTimesRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTempWorkerSignInTimesRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTempWorkerSignInTimesRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTempWorkerSignInTimesRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerSignIns/{id}/signout": {
      "put": {
        "tags": [
          "TempWorkerSignIns"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SignOutRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignOutRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SignOutRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SignOutRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerSignIns/BulkSignOut": {
      "post": {
        "tags": [
          "TempWorkerSignIns"
        ],
        "summary": "Bulk sign-out: signs out one or more workers (by sign-in ID) and closes any open time entries\r\nfor those workers on the same date.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkSignOutRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkSignOutRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkSignOutRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/BulkSignOutRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerSignIns/range": {
      "get": {
        "tags": [
          "TempWorkerSignIns"
        ],
        "summary": "Returns distinct temp workers who have at least one sign-in between startDate and endDate (inclusive).\r\nIncludes the agency pay rate for the worker's skill level so the time entry modal can snapshot rates.",
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries": {
      "get": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/OpenEntries": {
      "get": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "summary": "Returns open time entries (no TimeOutTime) for the given worker IDs on the given date.\r\nUsed by the frontend to warn/prompt before creating a new entry.",
        "parameters": [
          {
            "name": "workerIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "date",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/CreateEntries": {
      "post": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTempWorkerTimeEntriesVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTempWorkerTimeEntriesVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTempWorkerTimeEntriesVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTempWorkerTimeEntriesVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/{id}": {
      "put": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TempWorkerTimeEntry"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TempWorkerTimeEntry"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TempWorkerTimeEntry"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TempWorkerTimeEntry"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/ByDate": {
      "get": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/Daily": {
      "get": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "parameters": [
          {
            "name": "workerId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "date",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/Approval": {
      "get": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/FieldApprove": {
      "post": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/FieldUnApprove": {
      "post": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/PayrollApprove": {
      "post": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TempWorkerTimeEntries/PayrollUnApprove": {
      "post": {
        "tags": [
          "TempWorkerTimeEntries"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/Options/{includeInactive}": {
      "get": {
        "tags": [
          "TimeApproval"
        ],
        "parameters": [
          {
            "name": "includeInactive",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/WeeklyPayrollApproval/{fromDate}": {
      "get": {
        "tags": [
          "TimeApproval"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/DailyPayrollApproval/{fromDate}": {
      "get": {
        "tags": [
          "TimeApproval"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/SinglePayrollApproval/{id}": {
      "get": {
        "tags": [
          "TimeApproval"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/WeeklyFieldApproval/{fromDate}": {
      "get": {
        "tags": [
          "TimeApproval"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/DailyFieldApproval/{fromDate}": {
      "get": {
        "tags": [
          "TimeApproval"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/FieldApprove": {
      "post": {
        "tags": [
          "TimeApproval"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/FieldUnApprove": {
      "post": {
        "tags": [
          "TimeApproval"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/PayrollApprove": {
      "post": {
        "tags": [
          "TimeApproval"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeApproval/PayrollApproveTempWorker": {
      "post": {
        "tags": [
          "TimeApproval"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeEntry/Options": {
      "get": {
        "tags": [
          "TimeEntry"
        ],
        "summary": "Returns lists used for time entry option selectors (Users, Phases).",
        "parameters": [
          {
            "name": "includeInactive",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeEntry/JobPhases/{jobId}": {
      "get": {
        "tags": [
          "TimeEntry"
        ],
        "summary": "FS Labor element phases for time entry Phase dropdowns: union of\r\n(1) phases on the job estimate and (2) default phases for the job's JobType\r\nfrom job setup (vwJobTypeElementPhaseList). Distinct by JobElementPhaseId.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeEntry/{timeEntryId}": {
      "get": {
        "tags": [
          "TimeEntry"
        ],
        "summary": "Get a specific time entry by id.",
        "parameters": [
          {
            "name": "timeEntryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeEntry/UsersDailyTimeEntry/{userId}/{date}": {
      "get": {
        "tags": [
          "TimeEntry"
        ],
        "summary": "Get all time entries for a user on a specific date.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeEntry/JobTimeEntries/{jobId}": {
      "get": {
        "tags": [
          "TimeEntry"
        ],
        "summary": "Get all time entries for a job.",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeEntry/CreateTimeEntry": {
      "post": {
        "tags": [
          "TimeEntry"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTimeEntryVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTimeEntryVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTimeEntryVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTimeEntryVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeEntry/DeleteTimeEntry/{timeEntryId}": {
      "delete": {
        "tags": [
          "TimeEntry"
        ],
        "summary": "Delete a time entry.",
        "parameters": [
          {
            "name": "timeEntryId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeEntry/UpdateTimeEntry": {
      "put": {
        "tags": [
          "TimeEntry"
        ],
        "summary": "Update a time entry.",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TimeEntry/RecalculateEmployeeWeeklyHours/{userId}/{weekStartDate}": {
      "post": {
        "tags": [
          "TimeEntry"
        ],
        "summary": "Recalculates REG/OT/DT hours for an employee for a specific week.\r\nThis endpoint is for admin use to manually recalculate hours when needed.",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "weekStartDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/TwilioSms/inbound": {
      "post": {
        "tags": [
          "TwilioSms"
        ],
        "summary": "Twilio posts application/x-www-form-urlencoded with From, Body, OptOutType, etc.\r\nEmpty TwiML — Advanced Opt-Out already sends the compliance reply.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/FileReadToken": {
      "get": {
        "tags": [
          "UserPreference"
        ],
        "summary": "Short-lived read-only token the SPA appends to P2 file URLs (photos, documents, signatures).\r\nAny signed-in user may call this; it cannot list or write blobs.",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Preferences": {
      "get": {
        "tags": [
          "UserPreference"
        ],
        "summary": "Get all Job Phases",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Preferences/My": {
      "get": {
        "tags": [
          "UserPreference"
        ],
        "summary": "Get Job Phase by Id",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Preferences/My/Jobs": {
      "get": {
        "tags": [
          "UserPreference"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Preferences/My/Projects": {
      "get": {
        "tags": [
          "UserPreference"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/GetUserData": {
      "get": {
        "tags": [
          "UserPreference"
        ],
        "summary": "Get User Data",
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Preferences/{id}": {
      "put": {
        "tags": [
          "UserPreference"
        ],
        "summary": "Update Job Phase",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UserPreference"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPreference"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPreference"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserPreference"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "UserPreference"
        ],
        "summary": "Delete Job Phase",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Preferences/Job/{jobId}": {
      "post": {
        "tags": [
          "UserPreference"
        ],
        "summary": "Create Open Job User Pref",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "UserPreference"
        ],
        "summary": "Delete Open Job user Pref",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Admin/Users/Preferences/Project/{projectId}": {
      "post": {
        "tags": [
          "UserPreference"
        ],
        "summary": "Create Open Project User Pref",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/vendors": {
      "get": {
        "tags": [
          "Vendors"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/vendors/{id}": {
      "get": {
        "tags": [
          "Vendors"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/VideoProcessing/started": {
      "post": {
        "tags": [
          "VideoProcessing"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingStartedBody"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingStartedBody"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingStartedBody"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingStartedBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/VideoProcessing/completed": {
      "post": {
        "tags": [
          "VideoProcessing"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingCompletedRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingCompletedRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingCompletedRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingCompletedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/VideoProcessing/failed": {
      "post": {
        "tags": [
          "VideoProcessing"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingFailedRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingFailedRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingFailedRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoProcessingFailedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/DownloadAsZip": {
      "post": {
        "tags": [
          "Videos"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoZipRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoZipRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoZipRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoZipRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/DownloadZipLink": {
      "get": {
        "tags": [
          "Videos"
        ],
        "summary": "Poll for a temp video zip SAS after DownloadAsZip queues background build.",
        "parameters": [
          {
            "name": "blobPath",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/entity/{entityType}/{entityId}": {
      "get": {
        "tags": [
          "Videos"
        ],
        "summary": "GET /api/v1/Videos/entity/{entityType}/{entityId}",
        "parameters": [
          {
            "name": "entityType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/{videoId}": {
      "get": {
        "tags": [
          "Videos"
        ],
        "summary": "GET /api/v1/Videos/{videoId}",
        "parameters": [
          {
            "name": "videoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "put": {
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "videoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUpdateRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUpdateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUpdateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "videoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/uploads/init": {
      "post": {
        "tags": [
          "Videos"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoUploadInitRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/uploads/{uploadSessionId}/complete": {
      "post": {
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "uploadSessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/uploads/{uploadSessionId}": {
      "delete": {
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "uploadSessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/bulk/delete": {
      "post": {
        "tags": [
          "Videos"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoBulkDeleteRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoBulkDeleteRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoBulkDeleteRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VideoBulkDeleteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/{videoId}/retry-processing": {
      "post": {
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "videoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/{videoId}/playback-url": {
      "get": {
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "videoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/{videoId}/poster-url": {
      "get": {
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "videoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Videos/{videoId}/download-url": {
      "get": {
        "tags": [
          "Videos"
        ],
        "parameters": [
          {
            "name": "videoId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/Mapping/{id}": {
      "get": {
        "tags": [
          "Xactimate"
        ],
        "summary": "Gets a specific Xactimate mapping by ID",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the mapping to retrieve",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/MappingTypes": {
      "get": {
        "tags": [
          "Xactimate"
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/MappingList/{mappingType}": {
      "get": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "mappingType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/CreateMapping": {
      "post": {
        "tags": [
          "Xactimate"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/Mapping": {
      "post": {
        "tags": [
          "Xactimate"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMappingRequestVm"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMappingRequestVm"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMappingRequestVm"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMappingRequestVm"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/UploadExcel/{mappingType}": {
      "post": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "mappingType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExcelFileUpload"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExcelFileUpload"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExcelFileUpload"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExcelFileUpload"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/GetOrCreateElementPhase": {
      "post": {
        "tags": [
          "Xactimate"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/DeleteAll/{mappingType}": {
      "post": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "mappingType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/EntityTracking": {
      "get": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          },
          {
            "name": "eventType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "changedBy",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "startDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDate",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "mappingTypeId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/UploadEstimateExcel/{jobId}": {
      "post": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "uploadType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExcelFileUpload"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExcelFileUpload"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExcelFileUpload"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ExcelFileUpload"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/KPIs/{jobId}": {
      "get": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/ReprocessEstimateExcel/{jobId}": {
      "post": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/UpdateElementPhaseMargin": {
      "put": {
        "tags": [
          "Xactimate"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/UpdateMargin": {
      "put": {
        "tags": [
          "Xactimate"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/CreateMappingType": {
      "post": {
        "tags": [
          "Xactimate"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/MappingAccounts/{mappingTypeId}": {
      "get": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "mappingTypeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/MappingAccount": {
      "post": {
        "tags": [
          "Xactimate"
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/JToken"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/MappingAccount/{id}": {
      "delete": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/api/v1/Xactimate/MappingType/{id}": {
      "delete": {
        "tags": [
          "Xactimate"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Account": {
        "type": "object",
        "properties": {
          "AccountId": {
            "type": "integer",
            "format": "int32"
          },
          "GpCustomerNumber": {
            "type": "string",
            "nullable": true
          },
          "CompanyName": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "FullName": {
            "maxLength": 102,
            "type": "string",
            "nullable": true
          },
          "DisplayName": {
            "maxLength": 102,
            "type": "string",
            "nullable": true
          },
          "FirstName": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "CustClass": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "DefaultAddressId": {
            "type": "integer",
            "format": "int32"
          },
          "Address1": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "Address2": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "City": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "State": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "County": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "Country": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "Zip": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "Phone1": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Phone1Type": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Phone2": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Phone2Type": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Email": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "IsCommercial": {
            "type": "boolean"
          },
          "ExemptFromDuplicate": {
            "type": "boolean"
          },
          "SmsEnrolled": {
            "type": "boolean"
          },
          "SmsEnrolledDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "SpecialInstructionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SpecialInstructions": {
            "type": "string",
            "nullable": true
          },
          "Contacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Contact"
            },
            "nullable": true
          },
          "Addresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Address"
            },
            "nullable": true
          },
          "AccountAccountTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountAccountType"
            },
            "nullable": true
          },
          "AccountAddresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountAddress"
            },
            "nullable": true
          },
          "AccountContacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountContact"
            },
            "nullable": true
          },
          "SpecialInstruction": {
            "$ref": "#/components/schemas/Note"
          }
        },
        "additionalProperties": false
      },
      "AccountAccountType": {
        "type": "object",
        "properties": {
          "AccountAccountTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "AccountId": {
            "type": "integer",
            "format": "int32"
          },
          "AccountTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Account": {
            "$ref": "#/components/schemas/Account"
          },
          "AccountType": {
            "$ref": "#/components/schemas/AccountType"
          }
        },
        "additionalProperties": false
      },
      "AccountAddress": {
        "type": "object",
        "properties": {
          "AccountAddressId": {
            "type": "integer",
            "format": "int32"
          },
          "AccountId": {
            "type": "integer",
            "description": "Foreign key to Account",
            "format": "int32"
          },
          "AddressV2Id": {
            "type": "integer",
            "description": "Foreign key to AddressV2",
            "format": "int32"
          },
          "AddressTypeId": {
            "type": "integer",
            "description": "Foreign key to AddressType lookup",
            "format": "int32"
          },
          "OtherAddressTypeDescription": {
            "maxLength": 100,
            "type": "string",
            "description": "Free-text description if AddressType = \"Other\"",
            "nullable": true
          },
          "IsPrimary": {
            "type": "boolean",
            "description": "Marks this as the primary/default address for the account"
          },
          "IsDefaultBilling": {
            "type": "boolean",
            "description": "Marks this as the default billing address for the account"
          },
          "IsDefaultJob": {
            "type": "boolean",
            "description": "Marks this as the default job address for the account"
          },
          "ContactPerson": {
            "maxLength": 101,
            "type": "string",
            "description": "Contact person at this address (job-specific)",
            "nullable": true
          },
          "Phone1": {
            "maxLength": 31,
            "type": "string",
            "description": "Phone number associated with this specific address",
            "nullable": true
          },
          "Phone1Type": {
            "maxLength": 11,
            "type": "string",
            "description": "Phone type (Work, Cell, Fax)",
            "nullable": true
          },
          "Phone2": {
            "maxLength": 31,
            "type": "string",
            "description": "Secondary phone number",
            "nullable": true
          },
          "Phone2Type": {
            "maxLength": 11,
            "type": "string",
            "description": "Secondary phone type",
            "nullable": true
          },
          "Email": {
            "maxLength": 255,
            "type": "string",
            "description": "Email address associated with this specific address",
            "nullable": true
          },
          "InActive": {
            "type": "boolean",
            "description": "Soft-delete flag for the assignment"
          },
          "CreateDate": {
            "type": "string",
            "description": "Audit fields",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Account": {
            "$ref": "#/components/schemas/Account"
          },
          "AddressV2": {
            "$ref": "#/components/schemas/AddressV2"
          },
          "AddressType": {
            "$ref": "#/components/schemas/AddressType"
          }
        },
        "additionalProperties": false,
        "description": "Link table associating an Account with an AddressV2.\r\nAllows multiple addresses per account with type classification and contact info per address.\r\nReplaces legacy pattern of storing addresses in Address table with AccountId FK."
      },
      "AccountAssignmentRequest": {
        "type": "object",
        "properties": {
          "AccountId": {
            "type": "integer",
            "description": "The account ID",
            "format": "int32"
          },
          "ReferralType": {
            "type": "string",
            "description": "The referral type",
            "nullable": true
          },
          "CommissionRate": {
            "type": "number",
            "description": "The commission rate",
            "format": "double",
            "nullable": true
          },
          "AssignedByUserId": {
            "type": "integer",
            "description": "The user ID who assigned the account",
            "format": "int32",
            "nullable": true
          },
          "Notes": {
            "type": "string",
            "description": "The notes",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for account assignment"
      },
      "AccountContact": {
        "type": "object",
        "properties": {
          "AccountContactId": {
            "type": "integer",
            "format": "int32"
          },
          "AccountId": {
            "type": "integer",
            "description": "Foreign key to Account",
            "format": "int32"
          },
          "ContactId": {
            "type": "integer",
            "description": "Foreign key to Contact",
            "format": "int32"
          },
          "IsPrimary": {
            "type": "boolean",
            "description": "Marks this contact as the primary contact for the account"
          },
          "InActive": {
            "type": "boolean",
            "description": "Soft-delete flag for the assignment"
          },
          "CreateDate": {
            "type": "string",
            "description": "Audit fields",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Account": {
            "$ref": "#/components/schemas/Account"
          },
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          }
        },
        "additionalProperties": false,
        "description": "Link table associating an Account with a Contact.\r\nAllows many-to-many relationship between Accounts and Contacts.\r\nReplaces legacy pattern of storing AccountId directly on Contact table."
      },
      "AccountDataViewModel": {
        "type": "object",
        "properties": {
          "AccountId": {
            "type": "integer",
            "description": "The account ID",
            "format": "int32"
          },
          "DisplayName": {
            "type": "string",
            "description": "The display name",
            "nullable": true
          },
          "FullName": {
            "type": "string",
            "description": "The full name",
            "nullable": true
          },
          "EntityTypeDisplay": {
            "type": "string",
            "description": "The entity type display string (comma-separated)",
            "nullable": true
          },
          "EntityTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The entity types array",
            "nullable": true
          },
          "IsEnrolledInLoyaltyRewardsProgram": {
            "type": "boolean",
            "description": "Whether the referring entity participates in the loyalty rewards program"
          },
          "LoyaltyRewardsBalance": {
            "type": "number",
            "description": "The current loyalty rewards balance",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "View model for account data"
      },
      "AccountType": {
        "type": "object",
        "properties": {
          "AccountTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "AccountAccountTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountAccountType"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ActivityType": {
        "type": "object",
        "properties": {
          "ActivityTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "InPerson": {
            "type": "boolean"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ActivityVm": {
        "type": "object",
        "properties": {
          "ActivityId": {
            "type": "integer",
            "format": "int32"
          },
          "ActivityTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ActivityType": {
            "type": "string",
            "nullable": true
          },
          "ActivityDate": {
            "type": "string",
            "format": "date-time"
          },
          "TimeSpent": {
            "type": "number",
            "format": "double"
          },
          "ReferredContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferredContact": {
            "type": "string",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntity": {
            "type": "string",
            "nullable": true
          },
          "UserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "NoteId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Cost": {
            "type": "number",
            "format": "double"
          },
          "User": {
            "type": "string",
            "nullable": true
          },
          "Note": {
            "type": "string",
            "nullable": true
          },
          "UserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "Users": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "isFavorite": {
            "type": "boolean"
          },
          "FollowUp": {
            "type": "boolean"
          },
          "FollowUpDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "FollowUpNote": {
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AdSource": {
        "required": [
          "Description"
        ],
        "type": "object",
        "properties": {
          "AdSourceId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AddCalendarEventDocumentsVm": {
        "type": "object",
        "properties": {
          "Documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FileUploadVm"
            },
            "nullable": true
          },
          "AttachmentScope": {
            "type": "string",
            "description": "occurrence or series — default occurrence.",
            "nullable": true
          },
          "ProjectJobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AddCalendarEventNoteVm": {
        "type": "object",
        "properties": {
          "NoteText": {
            "type": "string",
            "nullable": true
          },
          "AttachmentScope": {
            "type": "string",
            "description": "occurrence or series — default occurrence.",
            "nullable": true
          },
          "ProjectJobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AddCalendarEventPhotosVm": {
        "type": "object",
        "properties": {
          "Images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FileUploadVm"
            },
            "nullable": true
          },
          "AttachmentScope": {
            "type": "string",
            "description": "occurrence or series — default occurrence.",
            "nullable": true
          },
          "ProjectJobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AddRemoveUsersJobNotificationVm": {
        "type": "object",
        "properties": {
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "NotificationTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "AddRemoveAll": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AddUserVm": {
        "required": [
          "Email",
          "FirstName",
          "LastName",
          "Password",
          "UserId",
          "Username"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "Username": {
            "minLength": 1,
            "type": "string"
          },
          "FirstName": {
            "minLength": 1,
            "type": "string"
          },
          "LastName": {
            "minLength": 1,
            "type": "string"
          },
          "Email": {
            "minLength": 1,
            "type": "string",
            "format": "email"
          },
          "UserRoles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserRolesVm"
            },
            "nullable": true
          },
          "AssignedRoles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserRolesVm"
            },
            "nullable": true
          },
          "isActive": {
            "type": "boolean"
          },
          "HideFromTimeApproval": {
            "type": "boolean"
          },
          "Password": {
            "minLength": 1,
            "type": "string",
            "format": "password"
          },
          "IsEstimator": {
            "type": "boolean"
          },
          "ConfirmPassword": {
            "type": "string",
            "format": "password",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Address": {
        "required": [
          "Address1",
          "AddressType",
          "City",
          "Phone1",
          "Phone1Type",
          "State",
          "Zip"
        ],
        "type": "object",
        "properties": {
          "AddressId": {
            "type": "integer",
            "format": "int32"
          },
          "AddressType": {
            "maxLength": 101,
            "minLength": 1,
            "type": "string"
          },
          "OtherAddressType": {
            "type": "string",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "IsDefault": {
            "type": "boolean"
          },
          "InActive": {
            "type": "boolean"
          },
          "HasMigratedToV2Address": {
            "type": "boolean"
          },
          "ContactPerson": {
            "maxLength": 101,
            "type": "string",
            "description": "Job Address",
            "nullable": true
          },
          "Address1": {
            "maxLength": 101,
            "minLength": 1,
            "type": "string"
          },
          "Address2": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "City": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string"
          },
          "State": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string"
          },
          "County": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "Country": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "Zip": {
            "maxLength": 21,
            "minLength": 1,
            "type": "string"
          },
          "Phone1": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "Phone1Type": {
            "maxLength": 11,
            "minLength": 1,
            "type": "string"
          },
          "Phone2": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Phone2Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "Email": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Account": {
            "$ref": "#/components/schemas/Account"
          },
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          }
        },
        "additionalProperties": false
      },
      "AddressEntitiesRequest": {
        "type": "object",
        "properties": {
          "AddressIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AddressType": {
        "type": "object",
        "properties": {
          "AddressTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "type": "string",
            "description": "The description of the address type (e.g., \"Home\", \"Office\", \"Job\", \"Bill-Primary\")",
            "nullable": true
          },
          "OtherAddressType": {
            "type": "string",
            "description": "Free-text description if the address type is \"Other\"",
            "nullable": true
          },
          "InActive": {
            "type": "boolean",
            "description": "Soft-delete flag"
          },
          "CreateDate": {
            "type": "string",
            "description": "Audit fields",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "description": "User who created the record",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "description": "Date the record was last updated",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "description": "User who last updated the record",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Lookup table for address type classifications (Home, Office, Job, Bill-Primary, Bill-Secondary, Other, etc.)\r\nReplaces hardcoded address type strings in legacy Address table"
      },
      "AddressV2": {
        "required": [
          "Address1",
          "City",
          "State",
          "Zip"
        ],
        "type": "object",
        "properties": {
          "AddressV2Id": {
            "type": "integer",
            "format": "int32"
          },
          "Address1": {
            "maxLength": 101,
            "minLength": 1,
            "type": "string",
            "description": "Street address line 1"
          },
          "Address2": {
            "maxLength": 101,
            "type": "string",
            "description": "Street address line 2 (apt, suite, etc.)",
            "nullable": true
          },
          "City": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string",
            "description": "City name"
          },
          "State": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string",
            "description": "State/Province abbreviation or name"
          },
          "County": {
            "maxLength": 51,
            "type": "string",
            "description": "County name",
            "nullable": true
          },
          "Country": {
            "maxLength": 51,
            "type": "string",
            "description": "Country name or code",
            "nullable": true
          },
          "Zip": {
            "maxLength": 21,
            "minLength": 1,
            "type": "string",
            "description": "Postal/ZIP code"
          },
          "NormalizedAddress": {
            "maxLength": 300,
            "type": "string",
            "description": "Normalized address string for duplicate detection (lowercase, trimmed, standardized abbreviations)\r\nComputed field - not user-editable",
            "nullable": true
          },
          "Latitude": {
            "type": "number",
            "description": "Latitude coordinate (if geocoded)",
            "format": "double",
            "nullable": true
          },
          "Longitude": {
            "type": "number",
            "description": "Longitude coordinate (if geocoded)",
            "format": "double",
            "nullable": true
          },
          "InActive": {
            "type": "boolean",
            "description": "Soft-delete flag"
          },
          "CreateDate": {
            "type": "string",
            "description": "Audit fields",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "SpecialInstructionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SpecialInstructions": {
            "type": "string",
            "nullable": true
          },
          "AccountAddresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountAddress"
            },
            "description": "Navigation properties - entities that reference this address",
            "nullable": true
          },
          "ContactAddresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactAddress"
            },
            "nullable": true
          },
          "ReferringEntityAddresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferringEntityAddress"
            },
            "nullable": true
          },
          "AddressesV2AddressTypeAssignments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AddressesV2AddressTypeAssignments"
            },
            "description": "Address type assignments for this address (many-to-many with AddressType)",
            "nullable": true
          },
          "SpecialInstruction": {
            "$ref": "#/components/schemas/Note"
          }
        },
        "additionalProperties": false,
        "description": "Version 2 of Address model - contains ONLY address-related fields.\r\nPhone, email, and contact person moved to entity-specific link tables or parent entities.\r\nReplaces legacy Address table which mixed address data with contact data."
      },
      "AddressesV2AddressTypeAssignments": {
        "required": [
          "AddressTypeId",
          "AddressV2Id"
        ],
        "type": "object",
        "properties": {
          "AddressesV2AddressTypeAssignmentId": {
            "type": "integer",
            "description": "Primary key",
            "format": "int32"
          },
          "AddressV2Id": {
            "type": "integer",
            "description": "Foreign key to AddressV2",
            "format": "int32"
          },
          "AddressTypeId": {
            "type": "integer",
            "description": "Foreign key to AddressType",
            "format": "int32"
          },
          "OtherAddressTypeDescription": {
            "maxLength": 101,
            "type": "string",
            "description": "Free-text description if AddressType = \"Other\"",
            "nullable": true
          },
          "InActive": {
            "type": "boolean",
            "description": "Soft-delete flag"
          },
          "CreateDate": {
            "type": "string",
            "description": "Audit fields",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "description": "User who created the record",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "description": "Date the record was last updated",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "description": "User who last updated the record",
            "nullable": true
          },
          "AddressV2": {
            "$ref": "#/components/schemas/AddressV2"
          },
          "AddressType": {
            "$ref": "#/components/schemas/AddressType"
          }
        },
        "additionalProperties": false,
        "description": "Junction table for many-to-many relationship between AddressV2 and AddressType.\r\nAllows an address to have multiple address types (e.g., Home and Billing)."
      },
      "AdminHoliday": {
        "required": [
          "HolidayDate"
        ],
        "type": "object",
        "properties": {
          "AdminHolidayId": {
            "type": "integer",
            "format": "int32"
          },
          "HolidayDate": {
            "type": "string",
            "format": "date-time"
          },
          "Description": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ApplicationRole": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "Name": {
            "type": "string",
            "nullable": true
          },
          "NormalizedName": {
            "type": "string",
            "nullable": true
          },
          "ConcurrencyStamp": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApplicationUser": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "UserName": {
            "type": "string",
            "nullable": true
          },
          "NormalizedUserName": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          },
          "NormalizedEmail": {
            "type": "string",
            "nullable": true
          },
          "EmailConfirmed": {
            "type": "boolean"
          },
          "PasswordHash": {
            "type": "string",
            "nullable": true
          },
          "SecurityStamp": {
            "type": "string",
            "nullable": true
          },
          "ConcurrencyStamp": {
            "type": "string",
            "nullable": true
          },
          "PhoneNumber": {
            "type": "string",
            "nullable": true
          },
          "PhoneNumberConfirmed": {
            "type": "boolean"
          },
          "TwoFactorEnabled": {
            "type": "boolean"
          },
          "LockoutEnd": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "LockoutEnabled": {
            "type": "boolean"
          },
          "AccessFailedCount": {
            "type": "integer",
            "format": "int32"
          },
          "FirstName": {
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "type": "string",
            "nullable": true
          },
          "FullName": {
            "type": "string",
            "nullable": true
          },
          "GP_Department": {
            "type": "string",
            "nullable": true
          },
          "GP_JobTitle": {
            "type": "string",
            "nullable": true
          },
          "GP_LocationId": {
            "type": "string",
            "nullable": true
          },
          "GP_DivisionCode": {
            "type": "string",
            "nullable": true
          },
          "GP_EmpId": {
            "type": "string",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "ReceiveTextNotifications": {
            "type": "boolean"
          },
          "ReceiveEmailNotifications": {
            "type": "boolean"
          },
          "HideInProductionLists": {
            "type": "boolean"
          },
          "HideFromTimeApproval": {
            "type": "boolean"
          },
          "ForcePasswordReset": {
            "type": "boolean"
          },
          "IsEstimator": {
            "type": "boolean"
          },
          "IsSupervisor": {
            "type": "boolean"
          },
          "LastPasswordChangedDate": {
            "type": "string",
            "format": "date-time"
          },
          "PasswordResetExempt": {
            "type": "boolean"
          },
          "ProfilePictureUrl": {
            "type": "string",
            "nullable": true
          },
          "MicrosoftUserId": {
            "type": "string",
            "nullable": true
          },
          "MicrosoftUserPrincipalName": {
            "type": "string",
            "nullable": true
          },
          "CalendarSyncEnabled": {
            "type": "boolean"
          },
          "CalendarSyncLastSucceeded": {
            "type": "boolean",
            "nullable": true
          },
          "CalendarSyncFailReason": {
            "type": "string",
            "nullable": true
          },
          "CalendarVisibleToMasterViewOnly": {
            "type": "boolean",
            "description": "When true, this user's calendar details are only visible to users with CalendarMasterView."
          },
          "CalendarPrivateForEveryone": {
            "type": "boolean",
            "description": "When true, only this user can see their calendar details; everyone else sees private blocks."
          },
          "CalendarHiddenFromNonMasterView": {
            "type": "boolean",
            "description": "Ghost mode: this user's organized appointments are omitted entirely for viewers without\r\nCalendarMasterView unless the viewer is an attendee. Conflict checks still show a private block."
          },
          "UseGeneralCalendar": {
            "type": "boolean",
            "description": "When true, Outlook create/update/delete for this user uses the shared general organizer mailbox\r\ninstead of their personal Microsoft account (they may have none, or share someone else's)."
          },
          "TagAppointmentsWithUserTeams": {
            "type": "boolean",
            "description": "When true, Outlook sync tags appointments this user organizes with their teams\r\nif the appointment is not already on a team calendar. Off by default."
          },
          "AutoLinkOutlookAppointmentsByJobId": {
            "type": "boolean",
            "description": "When true, Outlook sync links this user's incoming appointments to an existing\r\nP2 job when the title contains an unbroken run of exactly five digits that matches a job.\r\nOff by default. An appointment that already has a job is left as-is."
          },
          "OutlookSyncCalendarEventTypeId": {
            "type": "integer",
            "description": "When set, Outlook sync assigns this appointment type to this user's appointments\r\nthat do not already have one. Null leaves types unchanged.",
            "format": "int32",
            "nullable": true
          },
          "CalendarDefaultBuiltinFilterId": {
            "maxLength": 31,
            "type": "string",
            "description": "Built-in calendar quick-filter id (e.g. mine-only) used as the user's default view on load.\r\nMutually exclusive with a preset marked IsDefault.",
            "nullable": true
          },
          "TeamUsers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamUser"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApplyJobTimelineSyncVm": {
        "type": "object",
        "properties": {
          "ProjectJobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "CalendarEventTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "JobTimelineDate": {
            "type": "string",
            "nullable": true
          },
          "OverwriteExisting": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ApplySyncAppointmentTypeRequest": {
        "type": "object",
        "properties": {
          "CalendarEventTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ArTrxApprovalVm": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobName": {
            "type": "string",
            "nullable": true
          },
          "ArTrxId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ArTrxType": {
            "type": "string",
            "nullable": true
          },
          "ArTrxTotal": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "GpDocNumber": {
            "type": "string",
            "nullable": true
          },
          "ArTrxDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Submitted": {
            "type": "boolean"
          },
          "SubmittedServerStatus": {
            "type": "boolean"
          },
          "Approved": {
            "type": "boolean"
          },
          "ApprovedServerStatus": {
            "type": "boolean"
          },
          "Voided": {
            "type": "boolean"
          },
          "VoidedServerStatus": {
            "type": "boolean"
          },
          "JobIsActive": {
            "type": "boolean"
          },
          "CreditMemoReasonDescription": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ArTrxHdr": {
        "required": [
          "AccountId",
          "ArTrxDate",
          "ArTrxType",
          "JobId"
        ],
        "type": "object",
        "properties": {
          "ArTrxId": {
            "type": "integer",
            "format": "int32"
          },
          "ArTrxType": {
            "minLength": 1,
            "type": "string",
            "description": "Invoice, Credit Memo, Write Off"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "AccountId": {
            "type": "integer",
            "format": "int32"
          },
          "GpDocNumber": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "GpDocType": {
            "type": "integer",
            "format": "int32"
          },
          "GpCustomer": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "ArTrxDate": {
            "type": "string",
            "format": "date-time"
          },
          "ArTrxDesc": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "ArTrxTotal": {
            "type": "number",
            "format": "double"
          },
          "Approved": {
            "type": "boolean"
          },
          "Submitted": {
            "type": "boolean"
          },
          "Voided": {
            "type": "boolean"
          },
          "Reconciled": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "CareOf": {
            "type": "string",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "Account": {
            "$ref": "#/components/schemas/Account"
          },
          "LoyaltyRewardReferringEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "Lines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ArTrxLine"
            },
            "nullable": true
          },
          "PaidAmount": {
            "type": "number",
            "format": "double"
          },
          "FullyPaidDate": {
            "type": "string",
            "format": "date-time"
          },
          "FullyPaid": {
            "type": "boolean"
          },
          "CashReceipts": {
            "type": "string",
            "nullable": true
          },
          "PaymentUpdateLog": {
            "type": "string",
            "nullable": true
          },
          "UsedForLoyaltyRewards": {
            "type": "boolean",
            "description": "Indicates whether this invoice has been used to calculate loyalty rewards"
          },
          "LoyaltyRewardReferringEntityId": {
            "type": "integer",
            "description": "The referring entity ID used for \"Credit Memo - Loyalty Rewards\" transactions\r\nLinks the credit memo to the specific referring entity whose loyalty rewards balance was used",
            "format": "int32",
            "nullable": true
          },
          "CreditMemoReasonCodeId": {
            "type": "integer",
            "description": "The reason code ID for Credit Memo and Credit Memo - Loyalty Rewards transactions",
            "format": "int32",
            "nullable": true
          },
          "CreditMemoReasonCode": {
            "$ref": "#/components/schemas/ReasonCode"
          },
          "OnlinePaymentEnabled": {
            "type": "boolean"
          },
          "WaiveCCFee": {
            "type": "boolean"
          },
          "AllowManualBankEntry": {
            "type": "boolean"
          },
          "LastPaymentReminderSent": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "PaymentReminderCount": {
            "type": "integer",
            "format": "int32"
          },
          "PaymentRequestInvoices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExternalPaymentRequestInvoice"
            },
            "nullable": true
          },
          "AmountDue": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "HasOutstandingBalance": {
            "type": "boolean",
            "readOnly": true
          },
          "IsInvoice": {
            "type": "boolean",
            "readOnly": true
          },
          "IsPartiallyPaid": {
            "type": "boolean",
            "readOnly": true
          },
          "OriginalAmount": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "RemainingAmount": {
            "type": "number",
            "format": "double",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "ArTrxLine": {
        "required": [
          "ArTrxId",
          "LineDescription",
          "LineSeq"
        ],
        "type": "object",
        "properties": {
          "ArTrxLineId": {
            "type": "integer",
            "format": "int32"
          },
          "ArTrxId": {
            "type": "integer",
            "format": "int32"
          },
          "LineSeq": {
            "type": "integer",
            "format": "int32"
          },
          "LineDescription": {
            "maxLength": 8000,
            "minLength": 1,
            "type": "string"
          },
          "Qty": {
            "type": "integer",
            "format": "int32"
          },
          "Amount": {
            "type": "number",
            "format": "double"
          },
          "ElementCode": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "PhaseCode": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "ElementPhaseId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobElementPhase": {
            "$ref": "#/components/schemas/JobElementPhase"
          },
          "Header": {
            "$ref": "#/components/schemas/ArTrxHdr"
          }
        },
        "additionalProperties": false
      },
      "Area": {
        "type": "object",
        "properties": {
          "AreaId": {
            "type": "integer",
            "format": "int32"
          },
          "AreaDesc": {
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AssignRefEntityAdminAssignmentRequest": {
        "type": "object",
        "properties": {
          "ApplyMode": {
            "type": "string",
            "description": "channel | category | both",
            "nullable": true
          },
          "ChannelId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SubChannelId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Category": {
            "type": "string",
            "nullable": true
          },
          "ReferringEntityIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AssignVehicleUserRequest": {
        "type": "object",
        "properties": {
          "UserId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "AutoAssignItem": {
        "type": "object",
        "properties": {
          "VehicleDataId": {
            "type": "integer",
            "format": "int32"
          },
          "UserId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "BulkAccountReconciliationRequest": {
        "type": "object",
        "properties": {
          "Take": {
            "type": "integer",
            "description": "Page size for processing batches of duplicate groups",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Request parameters for bulk account reconciliation job"
      },
      "BulkDataExportQueueRequest": {
        "type": "object",
        "properties": {
          "Packs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "IncludeInactive": {
            "type": "boolean"
          },
          "CreatedFrom": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreatedTo": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BulkDeleteRequest": {
        "type": "object",
        "properties": {
          "PhotoIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BulkReviewRequest": {
        "type": "object",
        "properties": {
          "JobIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "BusDevUser": {
            "type": "string",
            "nullable": true
          },
          "ApplyHierarchy": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "BulkSignOutRequest": {
        "type": "object",
        "properties": {
          "SignInIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "IDs of TempWorkerSignIn records to sign out.",
            "nullable": true
          },
          "SignOutTime": {
            "type": "string",
            "description": "Optional explicit sign-out time. Defaults to UTC now if not provided.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BulkUpdateCategoryRequest": {
        "type": "object",
        "properties": {
          "PhotoIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "BulkUpdateJobAreaRequest": {
        "type": "object",
        "properties": {
          "PhotoIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "JobAreaId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BulkUpdateNoteRequest": {
        "type": "object",
        "properties": {
          "PhotoIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "Note": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BusinessCardScanRequest": {
        "type": "object",
        "properties": {
          "ImageBase64": {
            "type": "string",
            "nullable": true
          },
          "ContentType": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CalendarAssociationEmailRequestVm": {
        "type": "object",
        "properties": {
          "ProjectJobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CalendarAssociationLossInstructionRequestVm": {
        "type": "object",
        "properties": {
          "ProjectJobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CalendarAuditResolveItemVm": {
        "type": "object",
        "properties": {
          "IssueType": {
            "type": "string",
            "nullable": true
          },
          "OutlookEventId": {
            "type": "string",
            "nullable": true
          },
          "CalendarEventId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Action": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CalendarAuditResolveVm": {
        "type": "object",
        "properties": {
          "Items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CalendarAuditResolveItemVm"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CalendarEventType": {
        "type": "object",
        "properties": {
          "CalendarEventTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "Category": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "Color": {
            "maxLength": 7,
            "type": "string",
            "description": "Hex color for calendar event bars when this type is assigned.",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CalendarRecurrenceVm": {
        "type": "object",
        "properties": {
          "PatternType": {
            "type": "string",
            "description": "none, daily, weekly, monthly, yearly",
            "nullable": true
          },
          "Interval": {
            "type": "integer",
            "format": "int32"
          },
          "DaysOfWeek": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "For weekly: monday, tuesday, etc.",
            "nullable": true
          },
          "EndType": {
            "type": "string",
            "description": "never, endDate, numbered",
            "nullable": true
          },
          "EndDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "NumberOfOccurrences": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Category": {
        "type": "object",
        "properties": {
          "CategoryId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Channel": {
        "required": [
          "ChannelDesc"
        ],
        "type": "object",
        "properties": {
          "ChannelId": {
            "type": "integer",
            "format": "int32"
          },
          "ChannelDesc": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "ChannelSubChannels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChannelSubChannel"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ChannelSubChannel": {
        "required": [
          "ChannelId",
          "SubChannelId"
        ],
        "type": "object",
        "properties": {
          "ChannelSubChannelId": {
            "type": "integer",
            "format": "int32"
          },
          "ChannelId": {
            "type": "integer",
            "format": "int32"
          },
          "SubChannelId": {
            "type": "integer",
            "format": "int32"
          },
          "Channel": {
            "$ref": "#/components/schemas/Channel"
          },
          "SubChannel": {
            "$ref": "#/components/schemas/SubChannel"
          }
        },
        "additionalProperties": false,
        "description": "Links a Channel to a SubChannel (many-to-many), similar to how job types relate to subtypes via admin assignment."
      },
      "ChartEdgeViewModel": {
        "type": "object",
        "properties": {
          "From": {
            "type": "string",
            "description": "The source node ID",
            "nullable": true
          },
          "To": {
            "type": "string",
            "description": "The target node ID",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for chart edges"
      },
      "ChartNodeViewModel": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "description": "The node ID",
            "nullable": true
          },
          "Label": {
            "type": "string",
            "description": "The node label",
            "nullable": true
          },
          "IsRoot": {
            "type": "boolean",
            "description": "Whether this is a root node"
          },
          "IsInitialAccount": {
            "type": "boolean",
            "description": "Whether this is the initial account"
          },
          "IsEmpty": {
            "type": "boolean",
            "description": "Whether the node is empty"
          },
          "AccountData": {
            "$ref": "#/components/schemas/AccountDataViewModel"
          },
          "Level": {
            "type": "integer",
            "description": "The level in hierarchy",
            "format": "int32"
          },
          "ReferralType": {
            "type": "string",
            "description": "The referral type",
            "nullable": true
          },
          "CommissionRate": {
            "type": "number",
            "description": "The commission rate",
            "format": "double",
            "nullable": true
          },
          "HierarchyPathNames": {
            "type": "string",
            "description": "The hierarchy path names",
            "nullable": true
          },
          "IsDirectReferral": {
            "type": "boolean",
            "description": "Whether this is a direct referral"
          }
        },
        "additionalProperties": false,
        "description": "View model for chart nodes"
      },
      "CheckEventConflictsVm": {
        "type": "object",
        "properties": {
          "UserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Organizer + attendee P2 user ids to scan.",
            "nullable": true
          },
          "StartDateTimeUtc": {
            "type": "string",
            "format": "date-time"
          },
          "EndDateTimeUtc": {
            "type": "string",
            "format": "date-time"
          },
          "IsAllDay": {
            "type": "boolean"
          },
          "ExcludeOutlookEventId": {
            "type": "string",
            "description": "When editing, the event (and optionally its series) to exclude from the scan.",
            "nullable": true
          },
          "ExcludeEditScope": {
            "type": "string",
            "description": "occurrence (default) excludes only that event; series excludes the whole series.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CheckExistingAddressV2Request": {
        "type": "object",
        "properties": {
          "PrimaryAddressId": {
            "type": "integer",
            "format": "int32"
          },
          "DuplicateAddressIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CommissionPeriod": {
        "required": [
          "CommissionPeriodEndDate",
          "CommissionPeriodName",
          "CommissionPeriodStartDate",
          "Year"
        ],
        "type": "object",
        "properties": {
          "CommissionPeriodId": {
            "type": "integer",
            "format": "int32"
          },
          "Year": {
            "type": "integer",
            "format": "int32"
          },
          "CommissionPeriodName": {
            "minLength": 1,
            "type": "string"
          },
          "CommissionPeriodStartDate": {
            "type": "string",
            "format": "date-time"
          },
          "CommissionPeriodEndDate": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "ConfirmAndProcessPaymentRequest": {
        "type": "object",
        "properties": {
          "PaymentIntentId": {
            "type": "string",
            "nullable": true
          },
          "ReturnUrl": {
            "type": "string",
            "nullable": true
          },
          "ReceiptEmail": {
            "type": "string",
            "nullable": true
          },
          "Amount": {
            "type": "number",
            "format": "double"
          },
          "CustomerEmail": {
            "type": "string",
            "nullable": true
          },
          "PaymentMethodId": {
            "type": "string",
            "description": "The Stripe PaymentMethod ID to attach for direct charges",
            "nullable": true
          },
          "SelectedPaymentMethod": {
            "type": "string",
            "description": "The payment method the user selected in the UI (creditcard/debitcard/ach).\r\nWhen present this takes precedence over server-side PI metadata detection.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ConfirmPaymentRequestVm": {
        "required": [
          "PaymentIntentId",
          "PaymentMethodId"
        ],
        "type": "object",
        "properties": {
          "PaymentMethodId": {
            "minLength": 1,
            "type": "string"
          },
          "PaymentIntentId": {
            "minLength": 1,
            "type": "string"
          }
        },
        "additionalProperties": false,
        "description": "Request model for confirming a payment"
      },
      "ConsolidationRequest": {
        "type": "object",
        "properties": {
          "PrimaryFingerprint": {
            "type": "string",
            "nullable": true
          },
          "FingerprintsToMerge": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Contact": {
        "required": [
          "FirstName",
          "LastName",
          "Phone1"
        ],
        "type": "object",
        "properties": {
          "ContactId": {
            "type": "integer",
            "format": "int32"
          },
          "FullName": {
            "maxLength": 102,
            "type": "string",
            "nullable": true
          },
          "FirstName": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string"
          },
          "LastName": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string"
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DefaultAddressType": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "OtherAddressType": {
            "type": "string",
            "nullable": true
          },
          "Address1": {
            "type": "string",
            "nullable": true
          },
          "Address2": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "City": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "State": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "County": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "Country": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "Zip": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "Phone1": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "Phone1Type": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Phone2": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Phone2Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "Email": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BusDevId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "RefContactClassId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "ExemptFromDuplicate": {
            "type": "boolean"
          },
          "SmsEnrolled": {
            "type": "boolean"
          },
          "SmsEnrolledDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Birthday": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Anniversary": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Married": {
            "type": "boolean"
          },
          "Children": {
            "type": "boolean"
          },
          "HobbiesAndInterests": {
            "type": "string",
            "nullable": true
          },
          "ReasonCodeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SpecialInstructionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SpecialInstructions": {
            "type": "string",
            "nullable": true
          },
          "isFavorite": {
            "type": "boolean"
          },
          "Account": {
            "$ref": "#/components/schemas/Account"
          },
          "SpecialInstruction": {
            "$ref": "#/components/schemas/Note"
          },
          "BusDevUser": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "RefContactClass": {
            "$ref": "#/components/schemas/RefContactClass"
          },
          "ContactConTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactConType"
            },
            "nullable": true
          },
          "ContactRefContactClasses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactRefContactClass"
            },
            "nullable": true
          },
          "Addresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Address"
            },
            "nullable": true
          },
          "ReasonCode": {
            "$ref": "#/components/schemas/ReasonCode"
          },
          "ContactAddresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactAddress"
            },
            "nullable": true
          },
          "AccountContacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountContact"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ContactAccountVm": {
        "type": "object",
        "properties": {
          "AccountId": {
            "type": "integer",
            "format": "int32"
          },
          "IsPrimary": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ContactAddress": {
        "type": "object",
        "properties": {
          "ContactAddressId": {
            "type": "integer",
            "format": "int32"
          },
          "ContactId": {
            "type": "integer",
            "description": "Foreign key to Contact",
            "format": "int32"
          },
          "AddressV2Id": {
            "type": "integer",
            "description": "Foreign key to AddressV2",
            "format": "int32"
          },
          "AddressTypeId": {
            "type": "integer",
            "description": "Foreign key to AddressType lookup",
            "format": "int32"
          },
          "OtherAddressTypeDescription": {
            "maxLength": 100,
            "type": "string",
            "description": "Free-text description if AddressType = \"Other\"",
            "nullable": true
          },
          "IsPrimary": {
            "type": "boolean",
            "description": "Marks this as the primary/default address for the contact"
          },
          "Phone1": {
            "maxLength": 31,
            "type": "string",
            "description": "Phone number associated with this specific address",
            "nullable": true
          },
          "Phone1Type": {
            "maxLength": 11,
            "type": "string",
            "description": "Phone type (Work, Cell, Fax)",
            "nullable": true
          },
          "Phone2": {
            "maxLength": 31,
            "type": "string",
            "description": "Secondary phone number",
            "nullable": true
          },
          "Phone2Type": {
            "maxLength": 11,
            "type": "string",
            "description": "Secondary phone type",
            "nullable": true
          },
          "Email": {
            "maxLength": 51,
            "type": "string",
            "description": "Email address associated with this specific address",
            "nullable": true
          },
          "InActive": {
            "type": "boolean",
            "description": "Soft-delete flag for the assignment"
          },
          "CreateDate": {
            "type": "string",
            "description": "Audit fields",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          },
          "AddressV2": {
            "$ref": "#/components/schemas/AddressV2"
          },
          "AddressType": {
            "$ref": "#/components/schemas/AddressType"
          }
        },
        "additionalProperties": false,
        "description": "Link table associating a Contact with an AddressV2.\r\nAllows multiple addresses per contact with type classification and contact info per address.\r\nReplaces legacy pattern of storing addresses in Address table with ContactId FK."
      },
      "ContactAddressV2Vm": {
        "type": "object",
        "properties": {
          "AddressV2Id": {
            "type": "integer",
            "format": "int32"
          },
          "IsPrimary": {
            "type": "boolean"
          },
          "Phone1": {
            "type": "string",
            "nullable": true
          },
          "Phone1Type": {
            "type": "string",
            "nullable": true
          },
          "Phone2": {
            "type": "string",
            "nullable": true
          },
          "Phone2Type": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ContactConType": {
        "type": "object",
        "properties": {
          "ContactConTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "ContactId": {
            "type": "integer",
            "format": "int32"
          },
          "ContactTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          },
          "ContactType": {
            "$ref": "#/components/schemas/ContactType"
          }
        },
        "additionalProperties": false
      },
      "ContactRefContactClass": {
        "type": "object",
        "properties": {
          "ContactRefContactClassId": {
            "type": "integer",
            "format": "int32"
          },
          "ContactId": {
            "type": "integer",
            "format": "int32"
          },
          "RefContactClassId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          },
          "RefContactClass": {
            "$ref": "#/components/schemas/RefContactClass"
          }
        },
        "additionalProperties": false
      },
      "ContactType": {
        "type": "object",
        "properties": {
          "ContactTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "ContactConTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactConType"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ContactTypeVm": {
        "type": "object",
        "properties": {
          "ContactTypeId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ContactVm": {
        "type": "object",
        "properties": {
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          },
          "ContactTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactTypeVm"
            },
            "nullable": true
          },
          "ContactAddressesV2": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactAddressV2Vm"
            },
            "nullable": true
          },
          "ContactAccounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactAccountVm"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ContactWrapper": {
        "type": "object",
        "properties": {
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          },
          "ContactTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "ReportedBy": {
            "type": "boolean"
          },
          "ProjectContactId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "CreateCalendarEventVm": {
        "type": "object",
        "properties": {
          "ApplicationUserId": {
            "type": "integer",
            "format": "int32"
          },
          "Subject": {
            "type": "string",
            "nullable": true
          },
          "StartDateTimeUtc": {
            "type": "string",
            "format": "date-time"
          },
          "EndDateTimeUtc": {
            "type": "string",
            "format": "date-time"
          },
          "IsAllDay": {
            "type": "boolean"
          },
          "Location": {
            "type": "string",
            "nullable": true
          },
          "Body": {
            "type": "string",
            "nullable": true
          },
          "AssignedToUserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "AttendeeEmails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "Recurrence": {
            "$ref": "#/components/schemas/CalendarRecurrenceVm"
          },
          "CalendarEventTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectJobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TeamId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TeamIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "Notes": {
            "type": "string",
            "nullable": true
          },
          "ActivityTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Sensitivity": {
            "type": "string",
            "description": "normal | personal | private | confidential — defaults to normal.",
            "nullable": true
          },
          "ShowAs": {
            "type": "string",
            "description": "busy | tentative | free | oof | workingelsewhere — defaults to busy.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateCotWDayRequest": {
        "type": "object",
        "properties": {
          "Date": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "CreateDayRequest": {
        "type": "object",
        "properties": {
          "Date": {
            "type": "string",
            "format": "date-time"
          },
          "Notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateDryLogRequest": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateFTPRPHeadersRequest": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "XactimateData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/XactimateLineItemDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for creating FTPRP headers from Xactimate data"
      },
      "CreateLoyaltyRewardRequest": {
        "type": "object",
        "properties": {
          "ReferringEntityId": {
            "type": "integer",
            "description": "The referring entity ID to receive the reward",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "description": "The job ID for this reward (optional, can override URL parameter)",
            "format": "int32",
            "nullable": true
          },
          "LoyaltyRewardAmount": {
            "type": "number",
            "description": "The loyalty reward amount",
            "format": "double"
          },
          "IsApproved": {
            "type": "boolean",
            "description": "Whether to auto-approve the reward (default: true)",
            "nullable": true
          },
          "DateApproved": {
            "type": "string",
            "description": "The date the reward was approved (defaults to now if approved)",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for manually creating a loyalty reward"
      },
      "CreateNotificationVm": {
        "type": "object",
        "properties": {
          "RecipientUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ScheduleDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "NotificationTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "NotificationType": {
            "$ref": "#/components/schemas/NotificationType"
          },
          "RecipientUser": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "BodyMessage": {
            "type": "string",
            "nullable": true
          },
          "IsScheduled": {
            "type": "boolean"
          },
          "ScheduleFrequency": {
            "type": "string",
            "nullable": true
          },
          "HangfireGuid": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreatePaymentIntentV2RequestVm": {
        "type": "object",
        "properties": {
          "Amount": {
            "type": "number",
            "format": "double"
          },
          "CustomerEmail": {
            "type": "string",
            "nullable": true
          },
          "AvailablePaymentMethods": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for creating a Payment Element payment intent (V2)"
      },
      "CreatePaymentRequestVm": {
        "type": "object",
        "properties": {
          "ArTrxId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "EmailAddresses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "ExpiryDays": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SendEmail": {
            "type": "boolean",
            "nullable": true
          },
          "WaiveCCFee": {
            "type": "boolean",
            "nullable": true
          },
          "GeneratedViaManualPayment": {
            "type": "boolean",
            "description": "Indicates whether this payment request was generated via the Manual Payment button"
          }
        },
        "additionalProperties": false
      },
      "CreateProjectJobsLinesVm": {
        "type": "object",
        "properties": {
          "JobName": {
            "type": "string",
            "nullable": true
          },
          "Type": {
            "type": "integer",
            "format": "int32"
          },
          "SubType": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "CreateProjectJobsVm": {
        "type": "object",
        "properties": {
          "ProjectId": {
            "type": "integer",
            "format": "int32"
          },
          "InsuranceAdjuster": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AdjustingCo": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BillAccount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BusDevUser": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Division": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InsuranceAccount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobAccount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "PolicyHolder": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringAccount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferredContact": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReportedBy": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReceivedByUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "StartDate": {
            "type": "string",
            "format": "date-time"
          },
          "Team": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ThirdPartyAccount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobLines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CreateProjectJobsLinesVm"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateRelationshipRequest": {
        "type": "object",
        "properties": {
          "ParentEntityId": {
            "type": "integer",
            "format": "int32"
          },
          "ChildEntityId": {
            "type": "integer",
            "format": "int32"
          },
          "RelationshipType": {
            "type": "string",
            "nullable": true
          },
          "CommissionSharePercentage": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "Notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateStatementPaymentRequestForJobsVm": {
        "type": "object",
        "properties": {
          "JobIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "FromDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ToDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ExpiryDays": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "WaiveCCFee": {
            "type": "boolean",
            "nullable": true
          },
          "GeneratedViaManualPayment": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "CreateStatementPaymentRequestVm": {
        "type": "object",
        "properties": {
          "InvoiceIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "List of invoice IDs to include in the payment request",
            "nullable": true
          },
          "EmailAddresses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Email addresses to send the payment request to",
            "nullable": true
          },
          "CustomSubject": {
            "type": "string",
            "description": "Custom subject for the email",
            "nullable": true
          },
          "CustomMessage": {
            "type": "string",
            "description": "Custom message to include in the email",
            "nullable": true
          },
          "ExpiryDays": {
            "type": "integer",
            "description": "Number of days until the payment request expires",
            "format": "int32",
            "nullable": true
          },
          "WaiveCCFee": {
            "type": "boolean",
            "nullable": true
          },
          "GeneratedViaManualPayment": {
            "type": "boolean",
            "description": "Indicates whether this payment request was generated via the Manual Payment button"
          }
        },
        "additionalProperties": false,
        "description": "View model for creating multi-invoice payment requests for AR Statements"
      },
      "CreateSupplyUsageDayRequest": {
        "type": "object",
        "properties": {
          "Date": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "CreateTempWorkerTimeEntriesVm": {
        "type": "object",
        "properties": {
          "TimeEntry": {
            "$ref": "#/components/schemas/TempWorkerTimeEntry"
          },
          "TempWorkerIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateTimeEntryVm": {
        "type": "object",
        "properties": {
          "TimeEntry": {
            "$ref": "#/components/schemas/TimeEntry"
          },
          "UserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalCopyEntityGrantsRequest": {
        "type": "object",
        "properties": {
          "FromEmail": {
            "type": "string",
            "nullable": true
          },
          "ToEmail": {
            "type": "string",
            "nullable": true
          },
          "Notify": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalGrantPutRequest": {
        "type": "object",
        "properties": {
          "Emails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "Media": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerPortalMediaRef"
            },
            "nullable": true
          },
          "Mode": {
            "type": "string",
            "description": "set = replace emails on these items; add = only insert; revoke = only revoke.",
            "nullable": true
          },
          "Notify": {
            "type": "boolean",
            "description": "When false, no \"new media shared\" email is sent to newly granted recipients."
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalInviteRequest": {
        "type": "object",
        "properties": {
          "Members": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerPortalMemberInput"
            },
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalLiveConnectedRequest": {
        "type": "object",
        "properties": {
          "ServerCallId": {
            "type": "string",
            "nullable": true
          },
          "RemoteParticipantCount": {
            "type": "integer",
            "description": "Remote ACS participants this client currently sees (0 = alone).",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalLiveSessionDeclineRequest": {
        "type": "object",
        "properties": {
          "Reason": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalLiveSessionRequest": {
        "type": "object",
        "properties": {
          "Note": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalMediaRef": {
        "type": "object",
        "properties": {
          "MediaType": {
            "type": "string",
            "nullable": true
          },
          "MediaId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalMemberInput": {
        "type": "object",
        "properties": {
          "Email": {
            "type": "string",
            "nullable": true
          },
          "Phone": {
            "type": "string",
            "nullable": true
          },
          "DisplayName": {
            "type": "string",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalMessagePostRequest": {
        "type": "object",
        "properties": {
          "Body": {
            "type": "string",
            "nullable": true
          },
          "PhotoId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DocumentId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "VideoId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalOtpRequestBody": {
        "type": "object",
        "properties": {
          "Email": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalOtpVerifyBody": {
        "type": "object",
        "properties": {
          "Email": {
            "type": "string",
            "nullable": true
          },
          "Otp": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalPhotoSheetRequest": {
        "type": "object",
        "properties": {
          "PhotoIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "FileName": {
            "type": "string",
            "description": "Optional PDF stem/name (with or without .pdf). Sanitized server-side.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalProvisionRequest": {
        "type": "object",
        "properties": {
          "EntityType": {
            "type": "string",
            "nullable": true
          },
          "EntityId": {
            "type": "integer",
            "format": "int32"
          },
          "OwnerType": {
            "type": "string",
            "nullable": true
          },
          "OwnerId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Title": {
            "type": "string",
            "nullable": true
          },
          "Members": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomerPortalMemberInput"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalSendLinkRequest": {
        "type": "object",
        "properties": {
          "Channel": {
            "type": "string",
            "description": "Email, Sms, or Both.",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "EntityType": {
            "type": "string",
            "nullable": true
          },
          "EntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalThreadAttachmentRequest": {
        "type": "object",
        "properties": {
          "FileName": {
            "type": "string",
            "nullable": true
          },
          "ContentType": {
            "type": "string",
            "nullable": true
          },
          "Bytes": {
            "type": "string",
            "description": "Raw base64 or data:*;base64,... payload.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalUpdateRequest": {
        "type": "object",
        "properties": {
          "Title": {
            "type": "string",
            "nullable": true
          },
          "IsEnabled": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CustomerPortalZipRequest": {
        "type": "object",
        "properties": {
          "PhotoIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "DocumentIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "VideoIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "AllShared": {
            "type": "boolean",
            "description": "When true, zip all currently shared media (optionally filtered)."
          },
          "Filter": {
            "type": "string",
            "description": "all | photo | document | video",
            "nullable": true
          },
          "FileName": {
            "type": "string",
            "description": "Optional zip file name (with or without .zip). Sanitized server-side.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeductLoyaltyBalanceRequest": {
        "type": "object",
        "properties": {
          "Amount": {
            "type": "number",
            "description": "Gets or sets the amount to deduct",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Request model for deducting loyalty rewards balance"
      },
      "Division": {
        "required": [
          "Address1",
          "City",
          "DivisionDesc",
          "Phone",
          "State",
          "Zip"
        ],
        "type": "object",
        "properties": {
          "DivisionId": {
            "type": "integer",
            "format": "int32"
          },
          "DivisionDesc": {
            "maxLength": 101,
            "minLength": 1,
            "type": "string"
          },
          "Address1": {
            "minLength": 1,
            "type": "string"
          },
          "Address2": {
            "type": "string",
            "nullable": true
          },
          "City": {
            "minLength": 1,
            "type": "string"
          },
          "State": {
            "minLength": 1,
            "type": "string"
          },
          "Zip": {
            "minLength": 1,
            "type": "string"
          },
          "Phone": {
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DrywallFtprpRepairRequest": {
        "type": "object",
        "properties": {
          "JobIdsText": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ESPTimeInOut": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "UserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "PhaseId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ElementId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ElementPhaseId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TimeInTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TimeInDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TimeOutTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TimeOutDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ArrivalTimeTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ArrivalTimeDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "User": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "Phase": {
            "$ref": "#/components/schemas/JobPhase"
          },
          "Element": {
            "$ref": "#/components/schemas/JobElement"
          },
          "ElementPhase": {
            "$ref": "#/components/schemas/JobElementPhase"
          }
        },
        "additionalProperties": false
      },
      "EditUserVm": {
        "required": [
          "Email",
          "FirstName",
          "LastName",
          "UserId",
          "Username"
        ],
        "type": "object",
        "properties": {
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "Username": {
            "minLength": 1,
            "type": "string"
          },
          "FirstName": {
            "minLength": 1,
            "type": "string"
          },
          "LastName": {
            "minLength": 1,
            "type": "string"
          },
          "FullName": {
            "type": "string",
            "nullable": true
          },
          "GP_Department": {
            "type": "string",
            "nullable": true
          },
          "GP_JobTitle": {
            "type": "string",
            "nullable": true
          },
          "GP_LocationId": {
            "type": "string",
            "nullable": true
          },
          "GP_DivisionCode": {
            "type": "string",
            "nullable": true
          },
          "GP_EmpId": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "minLength": 1,
            "type": "string",
            "format": "email"
          },
          "UserRoles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserRolesVm"
            },
            "nullable": true
          },
          "AssignedRoles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserRolesVm"
            },
            "nullable": true
          },
          "isActive": {
            "type": "boolean"
          },
          "TwoFactorEnabled": {
            "type": "boolean"
          },
          "Confirmed": {
            "type": "boolean"
          },
          "IsFieldApprover": {
            "type": "boolean"
          },
          "IsPayrollApprover": {
            "type": "boolean"
          },
          "HideFromTimeApproval": {
            "type": "boolean"
          },
          "ForcePasswordReset": {
            "type": "boolean"
          },
          "IsEstimator": {
            "type": "boolean"
          },
          "IsSupervisor": {
            "type": "boolean"
          },
          "PasswordResetExempt": {
            "type": "boolean"
          },
          "ProfilePictureUrl": {
            "type": "string",
            "nullable": true
          },
          "MicrosoftUserId": {
            "type": "string",
            "nullable": true
          },
          "MicrosoftUserPrincipalName": {
            "type": "string",
            "nullable": true
          },
          "CalendarSyncEnabled": {
            "type": "boolean"
          },
          "CalendarVisibleToMasterViewOnly": {
            "type": "boolean"
          },
          "CalendarPrivateForEveryone": {
            "type": "boolean"
          },
          "CalendarHiddenFromNonMasterView": {
            "type": "boolean"
          },
          "UseGeneralCalendar": {
            "type": "boolean"
          },
          "TagAppointmentsWithUserTeams": {
            "type": "boolean"
          },
          "AutoLinkOutlookAppointmentsByJobId": {
            "type": "boolean"
          },
          "OutlookSyncCalendarEventTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AppointmentCount": {
            "type": "integer",
            "description": "Live P2 appointments this user organizes or is assigned to. Independent of an Outlook link.",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "EligibleInvoiceViewModel": {
        "type": "object",
        "properties": {
          "InvoiceId": {
            "type": "integer",
            "description": "The invoice ID",
            "format": "int32"
          },
          "InvoiceNumber": {
            "type": "string",
            "description": "The invoice number",
            "nullable": true
          },
          "InvoiceDate": {
            "type": "string",
            "description": "The invoice date",
            "format": "date-time"
          },
          "InvoiceAmount": {
            "type": "number",
            "description": "The invoice amount",
            "format": "double"
          },
          "RewardAmount": {
            "type": "number",
            "description": "The calculated reward amount for this invoice",
            "format": "double"
          },
          "Description": {
            "type": "string",
            "description": "The invoice description",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for an eligible invoice for loyalty rewards"
      },
      "EmailArStatementRequest": {
        "type": "object",
        "properties": {
          "pdf": {
            "type": "string",
            "nullable": true
          },
          "emails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "body": {
            "type": "string",
            "nullable": true
          },
          "acctName": {
            "type": "string",
            "nullable": true
          },
          "invoiceIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "paymentGuid": {
            "type": "string",
            "nullable": true
          },
          "paymentLink": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EmployeeRequest": {
        "type": "object",
        "properties": {
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "IsDriver": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "EnrollSmsRecipientRequest": {
        "type": "object",
        "properties": {
          "EntityType": {
            "type": "string",
            "nullable": true
          },
          "EntityId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "EntityDocumentEmailVm": {
        "type": "object",
        "properties": {
          "DocIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "Emails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "Subject": {
            "type": "string",
            "nullable": true
          },
          "Body": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EntityDocumentUpdateVm": {
        "type": "object",
        "properties": {
          "Note": {
            "type": "string",
            "nullable": true
          },
          "CustomName": {
            "type": "string",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ExpiryDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "IgnoreExpiry": {
            "type": "boolean",
            "nullable": true
          },
          "ClearExpiryDate": {
            "type": "boolean",
            "description": "When true, clear ExpiryDate (nullable cannot distinguish omit vs clear via JSON alone with defaults)."
          }
        },
        "additionalProperties": false
      },
      "EntityDocumentUploadVm": {
        "type": "object",
        "properties": {
          "Documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FileUploadVm"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EntityDocumentZipRequest": {
        "type": "object",
        "properties": {
          "DocIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EntityPhotoUpdateVm": {
        "type": "object",
        "properties": {
          "Note": {
            "type": "string",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DateTaken": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EntityPhotoUploadVm": {
        "type": "object",
        "properties": {
          "Images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FileUploadVm"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EntityTracking": {
        "required": [
          "Entity",
          "EntityId",
          "EventType"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "Entity": {
            "minLength": 1,
            "type": "string"
          },
          "EntityId": {
            "type": "integer",
            "format": "int32"
          },
          "EventType": {
            "minLength": 1,
            "type": "string"
          },
          "ChangedField": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "OriginalValue": {
            "maxLength": 8000,
            "type": "string",
            "nullable": true
          },
          "NewValue": {
            "maxLength": 8000,
            "type": "string",
            "nullable": true
          },
          "ChangedBy": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "ChangedDate": {
            "type": "string",
            "format": "date-time"
          },
          "Comment": {
            "maxLength": 8000,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EntityTypeMigrationOptions": {
        "type": "object",
        "properties": {
          "MigrateAccounts": {
            "type": "boolean"
          },
          "MigrateJobs": {
            "type": "boolean"
          },
          "MigrateContacts": {
            "type": "boolean"
          },
          "MigrateReferringEntities": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Equipment": {
        "type": "object",
        "properties": {
          "EquipmentId": {
            "type": "integer",
            "format": "int32"
          },
          "EquipmentTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobAreaId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "EquipmentLocationId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "EquipmentDesc": {
            "type": "string",
            "nullable": true
          },
          "ItemNo": {
            "type": "string",
            "nullable": true
          },
          "InService": {
            "type": "boolean"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "EquipmentType": {
            "$ref": "#/components/schemas/EquipmentType"
          },
          "EquipmentLocation": {
            "$ref": "#/components/schemas/EquipmentLocation"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "JobArea": {
            "$ref": "#/components/schemas/JobArea"
          }
        },
        "additionalProperties": false
      },
      "EquipmentLocation": {
        "type": "object",
        "properties": {
          "EquipmentLocationId": {
            "type": "integer",
            "format": "int32"
          },
          "EquipmentLocationDesc": {
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EquipmentType": {
        "type": "object",
        "properties": {
          "EquipmentTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "EquipmentTypeDesc": {
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EspFulfillmentAssignment": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "RequestDayId": {
            "type": "integer",
            "format": "int32"
          },
          "UserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "VehicleDataId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AssignedBy": {
            "type": "string",
            "nullable": true
          },
          "AssignedAt": {
            "type": "string",
            "format": "date-time"
          },
          "RequestDay": {
            "$ref": "#/components/schemas/EspRequestDay"
          },
          "User": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "Vehicle": {
            "$ref": "#/components/schemas/VehicleData"
          }
        },
        "additionalProperties": false
      },
      "EspRequestDay": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "Date": {
            "type": "string",
            "format": "date-time"
          },
          "Status": {
            "type": "string",
            "nullable": true
          },
          "ReadyForReview": {
            "type": "boolean"
          },
          "Notes": {
            "type": "string",
            "nullable": true
          },
          "CreatedDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreatedBy": {
            "type": "string",
            "nullable": true
          },
          "UpdatedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpdatedBy": {
            "type": "string",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "Trucks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EspRequestTruck"
            },
            "nullable": true
          },
          "Resources": {
            "$ref": "#/components/schemas/EspRequestResources"
          },
          "FulfillmentAssignments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EspFulfillmentAssignment"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EspRequestResources": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "RequestDayId": {
            "type": "integer",
            "format": "int32"
          },
          "FansRequested": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "FansFulfilled": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DehumidifiersRequested": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DehumidifiersFulfilled": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AirScrubbersRequested": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AirScrubbersFulfilled": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ExtraText": {
            "type": "string",
            "nullable": true
          },
          "EmployeesRequested": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "EmployeesFulfilled": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TempWorkersRequested": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TempWorkersFulfilled": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ManpowerExtraText": {
            "type": "string",
            "nullable": true
          },
          "RequestDay": {
            "$ref": "#/components/schemas/EspRequestDay"
          }
        },
        "additionalProperties": false
      },
      "EspRequestTruck": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "RequestDayId": {
            "type": "integer",
            "format": "int32"
          },
          "VehicleDataId": {
            "type": "integer",
            "format": "int32"
          },
          "Temps": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ExtraNotes": {
            "type": "string",
            "nullable": true
          },
          "IsFulfilled": {
            "type": "boolean"
          },
          "FulfilledAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "FulfilledBy": {
            "type": "string",
            "nullable": true
          },
          "RequestDay": {
            "$ref": "#/components/schemas/EspRequestDay"
          },
          "Vehicle": {
            "$ref": "#/components/schemas/VehicleData"
          },
          "Employees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EspRequestTruckEmployee"
            },
            "nullable": true
          },
          "Supervisors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EspRequestTruckSupervisor"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "EspRequestTruckEmployee": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "RequestTruckId": {
            "type": "integer",
            "format": "int32"
          },
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "IsDriver": {
            "type": "boolean"
          },
          "RequestTruck": {
            "$ref": "#/components/schemas/EspRequestTruck"
          },
          "User": {
            "$ref": "#/components/schemas/ApplicationUser"
          }
        },
        "additionalProperties": false
      },
      "EspRequestTruckSupervisor": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "RequestTruckId": {
            "type": "integer",
            "format": "int32"
          },
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "RequestTruck": {
            "$ref": "#/components/schemas/EspRequestTruck"
          },
          "User": {
            "$ref": "#/components/schemas/ApplicationUser"
          }
        },
        "additionalProperties": false
      },
      "ExcelFileUpload": {
        "type": "object",
        "properties": {
          "FileName": {
            "type": "string",
            "nullable": true
          },
          "CustomName": {
            "type": "string",
            "nullable": true
          },
          "FileType": {
            "type": "string",
            "nullable": true
          },
          "Bytes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ExternalPaymentRequest": {
        "required": [
          "CreateDate",
          "CreateUser",
          "DateFirstSent",
          "DateLastSent",
          "ExpiresAt",
          "Guid",
          "SentTo",
          "UpdateDate"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "Guid": {
            "minLength": 1,
            "type": "string"
          },
          "SentTo": {
            "minLength": 1,
            "type": "string"
          },
          "MicrodepositVerificationEmail": {
            "type": "string",
            "nullable": true
          },
          "AchMicrodepositPendingAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "AchMicrodepositVerificationUrl": {
            "type": "string",
            "nullable": true
          },
          "AchMicrodepositEmailLastSentAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "PaymentPendingAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "PaymentCompleted": {
            "type": "boolean"
          },
          "PaymentAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "PaymentDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "PaymentMethod": {
            "type": "string",
            "nullable": true
          },
          "StripePaymentIntentId": {
            "type": "string",
            "nullable": true
          },
          "ConfirmationNumber": {
            "type": "string",
            "nullable": true
          },
          "ExpiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "Canceled": {
            "type": "boolean"
          },
          "Invalidated": {
            "type": "boolean"
          },
          "InvalidatedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "InvalidatedReason": {
            "type": "string",
            "nullable": true
          },
          "InvalidatedBy": {
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "minLength": 1,
            "type": "string"
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "DateFirstSent": {
            "type": "string",
            "format": "date-time"
          },
          "DateLastSent": {
            "type": "string",
            "format": "date-time"
          },
          "SendCount": {
            "type": "integer",
            "format": "int32"
          },
          "GeneratedViaManualPayment": {
            "type": "boolean"
          },
          "GpSyncStatus": {
            "type": "string",
            "nullable": true
          },
          "GpReceiptId": {
            "type": "string",
            "nullable": true
          },
          "GpJeNumber": {
            "type": "string",
            "nullable": true
          },
          "JobTrxId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "GpSyncError": {
            "type": "string",
            "nullable": true
          },
          "GpCashReceiptStatus": {
            "type": "string",
            "nullable": true
          },
          "GpCashReceiptId": {
            "type": "string",
            "nullable": true
          },
          "GpCashReceiptError": {
            "type": "string",
            "nullable": true
          },
          "GpCashReceiptRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "GpCashReceiptLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CashReceiptDocumentNumber": {
            "type": "string",
            "nullable": true
          },
          "CashReceiptBatchNumber": {
            "type": "string",
            "nullable": true
          },
          "GlPostingStatus": {
            "type": "string",
            "nullable": true
          },
          "GlTransactionId": {
            "type": "string",
            "nullable": true
          },
          "GlPostingError": {
            "type": "string",
            "nullable": true
          },
          "GlPostingRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "GlPostingLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "GlPostingJournalEntry": {
            "type": "string",
            "nullable": true
          },
          "GlPostingBatchNumber": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionStatus": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionId": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionBatchNumber": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionJeNumber": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionError": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "BankTransactionLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JobTrxStatus": {
            "type": "string",
            "nullable": true
          },
          "JobTrxError": {
            "type": "string",
            "nullable": true
          },
          "JobTrxRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "JobTrxLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JobTrxGpJeStatus": {
            "type": "string",
            "nullable": true
          },
          "JobTrxGpJeNumber": {
            "type": "string",
            "nullable": true
          },
          "JobTrxGpBatchNumber": {
            "type": "string",
            "nullable": true
          },
          "JobTrxGpJeError": {
            "type": "string",
            "nullable": true
          },
          "JobTrxGpJeRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "JobTrxGpJeLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "WaiveCCFee": {
            "type": "boolean"
          },
          "CustomerFeeAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "InternalFeeAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "NetPaymentAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "StripeFeeBreakdown": {
            "type": "string",
            "nullable": true
          },
          "CustomerWasChargedFee": {
            "type": "boolean"
          },
          "Invoices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExternalPaymentRequestInvoice"
            },
            "nullable": true
          },
          "Payments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Payment"
            },
            "description": "Individual payments made against this payment request.\r\nSupports multiple partial payments.",
            "nullable": true
          },
          "IsExpired": {
            "type": "boolean",
            "readOnly": true
          },
          "IsActive": {
            "type": "boolean",
            "readOnly": true
          },
          "IsValidPayment": {
            "type": "boolean",
            "readOnly": true
          },
          "TotalAmount": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "TotalPaidAmount": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "TotalNetPaymentAmount": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "TotalCustomerFees": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "TotalInternalFees": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "RemainingBalance": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "PaymentCount": {
            "type": "integer",
            "format": "int32",
            "readOnly": true
          },
          "MostRecentPaymentDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "readOnly": true
          },
          "HasMultiplePayments": {
            "type": "boolean",
            "readOnly": true
          },
          "IsPartiallyPaid": {
            "type": "boolean",
            "readOnly": true
          },
          "PaidInvoiceCount": {
            "type": "integer",
            "format": "int32",
            "readOnly": true
          },
          "TotalInvoiceCount": {
            "type": "integer",
            "format": "int32",
            "readOnly": true
          },
          "UnpaidInvoices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExternalPaymentRequestInvoice"
            },
            "nullable": true,
            "readOnly": true
          },
          "PaidInvoices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExternalPaymentRequestInvoice"
            },
            "nullable": true,
            "readOnly": true
          },
          "DetailedStatus": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "PaymentProgress": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "PaymentPercentage": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "IsCashReceiptPending": {
            "type": "boolean",
            "readOnly": true
          },
          "IsCashReceiptComplete": {
            "type": "boolean",
            "readOnly": true
          },
          "IsGlPostingPending": {
            "type": "boolean",
            "readOnly": true
          },
          "IsGlPostingComplete": {
            "type": "boolean",
            "readOnly": true
          },
          "IsBankTransactionPending": {
            "type": "boolean",
            "readOnly": true
          },
          "IsBankTransactionComplete": {
            "type": "boolean",
            "readOnly": true
          },
          "IsJobTrxPending": {
            "type": "boolean",
            "readOnly": true
          },
          "IsJobTrxComplete": {
            "type": "boolean",
            "readOnly": true
          },
          "IsJobTrxGpJePending": {
            "type": "boolean",
            "readOnly": true
          },
          "IsJobTrxGpJeComplete": {
            "type": "boolean",
            "readOnly": true
          },
          "HasPendingGpIntegrations": {
            "type": "boolean",
            "readOnly": true
          },
          "AllGpIntegrationsComplete": {
            "type": "boolean",
            "readOnly": true
          },
          "OverallGpStatus": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "FailedGpIntegrations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "CanRetryGpIntegrations": {
            "type": "boolean",
            "readOnly": true
          },
          "HasJobTrxError": {
            "type": "boolean",
            "nullable": true,
            "readOnly": true
          },
          "HasJobTrxGpJeError": {
            "type": "boolean",
            "nullable": true,
            "readOnly": true
          },
          "HasGlPostError": {
            "type": "boolean",
            "nullable": true,
            "readOnly": true
          },
          "HasCashReceiptError": {
            "type": "boolean",
            "nullable": true,
            "readOnly": true
          },
          "HasBankTransactionError": {
            "type": "boolean",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an external payment request that can contain multiple invoices"
      },
      "ExternalPaymentRequestInvoice": {
        "required": [
          "Amount",
          "ArTrxId",
          "CreateDate",
          "CreateUser",
          "ExternalPaymentRequestId"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "ExternalPaymentRequestId": {
            "type": "integer",
            "format": "int32"
          },
          "ArTrxId": {
            "type": "integer",
            "format": "int32"
          },
          "Amount": {
            "type": "number",
            "format": "double"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "minLength": 1,
            "type": "string"
          },
          "PaymentCompleted": {
            "type": "boolean"
          },
          "PaymentAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "PaymentDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "PaymentMethod": {
            "type": "string",
            "nullable": true
          },
          "StripePaymentIntentId": {
            "type": "string",
            "nullable": true
          },
          "PaidViaRequestId": {
            "type": "integer",
            "description": "Which ExternalPaymentRequest actually processed the payment.\r\nThis handles cases where the same invoice appears in multiple requests.",
            "format": "int32",
            "nullable": true
          },
          "PaymentNotes": {
            "type": "string",
            "nullable": true
          },
          "PaymentRequest": {
            "$ref": "#/components/schemas/ExternalPaymentRequest"
          },
          "ArTrxHdr": {
            "$ref": "#/components/schemas/ArTrxHdr"
          },
          "PaymentAllocations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentInvoiceAllocation"
            },
            "description": "Payment allocations - tracks which payments contributed to this invoice",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "readOnly": true
          },
          "TotalAllocatedAmount": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "IsPartiallyPaid": {
            "type": "boolean",
            "readOnly": true
          },
          "RemainingAmount": {
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "PaymentStatus": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "Status": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an individual invoice within an external payment request"
      },
      "FTPRPHeaders": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "GroupDescription": {
            "type": "string",
            "nullable": true
          },
          "Desc": {
            "type": "string",
            "nullable": true
          },
          "ItemAmount": {
            "type": "number",
            "format": "double"
          },
          "UnitCost": {
            "type": "number",
            "format": "double"
          },
          "Unit": {
            "type": "string",
            "nullable": true
          },
          "MaxPayOutAmount": {
            "type": "number",
            "format": "double"
          },
          "AmountPaid": {
            "type": "number",
            "format": "double"
          },
          "AmountRemaining": {
            "type": "number",
            "format": "double"
          },
          "PercentComplete": {
            "type": "number",
            "format": "double"
          },
          "XactimateLineNumber": {
            "type": "string",
            "nullable": true
          },
          "XactimateIdentifier": {
            "type": "string",
            "nullable": true
          },
          "JobElementPhaseId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "JobElementPhase": {
            "$ref": "#/components/schemas/JobElementPhase"
          },
          "FTPRPLines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FTPRPLines"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "FTPRPLines": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "HeaderId": {
            "type": "integer",
            "format": "int32"
          },
          "TechnicianName": {
            "type": "string",
            "nullable": true
          },
          "UserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "PercentComplete": {
            "type": "number",
            "format": "double"
          },
          "AmountPaid": {
            "type": "number",
            "format": "double"
          },
          "DatePaid": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Reviewed": {
            "type": "boolean"
          },
          "Approved": {
            "type": "boolean"
          },
          "ReviewedBy": {
            "type": "string",
            "nullable": true
          },
          "ApprovedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ApprovedByUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "GpJeNumber": {
            "type": "string",
            "nullable": true
          },
          "SuccessMessage": {
            "type": "string",
            "nullable": true
          },
          "LinkedToGp": {
            "type": "integer",
            "format": "int32"
          },
          "DateOfWork": {
            "type": "string",
            "format": "date-time"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "FTPRPHeaders": {
            "$ref": "#/components/schemas/FTPRPHeaders"
          }
        },
        "additionalProperties": false
      },
      "FieldDocumentationDay": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "Date": {
            "type": "string",
            "format": "date-time"
          },
          "MeetWithLeadTechOrPM": {
            "type": "boolean"
          },
          "WalkSiteDocumentConditions": {
            "type": "boolean"
          },
          "PhotographEquipmentInPlace": {
            "type": "boolean"
          },
          "PhotographVehiclesOnSite": {
            "type": "boolean"
          },
          "LogInitialPersonnel": {
            "type": "boolean"
          },
          "PersonnelLogName": {
            "type": "boolean"
          },
          "PersonnelLogLaborClassification": {
            "type": "boolean"
          },
          "PersonnelLogClockIn": {
            "type": "boolean"
          },
          "UpdatePhotosNewEquipment": {
            "type": "boolean"
          },
          "LogNewArrivals": {
            "type": "boolean"
          },
          "DocumentConsumables": {
            "type": "boolean"
          },
          "TakeInProgressPhotos": {
            "type": "boolean"
          },
          "FinalizePersonnelRoster": {
            "type": "boolean"
          },
          "RecordVehicleMileLogs": {
            "type": "boolean"
          },
          "RecordEquipmentDurations": {
            "type": "boolean"
          },
          "RecordDurationDehumidifiers": {
            "type": "boolean"
          },
          "RecordDurationAirMovers": {
            "type": "boolean"
          },
          "RecordDurationAirScrubbers": {
            "type": "boolean"
          },
          "RecordDurationGenerators": {
            "type": "boolean"
          },
          "RecordDurationExtractorsPumps": {
            "type": "boolean"
          },
          "DocumentSpecialOps": {
            "type": "boolean"
          },
          "CapturePhotos": {
            "type": "boolean"
          },
          "PhotoSiteCondition": {
            "type": "boolean"
          },
          "PhotoActiveInactiveEquipment": {
            "type": "boolean"
          },
          "PhotoConsumableWaste": {
            "type": "boolean"
          },
          "ScanPhysicalReceipts": {
            "type": "boolean"
          },
          "UploadToP2": {
            "type": "boolean"
          },
          "UploadLabeledPhotos": {
            "type": "boolean"
          },
          "UploadSupplyEquipmentChecklist": {
            "type": "boolean"
          },
          "UploadPersonnelLog": {
            "type": "boolean"
          },
          "UploadFleetLog": {
            "type": "boolean"
          },
          "UploadThisChecklist": {
            "type": "boolean"
          },
          "UploadSpecialNotes": {
            "type": "boolean"
          },
          "Notes": {
            "type": "string",
            "nullable": true
          },
          "SignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "SignatureDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "SignedBy": {
            "type": "string",
            "nullable": true
          },
          "SignedByUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "CreatedDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreatedBy": {
            "type": "string",
            "nullable": true
          },
          "UpdatedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpdatedBy": {
            "type": "string",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          }
        },
        "additionalProperties": false
      },
      "FileUploadVm": {
        "type": "object",
        "properties": {
          "Bytes": {
            "type": "string",
            "nullable": true
          },
          "FileType": {
            "type": "string",
            "nullable": true
          },
          "FileName": {
            "type": "string",
            "nullable": true
          },
          "CustomName": {
            "type": "string",
            "nullable": true
          },
          "Note": {
            "type": "string",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobAreaId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "LetterType": {
            "type": "string",
            "nullable": true
          },
          "DocumentId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DateTaken": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ExpiryDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "IgnoreExpiry": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "FlooringType": {
        "type": "object",
        "properties": {
          "FlooringTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "FlooringTypeDesc": {
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ForgotPasswordViewModel": {
        "required": [
          "Email"
        ],
        "type": "object",
        "properties": {
          "Email": {
            "minLength": 1,
            "type": "string",
            "format": "email"
          },
          "Username": {
            "type": "string",
            "nullable": true
          },
          "Environment": {
            "type": "string",
            "nullable": true
          },
          "CompanyNameLong": {
            "type": "string",
            "nullable": true
          },
          "CompanyLogo": {
            "type": "string",
            "nullable": true
          },
          "IsForceReset": {
            "type": "boolean"
          },
          "IsInvalidUser": {
            "type": "boolean"
          },
          "IsPasswordExpired": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "FulfillmentRequest": {
        "type": "object",
        "properties": {
          "UserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "VehicleDataId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GeocodeMissingRequest": {
        "type": "object",
        "properties": {
          "Take": {
            "type": "integer",
            "format": "int32"
          },
          "OpenJobAddressesOnly": {
            "type": "boolean",
            "description": "When true, only geocode AddressV2 rows currently used as the job address for open jobs."
          },
          "DelayMilliseconds": {
            "type": "integer",
            "description": "Optional delay between batches to prevent hitting API rate limits.",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Hobby": {
        "type": "object",
        "properties": {
          "HobbyId": {
            "type": "integer",
            "description": "Primary key.",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "type": "string",
            "description": "Description of the hobby.",
            "nullable": true
          },
          "InActive": {
            "type": "boolean",
            "description": "Flag indicating soft-deletion (inactive)."
          },
          "CreateDate": {
            "type": "string",
            "description": "Date the record was created.",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "description": "User who created the record.",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "description": "Date the record was last updated.",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "description": "User who last updated the record.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Domain model representing a Hobby."
      },
      "HurricaneScopeSheet": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "WorkAreaDescription": {
            "type": "string",
            "nullable": true
          },
          "CondoUnits": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "FloorsAffected": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SqftAffected": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "LaborDay1": {
            "type": "string",
            "nullable": true
          },
          "LaborDay2": {
            "type": "string",
            "nullable": true
          },
          "LaborDay3": {
            "type": "string",
            "nullable": true
          },
          "FansCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DehumidifiersCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AirScrubbersCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ElectricityOn": {
            "type": "boolean",
            "nullable": true
          },
          "NeedsGenerator": {
            "type": "boolean",
            "nullable": true
          },
          "GeneratorSizeKw": {
            "type": "string",
            "nullable": true
          },
          "GeneratorDistanceFeet": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DesiccantRequested": {
            "type": "boolean",
            "nullable": true
          },
          "DesiccantSqft": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DesiccantCeilingHeight": {
            "type": "string",
            "nullable": true
          },
          "ExtractionNeeded": {
            "type": "boolean",
            "nullable": true
          },
          "TruckMount": {
            "type": "boolean",
            "nullable": true
          },
          "PortableExtractorsCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ElevatorsInService": {
            "type": "boolean",
            "nullable": true
          },
          "ElevatorsPumpAndClean": {
            "type": "boolean",
            "nullable": true
          },
          "DumpsterNeeded": {
            "type": "boolean",
            "nullable": true
          },
          "DebrisPileForCleanup": {
            "type": "boolean",
            "nullable": true
          },
          "DebrisLocation": {
            "type": "string",
            "nullable": true
          },
          "ContentsDisposalRequested": {
            "type": "boolean",
            "nullable": true
          },
          "ContentsDisposalDescription": {
            "type": "string",
            "nullable": true
          },
          "DemolitionNeeded": {
            "type": "boolean",
            "nullable": true
          },
          "DemolitionDescription": {
            "type": "string",
            "nullable": true
          },
          "SignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "SignatureDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "SignedBy": {
            "type": "string",
            "nullable": true
          },
          "SignedByUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "CreatedDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreatedBy": {
            "type": "string",
            "nullable": true
          },
          "UpdatedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpdatedBy": {
            "type": "string",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          }
        },
        "additionalProperties": false
      },
      "ImportEntityViewModel": {
        "type": "object",
        "properties": {
          "ReferringEntityId": {
            "type": "integer",
            "description": "The referring entity ID",
            "format": "int32",
            "nullable": true
          },
          "FullName": {
            "type": "string",
            "description": "The full name",
            "nullable": true
          },
          "EntityType": {
            "type": "string",
            "description": "The entity type",
            "nullable": true
          },
          "IsNew": {
            "type": "boolean",
            "description": "Whether this is a new entity"
          }
        },
        "additionalProperties": false,
        "description": "View model for import entities"
      },
      "ImportOptions": {
        "type": "object",
        "properties": {
          "CommissionPercentage": {
            "type": "number",
            "description": "The commission percentage",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Options for import operations"
      },
      "ImportPreviewViewModel": {
        "type": "object",
        "properties": {
          "Entities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportEntityViewModel"
            },
            "description": "The list of entities to import",
            "nullable": true
          },
          "Relationships": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ImportRelationshipViewModel"
            },
            "description": "The list of relationships to import",
            "nullable": true
          },
          "Statistics": {
            "$ref": "#/components/schemas/ImportStatisticsViewModel"
          },
          "Warnings": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The list of warnings",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for import preview"
      },
      "ImportRelationshipViewModel": {
        "type": "object",
        "properties": {
          "ParentEntityId": {
            "type": "integer",
            "description": "The parent entity ID",
            "format": "int32"
          },
          "ChildEntityId": {
            "type": "integer",
            "description": "The child entity ID",
            "format": "int32"
          },
          "RelationshipType": {
            "type": "string",
            "description": "The relationship type",
            "nullable": true
          },
          "CommissionPercentage": {
            "type": "number",
            "description": "The commission percentage",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for import relationships"
      },
      "ImportRequest": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "description": "The job ID",
            "format": "int32"
          },
          "EntityId": {
            "type": "integer",
            "description": "The entity ID to import",
            "format": "int32"
          },
          "Options": {
            "$ref": "#/components/schemas/ImportOptions"
          }
        },
        "additionalProperties": false,
        "description": "Request model for importing entities"
      },
      "ImportResultViewModel": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean",
            "description": "Whether the import was successful"
          },
          "Message": {
            "type": "string",
            "description": "The result message",
            "nullable": true
          },
          "ImportedEntities": {
            "type": "integer",
            "description": "The number of imported entities",
            "format": "int32"
          },
          "ImportedRelationships": {
            "type": "integer",
            "description": "The number of imported relationships",
            "format": "int32"
          },
          "Errors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The list of errors",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for import results"
      },
      "ImportStatisticsViewModel": {
        "type": "object",
        "properties": {
          "TotalEntities": {
            "type": "integer",
            "description": "The total number of entities",
            "format": "int32"
          },
          "NewEntities": {
            "type": "integer",
            "description": "The number of new entities",
            "format": "int32"
          },
          "ExistingEntities": {
            "type": "integer",
            "description": "The number of existing entities",
            "format": "int32"
          },
          "TotalRelationships": {
            "type": "integer",
            "description": "The total number of relationships",
            "format": "int32"
          },
          "NewRelationships": {
            "type": "integer",
            "description": "The number of new relationships",
            "format": "int32"
          },
          "EstimatedCommission": {
            "type": "number",
            "description": "The estimated commission",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "View model for import statistics"
      },
      "IntegrationLog": {
        "required": [
          "GpKey",
          "GpType",
          "P2Key",
          "P2Type",
          "TrxDirection"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "P2Type": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string",
            "description": "Account, JobTrx"
          },
          "GpType": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string",
            "description": "Je, RmTransaction, Customer"
          },
          "P2Key": {
            "type": "integer",
            "format": "int32"
          },
          "GpKey": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TrxDirection": {
            "maxLength": 21,
            "minLength": 1,
            "type": "string",
            "description": "ToGp, ToP2"
          },
          "Status": {
            "type": "integer",
            "format": "int32"
          },
          "Message": {
            "maxLength": 8000,
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InvalidatePaymentRequestModel": {
        "required": [
          "Reason"
        ],
        "type": "object",
        "properties": {
          "Reason": {
            "minLength": 1,
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "JToken": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/JToken"
        }
      },
      "Job": {
        "required": [
          "JobAccountId",
          "JobName",
          "JobTypeId"
        ],
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "JobIdString": {
            "type": "string",
            "nullable": true
          },
          "JobName": {
            "maxLength": 101,
            "minLength": 1,
            "type": "string"
          },
          "JobStartDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JobEndDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JobCloseDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "LastDayOfWork": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "LienDate": {
            "type": "string",
            "description": "Lien due date — auto-set to LastDayOfWork + 90 days when Last Day of Work is entered/updated.",
            "format": "date-time",
            "nullable": true
          },
          "JobAccountId": {
            "type": "integer",
            "format": "int32"
          },
          "JobAddressId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BillAccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringAccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BillAddressId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BillAddressIdV2": {
            "type": "integer",
            "description": "The V2 billing address ID.",
            "format": "int32",
            "nullable": true
          },
          "JobAddressIdV2": {
            "type": "integer",
            "description": "The V2 job address ID.",
            "format": "int32",
            "nullable": true
          },
          "JobAddressType": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobAddress1": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "JobAddress2": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "JobCity": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobState": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobCounty": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobCountry": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobZip": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "JobPhone1": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobPhone1Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "JobPhone2": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobPhone2Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "JobEmail": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillAddressType": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillAddress1": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "BillAddress2": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "BillCity": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillState": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillCounty": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillCountry": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillZip": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "BillPhone1": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "BillPhone1Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "BillPhone2": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "BillPhone2Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "BillEmail": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "JobSubTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "JobStatusId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DivisionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TeamId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BusDevUser": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "ReceivedById": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReportedById": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AdSourceId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferredContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "LossDescriptionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "LossInstructionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "LossDirectionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SpecialBillingInstructionsId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "Reconciled": {
            "type": "boolean"
          },
          "Signed": {
            "type": "boolean"
          },
          "Signature": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "Reviewed": {
            "type": "boolean"
          },
          "Closed": {
            "type": "boolean"
          },
          "IsSelfPay": {
            "type": "boolean"
          },
          "FullyPaid": {
            "type": "boolean",
            "default": true
          },
          "VerbalAuth": {
            "type": "boolean"
          },
          "AccountingAuth": {
            "type": "boolean"
          },
          "ThirtyDayNoticeSent": {
            "type": "boolean"
          },
          "LienLetterSent": {
            "type": "boolean"
          },
          "StartAfter5PM": {
            "type": "boolean"
          },
          "NTOSent": {
            "type": "boolean"
          },
          "ThirtyDayLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "ClaimOfLienLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "ClaimOfLienCoverLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "SatisfactionOfLienLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "ConditionalWaiverOfLienLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "ContractorFinalPaymentLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "CertOfSatisfactionLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "LegalDemandWithInterestLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "LegalDemandNoInterestLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "RefusalAndReleaseLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "NoticeToOwnerCoverLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "NoticeToOwnerLetterUrl": {
            "type": "string",
            "nullable": true
          },
          "DateNoticeToOwnerLetterSent": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "WorkAuthUndersignedName": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthUndersignedRole": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthAddress": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthInsuranceCo": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthMortgage": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthFSDKRepName": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthRespPartyDesc": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthFSDKRepDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "WorkAuthUndersignedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "WorkAuthUndersignedSignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthFSDKRepSignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "UseSecondaryWorkAuth": {
            "type": "boolean"
          },
          "ForceUseSecondaryAuth": {
            "type": "boolean"
          },
          "InsuranceCompanyId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InsuranceClaimNum": {
            "type": "string",
            "nullable": true
          },
          "TpaCompanyId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "PolicyHolderId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AdjustingCompanyId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AdjusterId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ActualRev": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "LoyaltyRewardsIssuedThroughActualRev": {
            "type": "number",
            "description": "Tracks how much ActualRev has already earned loyalty rewards to keep issuance idempotent.",
            "format": "double",
            "nullable": true
          },
          "ActualPay": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "ActualCost": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "EstJobCost": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "EstJobRev": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "DateSigned": {
            "type": "string",
            "description": "Signatures",
            "format": "date-time",
            "nullable": true
          },
          "SignaturePath": {
            "type": "string",
            "nullable": true
          },
          "ReasonCodeId": {
            "type": "integer",
            "description": "ReasonCode",
            "format": "int32",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "description": "Auditing",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "WarmTransferPerformed": {
            "type": "boolean",
            "description": "ESP"
          },
          "NotesAndPaperworkComplete": {
            "type": "boolean"
          },
          "HasDigitalPhotos": {
            "type": "boolean"
          },
          "HasThermalPhotos": {
            "type": "boolean"
          },
          "DateOfLastNote": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "MostRecentNotes": {
            "type": "string",
            "nullable": true
          },
          "CommissionPeriodId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ClosingPeriod": {
            "type": "string",
            "description": "Commission period name last written when CommissionPeriodId was set to a period.\r\nReopen clears the id and leaves this name. A later close replaces it.",
            "nullable": true
          },
          "ClosingPeriodStartDate": {
            "type": "string",
            "description": "Display-only range from CommissionPeriods. Not stored on the job.",
            "format": "date-time",
            "nullable": true
          },
          "ClosingPeriodEndDate": {
            "type": "string",
            "description": "Display-only range from CommissionPeriods. Not stored on the job.",
            "format": "date-time",
            "nullable": true
          },
          "JobInspectionDate": {
            "type": "string",
            "description": "TimeLine Fields",
            "format": "date-time",
            "nullable": true
          },
          "EstimateSentDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "EstimatedCompletionDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "DispatchTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ArrivalTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CallTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "IsScheduled": {
            "type": "boolean"
          },
          "Xactimate": {
            "type": "boolean",
            "description": "Xactimate Fields"
          },
          "XactimateDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Project": {
            "$ref": "#/components/schemas/Project"
          },
          "JobContact": {
            "$ref": "#/components/schemas/Contact"
          },
          "JobAccount": {
            "$ref": "#/components/schemas/Account"
          },
          "JobAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "BillAccount": {
            "$ref": "#/components/schemas/Account"
          },
          "ReferringAccount": {
            "$ref": "#/components/schemas/Account"
          },
          "BillAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "JobType": {
            "$ref": "#/components/schemas/JobType"
          },
          "JobSubType": {
            "$ref": "#/components/schemas/SubJobType"
          },
          "JobStatus": {
            "$ref": "#/components/schemas/JobStatus"
          },
          "Division": {
            "$ref": "#/components/schemas/Division"
          },
          "Team": {
            "$ref": "#/components/schemas/Team"
          },
          "ReceivedBy": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "ReportedBy": {
            "$ref": "#/components/schemas/Contact"
          },
          "AdSource": {
            "$ref": "#/components/schemas/AdSource"
          },
          "ReferredContact": {
            "$ref": "#/components/schemas/Contact"
          },
          "InsuranceCompany": {
            "$ref": "#/components/schemas/Account"
          },
          "TpaCompany": {
            "$ref": "#/components/schemas/Account"
          },
          "PolicyHolder": {
            "$ref": "#/components/schemas/Account"
          },
          "AdjustingCompany": {
            "$ref": "#/components/schemas/Account"
          },
          "Adjuster": {
            "$ref": "#/components/schemas/Contact"
          },
          "JobEstimator": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "LossDescription": {
            "$ref": "#/components/schemas/Note"
          },
          "LossInstructions": {
            "$ref": "#/components/schemas/Note"
          },
          "LossDirections": {
            "$ref": "#/components/schemas/Note"
          },
          "SpecialBillingInstructions": {
            "$ref": "#/components/schemas/Note"
          },
          "JobEstimate": {
            "$ref": "#/components/schemas/JobEstimate"
          },
          "ProjectJobs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectJob"
            },
            "nullable": true
          },
          "ReasonCode": {
            "$ref": "#/components/schemas/ReasonCode"
          },
          "CommissionPeriod": {
            "$ref": "#/components/schemas/CommissionPeriod"
          },
          "JobAreas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobArea"
            },
            "nullable": true
          },
          "JobReferrals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobReferrals"
            },
            "description": "Job-specific referral relationships for this job",
            "nullable": true
          },
          "FTPRPComplete": {
            "type": "boolean"
          },
          "JobEstimatorId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "NoEstimateProvided": {
            "type": "boolean"
          },
          "NoEstimateReasonCodeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "NoEstimateProvidedReason": {
            "type": "string",
            "nullable": true
          },
          "InactivationReasonCodeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InactivationReasonOther": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JobArea": {
        "type": "object",
        "properties": {
          "JobAreaId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "AreaId": {
            "type": "integer",
            "format": "int32"
          },
          "FlooringTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobAreaCustomDesc": {
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "Length": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "Width": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "Height": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "CubicArea": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "AreaWaterExtraction": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "AreaFlooringRemoval": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "AreaUnderlaymentRemoval": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "AreaAntiMicrobialSprayed": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "TrimRemovalLinealFeet": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "PhotoCount": {
            "type": "integer",
            "format": "int32"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "Area": {
            "$ref": "#/components/schemas/Area"
          },
          "FlooringType": {
            "$ref": "#/components/schemas/FlooringType"
          },
          "Equipment": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Equipment"
            },
            "nullable": true
          },
          "Photos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobPhotos"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JobContact": {
        "type": "object",
        "properties": {
          "JobContactId": {
            "type": "integer",
            "format": "int32"
          },
          "ContactId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "JobContactCustomDesc": {
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "LimitEdits": {
            "type": "boolean"
          },
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          }
        },
        "additionalProperties": false
      },
      "JobDocuments": {
        "type": "object",
        "properties": {
          "DocId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "OutlookEventId": {
            "maxLength": 512,
            "type": "string",
            "nullable": true
          },
          "SeriesICalUId": {
            "maxLength": 512,
            "type": "string",
            "nullable": true
          },
          "UriString": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "FullUrl": {
            "type": "string",
            "nullable": true
          },
          "Note": {
            "maxLength": 8000,
            "type": "string",
            "nullable": true
          },
          "Filetype": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "IsDeleted": {
            "type": "boolean"
          },
          "CustomName": {
            "type": "string",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SignerName": {
            "type": "string",
            "nullable": true
          },
          "SignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "RepSignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "RepSignerName": {
            "type": "string",
            "nullable": true
          },
          "SignatureDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "RepSignatureDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JsonData": {
            "type": "string",
            "nullable": true
          },
          "InHoldingState": {
            "type": "boolean"
          },
          "IsLetter": {
            "type": "boolean"
          },
          "IsSigned": {
            "type": "boolean"
          },
          "ExpiryDate": {
            "type": "string",
            "description": "Optional expiry for agreement-style documents (e.g. Service Agreement).",
            "format": "date-time",
            "nullable": true
          },
          "IgnoreExpiry": {
            "type": "boolean",
            "description": "When true, ExpiryDate is not required / not enforced for this document."
          },
          "CreateDate": {
            "type": "string",
            "description": "Auditing",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Category": {
            "$ref": "#/components/schemas/Category"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "Project": {
            "$ref": "#/components/schemas/Project"
          },
          "Account": {
            "$ref": "#/components/schemas/Account"
          },
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          },
          "ReferringEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          }
        },
        "additionalProperties": false
      },
      "JobElement": {
        "required": [
          "JobElementCode",
          "JobElementDesc",
          "JobElementUofM"
        ],
        "type": "object",
        "properties": {
          "JobElementId": {
            "type": "integer",
            "format": "int32"
          },
          "JobElementDesc": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "JobElementCode": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "JobElementUofM": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobElementPhases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobElementPhase"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JobElementPhase": {
        "required": [
          "JobElementId",
          "JobPhaseId"
        ],
        "type": "object",
        "properties": {
          "JobElementPhaseId": {
            "type": "integer",
            "format": "int32"
          },
          "JobElementId": {
            "type": "integer",
            "format": "int32"
          },
          "JobPhaseId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "EstimatedProfitMargin": {
            "type": "number",
            "format": "double"
          },
          "Element": {
            "$ref": "#/components/schemas/JobElement"
          },
          "Phase": {
            "$ref": "#/components/schemas/JobPhase"
          }
        },
        "additionalProperties": false
      },
      "JobEstimate": {
        "type": "object",
        "properties": {
          "JobEstimateId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobEstimatePhases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobEstimatePhase"
            },
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          }
        },
        "additionalProperties": false
      },
      "JobEstimatePhase": {
        "type": "object",
        "properties": {
          "JobEstimatePhaseId": {
            "type": "integer",
            "format": "int32"
          },
          "JobEstimateId": {
            "type": "integer",
            "format": "int32"
          },
          "JobElementPhaseId": {
            "type": "integer",
            "format": "int32"
          },
          "CostQty": {
            "type": "number",
            "format": "double"
          },
          "CostUnit": {
            "type": "number",
            "format": "double"
          },
          "CostExt": {
            "type": "number",
            "format": "double"
          },
          "RevenueQty": {
            "type": "number",
            "format": "double"
          },
          "RevenueUnit": {
            "type": "number",
            "format": "double"
          },
          "RevenueExt": {
            "type": "number",
            "format": "double"
          },
          "EstimatedProfitMarginPercent": {
            "type": "number",
            "format": "double"
          },
          "EstimatedProfitMarginAmount": {
            "type": "number",
            "format": "double"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobElementPhase": {
            "$ref": "#/components/schemas/JobElementPhase"
          },
          "JobEstimate": {
            "$ref": "#/components/schemas/JobEstimate"
          }
        },
        "additionalProperties": false
      },
      "JobEstimatePhaseVm": {
        "type": "object",
        "properties": {
          "JobEstimatePhase": {
            "$ref": "#/components/schemas/JobEstimatePhase"
          },
          "Change": {
            "$ref": "#/components/schemas/EntityTracking"
          }
        },
        "additionalProperties": false
      },
      "JobInfoViewModel": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "description": "The job ID",
            "format": "int32"
          },
          "JobName": {
            "type": "string",
            "description": "The job name",
            "nullable": true
          },
          "JobStatus": {
            "type": "string",
            "description": "The job status",
            "nullable": true
          },
          "TotalReferringAccounts": {
            "type": "integer",
            "description": "The total number of referring accounts",
            "format": "int32"
          },
          "TotalRevenueCredit": {
            "type": "number",
            "description": "The total revenue credit",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "View model for job information in chart"
      },
      "JobPhase": {
        "required": [
          "JobPhaseCode",
          "JobPhaseDesc"
        ],
        "type": "object",
        "properties": {
          "JobPhaseId": {
            "type": "integer",
            "format": "int32"
          },
          "JobPhaseDesc": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "JobPhaseCode": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobElementPhases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobElementPhase"
            },
            "nullable": true
          },
          "XactimateMappings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/XactimateMapping"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JobPhotos": {
        "type": "object",
        "properties": {
          "PhotoId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "UriString": {
            "maxLength": 255,
            "type": "string",
            "nullable": true
          },
          "Note": {
            "maxLength": 8000,
            "type": "string",
            "nullable": true
          },
          "IsDeleted": {
            "type": "boolean"
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobAreaId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "OutlookEventId": {
            "maxLength": 512,
            "type": "string",
            "nullable": true
          },
          "SeriesICalUId": {
            "maxLength": 512,
            "type": "string",
            "nullable": true
          },
          "DateTaken": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "description": "Auditing",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Category": {
            "$ref": "#/components/schemas/Category"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "Project": {
            "$ref": "#/components/schemas/Project"
          },
          "Account": {
            "$ref": "#/components/schemas/Account"
          },
          "Contact": {
            "$ref": "#/components/schemas/Contact"
          },
          "ReferringEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "JobArea": {
            "$ref": "#/components/schemas/JobArea"
          }
        },
        "additionalProperties": false
      },
      "JobReferralChartViewModel": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "description": "The job ID",
            "format": "int32"
          },
          "Nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChartNodeViewModel"
            },
            "description": "The list of chart nodes",
            "nullable": true
          },
          "Edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChartEdgeViewModel"
            },
            "description": "The list of chart edges",
            "nullable": true
          },
          "Initial": {
            "type": "string",
            "description": "The initial node ID",
            "nullable": true
          },
          "JobInfo": {
            "$ref": "#/components/schemas/JobInfoViewModel"
          },
          "Version": {
            "type": "string",
            "description": "Version for concurrency control",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for job referral chart"
      },
      "JobReferralHierarchyViewModel": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "description": "The job ID",
            "format": "int32"
          },
          "JobNumber": {
            "type": "string",
            "description": "The job number",
            "nullable": true
          },
          "JobDescription": {
            "type": "string",
            "description": "The job description",
            "nullable": true
          },
          "Accounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferralAccountViewModel"
            },
            "description": "The list of referral accounts",
            "nullable": true
          },
          "RevenueSummary": {
            "$ref": "#/components/schemas/RevenueSummaryViewModel"
          },
          "Statistics": {
            "$ref": "#/components/schemas/ReferralStatisticsViewModel"
          }
        },
        "additionalProperties": false,
        "description": "View model for job referral hierarchy"
      },
      "JobReferrals": {
        "required": [
          "ChildEntityId",
          "JobId",
          "RelationshipType"
        ],
        "type": "object",
        "properties": {
          "JobReferralId": {
            "type": "integer",
            "description": "Primary key for the job referral relationship",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "description": "Job this relationship belongs to - indexed for fast job queries",
            "format": "int32"
          },
          "ParentEntityId": {
            "type": "integer",
            "description": "Parent entity in the relationship - indexed for fast parent->child queries\r\nCan be null for root assignments (initial entity assignments to jobs)",
            "format": "int32",
            "nullable": true
          },
          "ChildEntityId": {
            "type": "integer",
            "description": "Child entity in the relationship - indexed for fast child->parent queries",
            "format": "int32"
          },
          "RelationshipType": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string",
            "description": "Type of relationship - indexed for filtering\r\n- \"Parent-Child\": Standard hierarchical relationship\r\n- \"Referral-Chain\": One entity refers business to another\r\n- \"Custom\": Job-specific relationship not in global hierarchy"
          },
          "CommissionPercentage": {
            "maximum": 100,
            "minimum": 0,
            "type": "number",
            "description": "Commission sharing percentage for this relationship (0-100)\r\nCan override global relationship commission settings",
            "format": "double",
            "nullable": true
          },
          "IsRewardBeneficiary": {
            "type": "boolean",
            "description": "Indicates if this is the reward beneficiary for the job\r\nOnly one per job can be true"
          },
          "ChannelId": {
            "type": "integer",
            "description": "Snapshot of the child referring entity's Channel at assignment time.",
            "format": "int32",
            "nullable": true
          },
          "SubChannelId": {
            "type": "integer",
            "description": "Snapshot of the child referring entity's SubChannel at assignment time.",
            "format": "int32",
            "nullable": true
          },
          "CreatedDate": {
            "type": "string",
            "description": "Date when this record was created",
            "format": "date-time"
          },
          "CreatedBy": {
            "maxLength": 31,
            "type": "string",
            "description": "User who created this record",
            "nullable": true
          },
          "ModifiedDate": {
            "type": "string",
            "description": "Date when this record was last modified",
            "format": "date-time"
          },
          "ModifiedBy": {
            "maxLength": 31,
            "type": "string",
            "description": "User who last modified this record",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "ParentEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "ChildEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "Channel": {
            "$ref": "#/components/schemas/Channel"
          },
          "SubChannel": {
            "$ref": "#/components/schemas/SubChannel"
          },
          "IsActive": {
            "type": "boolean",
            "description": "Fast active check - always true since no InActive field",
            "readOnly": true
          },
          "RelationshipDescription": {
            "type": "string",
            "description": "Cached relationship description for display",
            "nullable": true,
            "readOnly": true
          },
          "IsCustomRelationship": {
            "type": "boolean",
            "description": "Check if this is a custom relationship (always true since no import tracking)",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Job-specific referral relationships that can be customized per job\r\nSupports importing from global ReferringEntity relationships\r\nStores hierarchical relationships between referring entities within a job context"
      },
      "JobRevenueVm": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "EstRevenue": {
            "type": "number",
            "format": "double"
          },
          "ActRevenue": {
            "type": "number",
            "format": "double"
          },
          "IsPaid": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "JobSmsVehicleEtaRequest": {
        "type": "object",
        "properties": {
          "UserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "VehicleDataIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JobStatus": {
        "required": [
          "JobStatusDesc",
          "JobTypeId",
          "Sequence"
        ],
        "type": "object",
        "properties": {
          "JobStatusId": {
            "type": "integer",
            "format": "int32"
          },
          "JobStatusDesc": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "Sequence": {
            "type": "integer",
            "format": "int32"
          },
          "JobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobType": {
            "$ref": "#/components/schemas/JobType"
          }
        },
        "additionalProperties": false
      },
      "JobTrxApprovalVm": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobName": {
            "type": "string",
            "nullable": true
          },
          "TrxId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TrxTotal": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "TrxDesc": {
            "type": "string",
            "nullable": true
          },
          "TrxDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Submitted": {
            "type": "boolean"
          },
          "SubmittedServerStatus": {
            "type": "boolean"
          },
          "Approved": {
            "type": "boolean"
          },
          "ApprovedServerStatus": {
            "type": "boolean"
          },
          "JobIsActive": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "JobTrxHdr": {
        "required": [
          "JobId"
        ],
        "type": "object",
        "properties": {
          "TrxId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "GpJeNumber": {
            "type": "integer",
            "format": "int32"
          },
          "TrxDate": {
            "type": "string",
            "format": "date-time"
          },
          "TrxDesc": {
            "type": "string",
            "nullable": true
          },
          "TrxTotal": {
            "type": "number",
            "format": "double"
          },
          "Approved": {
            "type": "boolean"
          },
          "Submitted": {
            "type": "boolean"
          },
          "IsServiceFee": {
            "type": "boolean"
          },
          "Reconciled": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "Lines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobTrxLine"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JobTrxHdrVm": {
        "required": [
          "JobId"
        ],
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "TrxDesc": {
            "type": "string",
            "nullable": true
          },
          "Revenue": {
            "type": "number",
            "format": "double"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JobTrxLine": {
        "required": [
          "TrxId"
        ],
        "type": "object",
        "properties": {
          "TrxLineId": {
            "type": "integer",
            "format": "int32"
          },
          "TrxId": {
            "type": "integer",
            "format": "int32"
          },
          "LineSeq": {
            "type": "integer",
            "format": "int32"
          },
          "ElementCode": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "PhaseCode": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "ElementPhaseId": {
            "type": "integer",
            "format": "int32"
          },
          "Amount": {
            "type": "number",
            "format": "double"
          },
          "LineDescription": {
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobElementPhase": {
            "$ref": "#/components/schemas/JobElementPhase"
          },
          "Header": {
            "$ref": "#/components/schemas/JobTrxHdr"
          }
        },
        "additionalProperties": false
      },
      "JobType": {
        "required": [
          "JobTypeDesc"
        ],
        "type": "object",
        "properties": {
          "JobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "JobTypeDesc": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "JobTypeCode": {
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "FeePercentage": {
            "type": "number",
            "format": "double"
          },
          "CreditCardFeePercentage": {
            "type": "number",
            "format": "double"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "SubJobTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubJobType"
            },
            "nullable": true
          },
          "ParentJobTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobTypeDependency"
            },
            "nullable": true
          },
          "ChildJobTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobTypeDependency"
            },
            "nullable": true
          },
          "JobStatuses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobStatus"
            },
            "nullable": true
          },
          "JobTypeElementPhases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobTypeElementPhase"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JobTypeDependency": {
        "required": [
          "ChildDefaultJobSubTypeId",
          "ChildJobTypeId",
          "ParentJobTypeId"
        ],
        "type": "object",
        "properties": {
          "JobTypeDependencyId": {
            "type": "integer",
            "format": "int32"
          },
          "ParentJobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "ChildJobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "ChildDefaultJobSubTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "ParentJobType": {
            "$ref": "#/components/schemas/JobType"
          },
          "ChildJobType": {
            "$ref": "#/components/schemas/JobType"
          },
          "ChildDefaultJobSubType": {
            "$ref": "#/components/schemas/SubJobType"
          }
        },
        "additionalProperties": false
      },
      "JobTypeElementPhase": {
        "required": [
          "JobElementPhaseId",
          "JobTypeId"
        ],
        "type": "object",
        "properties": {
          "JobTypeElementPhaseId": {
            "type": "integer",
            "format": "int32"
          },
          "JobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "JobElementPhaseId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobType": {
            "$ref": "#/components/schemas/JobType"
          },
          "JobElementPhase": {
            "$ref": "#/components/schemas/JobElementPhase"
          }
        },
        "additionalProperties": false
      },
      "JobVm": {
        "required": [
          "JobAccountId",
          "JobTypeId"
        ],
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "JobName": {
            "type": "string",
            "nullable": true
          },
          "JobAccountId": {
            "type": "integer",
            "format": "int32"
          },
          "JobAccount": {
            "$ref": "#/components/schemas/Account"
          },
          "JobAddressId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "JobAddressType": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobAddress1": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "JobAddress2": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "JobCity": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobState": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobCounty": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobCountry": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "JobZip": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "JobPhone1": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobPhone1Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "JobPhone2": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobPhone2Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "JobEmail": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillAddressType": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillAddress1": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "BillAddress2": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "BillCity": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillState": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillCounty": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillCountry": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "BillZip": {
            "maxLength": 21,
            "type": "string",
            "nullable": true
          },
          "BillPhone1": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "BillPhone1Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "BillPhone2": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "BillPhone2Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "BillEmail": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "StartAfter5PM": {
            "type": "boolean"
          },
          "FullyPaid": {
            "type": "boolean"
          },
          "ARTrxCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobTrxCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringAccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringAccount": {
            "$ref": "#/components/schemas/Account"
          },
          "BillAccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BillAccount": {
            "$ref": "#/components/schemas/Account"
          },
          "BillAddressId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BillAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "JobAddressIdV2": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobAddressV2": {
            "$ref": "#/components/schemas/AddressV2"
          },
          "BillAddressIdV2": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BillAddressV2": {
            "$ref": "#/components/schemas/AddressV2"
          },
          "JobContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobContact": {
            "$ref": "#/components/schemas/Contact"
          },
          "JobStartDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JobEndDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JobCloseDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "LastDayOfWork": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "LienDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "JobType": {
            "type": "string",
            "nullable": true
          },
          "JobTypeCode": {
            "type": "string",
            "nullable": true
          },
          "JobSubTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobSubType": {
            "type": "string",
            "nullable": true
          },
          "JobStatusId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobStatus": {
            "$ref": "#/components/schemas/JobStatus"
          },
          "DivisionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Division": {
            "type": "string",
            "nullable": true
          },
          "TeamId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Team": {
            "type": "string",
            "nullable": true
          },
          "Manager": {
            "type": "string",
            "nullable": true
          },
          "BusDevUser": {
            "type": "string",
            "nullable": true
          },
          "ReceivedById": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReceivedBy": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "ReportedById": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReportedBy": {
            "$ref": "#/components/schemas/Contact"
          },
          "AdSourceId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AdSource": {
            "type": "string",
            "nullable": true
          },
          "ReferredContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferredContact": {
            "$ref": "#/components/schemas/Contact"
          },
          "InsuranceClaimNum": {
            "type": "string",
            "nullable": true
          },
          "InsuranceCompanyId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InsuranceCompany": {
            "$ref": "#/components/schemas/Account"
          },
          "TpaCompanyId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TpaCompany": {
            "$ref": "#/components/schemas/Account"
          },
          "PolicyHolderId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "PolicyHolder": {
            "$ref": "#/components/schemas/Account"
          },
          "AdjustingCompanyId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AdjustingCompany": {
            "$ref": "#/components/schemas/Account"
          },
          "AdjusterId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Adjuster": {
            "$ref": "#/components/schemas/Contact"
          },
          "LossDescriptionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "LossDescription": {
            "type": "string",
            "nullable": true
          },
          "LossInstructionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "LossInstructions": {
            "type": "string",
            "nullable": true
          },
          "SpecialBillingInstructionsId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SpecialBillingInstructions": {
            "type": "string",
            "nullable": true
          },
          "LinkedSpecialInstructions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinkedSpecialInstructionVm"
            },
            "nullable": true
          },
          "LossDirectionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "LossDirections": {
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "Signed": {
            "type": "boolean"
          },
          "Reviewed": {
            "type": "boolean"
          },
          "Closed": {
            "type": "boolean"
          },
          "IsSelfPay": {
            "type": "boolean"
          },
          "VerbalAuth": {
            "type": "boolean"
          },
          "AccountingAuth": {
            "type": "boolean"
          },
          "DateSigned": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "SignaturePath": {
            "type": "string",
            "nullable": true
          },
          "WarmTransferPerformed": {
            "type": "boolean"
          },
          "NotesAndPaperworkComplete": {
            "type": "boolean"
          },
          "HasDigitalPhotos": {
            "type": "boolean"
          },
          "HasThermalPhotos": {
            "type": "boolean"
          },
          "JobPhotos": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobPhotos"
            },
            "nullable": true,
            "readOnly": true
          },
          "WorkAuthUndersignedName": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthUndersignedRole": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthAddress": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthInsuranceCo": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthMortgage": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthFSDKRepName": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthRespPartyDesc": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthFSDKRepDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "WorkAuthUndersignedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "WorkAuthUndersignedSignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "WorkAuthFSDKRepSignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "UseSecondaryWorkAuth": {
            "type": "boolean"
          },
          "ForceUseSecondaryAuth": {
            "type": "boolean"
          },
          "CatPackCustomerName": {
            "type": "string",
            "nullable": true
          },
          "CatPackAddressLine1": {
            "type": "string",
            "nullable": true
          },
          "CatPackAddressLine2": {
            "type": "string",
            "nullable": true
          },
          "CatPackContactName": {
            "type": "string",
            "nullable": true
          },
          "CatPackContactPhone": {
            "type": "string",
            "nullable": true
          },
          "CatPackUndersignedName": {
            "type": "string",
            "nullable": true
          },
          "CatPackUndersignedRole": {
            "type": "string",
            "nullable": true
          },
          "CatPackRespPartyDesc": {
            "type": "string",
            "nullable": true
          },
          "CatPackFSDKRepName": {
            "type": "string",
            "nullable": true
          },
          "CatPackNotToExceedAmount": {
            "type": "string",
            "nullable": true
          },
          "CatPackInitialDepositAmount": {
            "type": "string",
            "nullable": true
          },
          "CatPackFSDKRepDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CatPackUndersignedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CatPackUndersignedInitialDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CatPackUndersignedSignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "CatPackFSDKRepSignatureUrl": {
            "type": "string",
            "nullable": true
          },
          "CatPackUndersignedInitialUrl": {
            "type": "string",
            "nullable": true
          },
          "CatPackPageInitials": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean",
              "nullable": true
            },
            "nullable": true
          },
          "CatPackIsSigned": {
            "type": "boolean"
          },
          "Projects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectVm"
            },
            "nullable": true
          },
          "ReasonCode": {
            "$ref": "#/components/schemas/ReasonCode"
          },
          "EstRev": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "ActRev": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "ActCost": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "LoyaltyRewardsIssuedThroughActualRev": {
            "type": "number",
            "description": "Tracks how much ActualRev has already earned loyalty rewards to keep issuance idempotent.",
            "format": "double",
            "nullable": true
          },
          "ProjectClosed": {
            "type": "boolean"
          },
          "HasJobBeenPhased": {
            "type": "boolean"
          },
          "JobInspectionDate": {
            "type": "string",
            "description": "TimeLine Fields",
            "format": "date-time",
            "nullable": true
          },
          "EstimateSentDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "EstimatedCompletionDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "DispatchTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ArrivalTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CallTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "IsScheduled": {
            "type": "boolean"
          },
          "FTPRPComplete": {
            "type": "boolean"
          },
          "ClosingPeriod": {
            "type": "string",
            "description": "Last commission period name written when CommissionPeriodId was set. Empty until the first close.",
            "nullable": true
          },
          "ClosingPeriodStartDate": {
            "type": "string",
            "description": "CommissionPeriods.CommissionPeriodStartDate for the closing period. Not stored on the job.",
            "format": "date-time",
            "nullable": true
          },
          "ClosingPeriodEndDate": {
            "type": "string",
            "description": "CommissionPeriods.CommissionPeriodEndDate for the closing period. Not stored on the job.",
            "format": "date-time",
            "nullable": true
          },
          "JobEstimatorId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobEstimator": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "NoEstimateProvided": {
            "type": "boolean"
          },
          "NoEstimateReasonCodeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "NoEstimateProvidedReason": {
            "type": "string",
            "nullable": true
          },
          "InactivationReasonCodeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InactivationReasonOther": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LinkMicrosoftAccountVm": {
        "type": "object",
        "properties": {
          "UserPrincipalName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LinkToExistingV2Request": {
        "type": "object",
        "properties": {
          "PrimaryAddressId": {
            "type": "integer",
            "format": "int32"
          },
          "DuplicateAddressIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "ExistingAddressV2Id": {
            "type": "integer",
            "format": "int32"
          },
          "EntityTypesToMigrate": {
            "$ref": "#/components/schemas/EntityTypeMigrationOptions"
          },
          "SelectedAccountIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "SelectedJobIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "SelectedContactIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "SelectedReferringEntityIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LinkedSpecialInstructionVm": {
        "type": "object",
        "properties": {
          "NoteId": {
            "type": "integer",
            "format": "int32"
          },
          "NoteText": {
            "type": "string",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32"
          },
          "CategoryDescription": {
            "type": "string",
            "nullable": true
          },
          "SourceType": {
            "type": "string",
            "nullable": true
          },
          "SourceEntityId": {
            "type": "integer",
            "format": "int32"
          },
          "SourceName": {
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Read-only special instruction note linked to a job/project via a related entity."
      },
      "LoyaltyRewardViewModel": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "description": "The loyalty reward record ID",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "description": "The job ID (null if loyalty reward is not tied to a specific job)",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "description": "The referring entity ID",
            "format": "int32"
          },
          "ReferringEntityName": {
            "type": "string",
            "description": "The referring entity name",
            "nullable": true
          },
          "DateCreated": {
            "type": "string",
            "description": "The date created",
            "format": "date-time"
          },
          "DateApproved": {
            "type": "string",
            "description": "The date approved",
            "format": "date-time",
            "nullable": true
          },
          "IsApproved": {
            "type": "boolean",
            "description": "Whether the loyalty reward is approved"
          },
          "LoyaltyRewardAmount": {
            "type": "number",
            "description": "The loyalty reward amount",
            "format": "double"
          },
          "LoyaltyRewardsRate": {
            "type": "number",
            "description": "The loyalty rewards rate (decimal, e.g., 0.10 for 10%)",
            "format": "double",
            "nullable": true
          },
          "Status": {
            "type": "string",
            "description": "The status of the loyalty reward",
            "nullable": true
          },
          "CreatedBy": {
            "type": "string",
            "description": "Created by user",
            "nullable": true
          },
          "ApprovedBy": {
            "type": "string",
            "description": "Approved by user",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for loyalty rewards records"
      },
      "LoyaltyRewardsPreviewViewModel": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "description": "The job ID",
            "format": "int32"
          },
          "IsEligible": {
            "type": "boolean",
            "description": "Whether the job is eligible for loyalty rewards"
          },
          "MainReferrerId": {
            "type": "integer",
            "description": "The main referrer entity ID",
            "format": "int32"
          },
          "MainReferrerName": {
            "type": "string",
            "description": "The main referrer name",
            "nullable": true
          },
          "RewardRate": {
            "type": "number",
            "description": "The loyalty rewards rate (decimal, e.g., 0.10 for 10%)",
            "format": "double"
          },
          "RewardRateDisplay": {
            "type": "string",
            "description": "The reward rate display string (e.g., \"10%\")",
            "nullable": true
          },
          "EligibleInvoices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EligibleInvoiceViewModel"
            },
            "description": "The list of eligible invoices (for legacy compatibility; now represents job-level reward)",
            "nullable": true
          },
          "TotalRewardAmount": {
            "type": "number",
            "description": "The total reward amount across all invoices",
            "format": "double"
          },
          "Message": {
            "type": "string",
            "description": "A message about eligibility status",
            "nullable": true
          },
          "JobActualRev": {
            "type": "number",
            "description": "Job ActualRev (new field for ActualRev-based rewards)",
            "format": "double"
          },
          "AlreadyIssuedThrough": {
            "type": "number",
            "description": "Amount already issued through previous close cycles",
            "format": "double"
          },
          "EligibleRevenueDelta": {
            "type": "number",
            "description": "Eligible revenue delta (ActualRev - AlreadyIssuedThrough)",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "View model for previewing loyalty rewards eligibility"
      },
      "LoyaltyRewardsProcessResultViewModel": {
        "type": "object",
        "properties": {
          "Success": {
            "type": "boolean",
            "description": "Whether the processing was successful"
          },
          "CreatedRewardsCount": {
            "type": "integer",
            "description": "The number of loyalty reward records created",
            "format": "int32"
          },
          "TotalRewardAmount": {
            "type": "number",
            "description": "The total reward amount created",
            "format": "double"
          },
          "CreatedRewardIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "The IDs of the created loyalty reward records",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "description": "A result message",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for the result of processing loyalty rewards"
      },
      "LoyaltyRewardsProgramRateDto": {
        "type": "object",
        "properties": {
          "JobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "DiscountRate": {
            "type": "number",
            "format": "double"
          },
          "InActive": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "description": "DTO for creating/updating loyalty rewards program rates"
      },
      "MagicPlanPollEnabledRequest": {
        "type": "object",
        "properties": {
          "Enabled": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "MergeAccountRequest": {
        "type": "object",
        "properties": {
          "PrimaryAccountId": {
            "type": "integer",
            "format": "int32"
          },
          "DuplicateAccountIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MergeAddressRequest": {
        "type": "object",
        "properties": {
          "PrimaryAddressId": {
            "type": "integer",
            "format": "int32"
          },
          "DuplicateAddressId": {
            "type": "integer",
            "format": "int32"
          },
          "DeleteDuplicate": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "MergeContactRequest": {
        "type": "object",
        "properties": {
          "PrimaryContactId": {
            "type": "integer",
            "format": "int32"
          },
          "DuplicateContactIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MergeReferringEntityRequest": {
        "type": "object",
        "properties": {
          "PrimaryReferringEntityId": {
            "type": "integer",
            "format": "int32"
          },
          "DuplicateReferringEntityIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MergeToV2Request": {
        "type": "object",
        "properties": {
          "PrimaryAddressId": {
            "type": "integer",
            "format": "int32"
          },
          "DuplicateAddressIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "MarkLegacyInactive": {
            "type": "boolean"
          },
          "ForceNewAddressV2": {
            "type": "boolean"
          },
          "SkipGeocoding": {
            "type": "boolean"
          },
          "EntityTypesToMigrate": {
            "$ref": "#/components/schemas/EntityTypeMigrationOptions"
          },
          "SelectedAccountIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "SelectedJobIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "SelectedContactIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "SelectedReferringEntityIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MergeV2AddressesRequest": {
        "type": "object",
        "properties": {
          "PrimaryAddressV2Id": {
            "type": "integer",
            "format": "int32"
          },
          "AddressV2IdsToMerge": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MigrateAllV1Request": {
        "type": "object",
        "properties": {
          "IncludeMigrated": {
            "type": "boolean"
          },
          "MarkLegacyInactive": {
            "type": "boolean"
          },
          "ForceNewAddressV2": {
            "type": "boolean"
          },
          "SkipGeocoding": {
            "type": "boolean"
          },
          "Take": {
            "type": "integer",
            "format": "int32"
          },
          "EntityTypesToMigrate": {
            "$ref": "#/components/schemas/EntityTypeMigrationOptions"
          }
        },
        "additionalProperties": false
      },
      "MoveEquipmentInfoVm": {
        "type": "object",
        "properties": {
          "EquipmentLocationId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobAreaId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Note": {
        "required": [
          "NoteText"
        ],
        "type": "object",
        "properties": {
          "NoteId": {
            "type": "integer",
            "format": "int32"
          },
          "NoteText": {
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "FollowUpDate": {
            "type": "string",
            "description": "When set, this note is a follow-up scheduled for the given date.",
            "format": "date-time",
            "nullable": true
          },
          "IsFollowUp": {
            "type": "boolean",
            "description": "Convenience flag — a note is a follow-up when FollowUpDate has a value.",
            "readOnly": true
          },
          "NoteFollowUpUsers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NoteFollowUpUser"
            },
            "description": "Optional users associated with a follow-up note.",
            "nullable": true
          },
          "FollowUpUserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "FollowUpUsers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "FollowUpUsersDisplay": {
            "type": "string",
            "nullable": true
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "OutlookEventId": {
            "maxLength": 512,
            "type": "string",
            "nullable": true
          },
          "SeriesICalUId": {
            "maxLength": 512,
            "type": "string",
            "description": "When set, note applies to the entire recurring series (shared ICalUId).",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AddressV2Id": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Category": {
            "$ref": "#/components/schemas/Category"
          }
        },
        "additionalProperties": false
      },
      "NoteFollowUpUser": {
        "required": [
          "NoteId",
          "UserId"
        ],
        "type": "object",
        "properties": {
          "NoteFollowUpUserId": {
            "type": "integer",
            "format": "int32"
          },
          "NoteId": {
            "type": "integer",
            "format": "int32"
          },
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "description": "Auditing",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Note": {
            "$ref": "#/components/schemas/Note"
          },
          "User": {
            "$ref": "#/components/schemas/ApplicationUser"
          }
        },
        "additionalProperties": false
      },
      "Notification": {
        "type": "object",
        "properties": {
          "NotificationId": {
            "type": "integer",
            "format": "int32"
          },
          "NotificationTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "TeamId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "UserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SendExternal": {
            "type": "boolean",
            "default": "true"
          },
          "SendInternal": {
            "type": "boolean",
            "default": "true"
          },
          "JobType": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "SubJobType": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "Email": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "NotificationType": {
            "$ref": "#/components/schemas/NotificationType"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "Team": {
            "$ref": "#/components/schemas/Team"
          },
          "User": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "Category": {
            "$ref": "#/components/schemas/Category"
          }
        },
        "additionalProperties": false
      },
      "NotificationCategory": {
        "type": "object",
        "properties": {
          "NotificationCategoryId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "InActive": {
            "type": "boolean"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "NotificationCategoryName": {
            "type": "string",
            "nullable": true
          },
          "NotificationTriggers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NotificationTrigger"
            },
            "nullable": true
          },
          "SentNotifications": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SentNotification"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "NotificationTrigger": {
        "type": "object",
        "properties": {
          "NotificationTriggerId": {
            "type": "integer",
            "format": "int32"
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "TriggerName": {
            "type": "string",
            "nullable": true
          },
          "TriggerDesc": {
            "type": "string",
            "nullable": true
          },
          "TextToSend": {
            "type": "string",
            "nullable": true
          },
          "SendInternal": {
            "type": "boolean"
          },
          "SendExternal": {
            "type": "boolean"
          },
          "NotificationCategoryId": {
            "type": "integer",
            "format": "int32"
          },
          "NotificationCategory": {
            "$ref": "#/components/schemas/NotificationCategory"
          },
          "SentNotifications": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SentNotification"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "NotificationType": {
        "required": [
          "Description",
          "EntityType"
        ],
        "type": "object",
        "properties": {
          "NotificationTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "EntityType": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "Description": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PartialAccountDto": {
        "type": "object",
        "properties": {
          "CompanyName": {
            "type": "string",
            "nullable": true
          },
          "FirstName": {
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "type": "string",
            "nullable": true
          },
          "Phone1": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          },
          "Zip": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PartialContactDto": {
        "type": "object",
        "properties": {
          "FirstName": {
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "type": "string",
            "nullable": true
          },
          "Phone1": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          },
          "Zip": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Payment": {
        "required": [
          "Amount",
          "ConfirmationNumber",
          "CreateDate",
          "CreateUser",
          "ExternalPaymentRequestId",
          "PaymentDate",
          "PaymentMethod",
          "Status"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "ExternalPaymentRequestId": {
            "type": "integer",
            "format": "int32"
          },
          "Amount": {
            "type": "number",
            "description": "Amount paid in this transaction (may be partial)",
            "format": "double"
          },
          "PaymentDate": {
            "type": "string",
            "description": "Date and time the payment was completed",
            "format": "date-time"
          },
          "PaymentMethod": {
            "minLength": 1,
            "type": "string",
            "description": "Payment method used: CreditCard, DebitCard, ACH"
          },
          "StripePaymentIntentId": {
            "type": "string",
            "description": "Stripe PaymentIntent ID for this specific payment",
            "nullable": true
          },
          "ConfirmationNumber": {
            "minLength": 1,
            "type": "string",
            "description": "Unique confirmation number for this payment (FS-YYYYMMDD-XXXX)"
          },
          "CustomerEmail": {
            "type": "string",
            "description": "Customer email used for this payment",
            "nullable": true
          },
          "CustomerFeeAmount": {
            "type": "number",
            "description": "Processing fee charged to customer (if applicable)",
            "format": "double",
            "nullable": true
          },
          "InternalFeeAmount": {
            "type": "number",
            "description": "Internal processing fee cost (actual Stripe fees)",
            "format": "double",
            "nullable": true
          },
          "NetPaymentAmount": {
            "type": "number",
            "description": "Net payment amount applied to invoices (Amount - CustomerFeeAmount)",
            "format": "double",
            "nullable": true
          },
          "StripeFeeBreakdown": {
            "type": "string",
            "description": "JSON breakdown of Stripe fees for this payment",
            "nullable": true
          },
          "CustomerWasChargedFee": {
            "type": "boolean",
            "description": "Whether customer was charged a processing fee for this payment"
          },
          "GpCashReceiptStatus": {
            "type": "string",
            "nullable": true
          },
          "GpCashReceiptId": {
            "type": "string",
            "nullable": true
          },
          "GpCashReceiptError": {
            "type": "string",
            "nullable": true
          },
          "GpCashReceiptRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "GpCashReceiptLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CashReceiptDocumentNumber": {
            "type": "string",
            "nullable": true
          },
          "CashReceiptBatchNumber": {
            "type": "string",
            "nullable": true
          },
          "GlPostingStatus": {
            "type": "string",
            "nullable": true
          },
          "GlTransactionId": {
            "type": "string",
            "nullable": true
          },
          "GlPostingError": {
            "type": "string",
            "nullable": true
          },
          "GlPostingRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "GlPostingLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "GlPostingJournalEntry": {
            "type": "string",
            "nullable": true
          },
          "GlPostingBatchNumber": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionStatus": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionId": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionBatchNumber": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionJeNumber": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionError": {
            "type": "string",
            "nullable": true
          },
          "BankTransactionRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "BankTransactionLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JobTrxStatus": {
            "type": "string",
            "nullable": true
          },
          "JobTrxId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "JobTrxIds": {
            "type": "string",
            "nullable": true
          },
          "JobTrxError": {
            "type": "string",
            "nullable": true
          },
          "JobTrxRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "JobTrxLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "JobTrxGpJeStatus": {
            "type": "string",
            "nullable": true
          },
          "JobTrxGpJeNumber": {
            "type": "string",
            "nullable": true
          },
          "JobTrxGpBatchNumber": {
            "type": "string",
            "nullable": true
          },
          "JobTrxGpJeError": {
            "type": "string",
            "nullable": true
          },
          "JobTrxGpJeRetryCount": {
            "type": "integer",
            "format": "int32"
          },
          "JobTrxGpJeLastAttempt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Status": {
            "minLength": 1,
            "type": "string",
            "description": "Payment status: Pending, Completed, Failed, Invalidated"
          },
          "Invalidated": {
            "type": "boolean",
            "description": "Whether this payment was later invalidated (e.g., ACH failure)"
          },
          "InvalidatedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "InvalidatedReason": {
            "type": "string",
            "nullable": true
          },
          "InvalidatedBy": {
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "minLength": 1,
            "type": "string"
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "PaymentRequest": {
            "$ref": "#/components/schemas/ExternalPaymentRequest"
          },
          "InvoiceAllocations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentInvoiceAllocation"
            },
            "nullable": true
          },
          "IsValid": {
            "type": "boolean",
            "readOnly": true
          },
          "HasPendingGpIntegrations": {
            "type": "boolean",
            "readOnly": true
          },
          "AllGpIntegrationsComplete": {
            "type": "boolean",
            "readOnly": true
          },
          "GpIntegrationSummary": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an individual payment transaction made against an ExternalPaymentRequest.\r\nSupports multiple partial payments per request."
      },
      "PaymentCompletionVm": {
        "type": "object",
        "properties": {
          "PaymentRequestId": {
            "type": "integer",
            "description": "The payment request ID",
            "format": "int32"
          },
          "TransactionId": {
            "type": "string",
            "description": "The transaction ID",
            "nullable": true
          },
          "Amount": {
            "type": "number",
            "description": "The payment amount",
            "format": "double"
          },
          "CompletionDate": {
            "type": "string",
            "description": "The completion date",
            "format": "date-time"
          },
          "Success": {
            "type": "boolean",
            "description": "Whether the payment was successful"
          },
          "ErrorMessage": {
            "type": "string",
            "description": "Any error message",
            "nullable": true
          },
          "PaymentMethod": {
            "type": "string",
            "description": "The payment method used",
            "nullable": true
          },
          "StripePaymentIntentId": {
            "type": "string",
            "description": "The Stripe payment intent ID",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for payment completion details"
      },
      "PaymentInvoiceAllocation": {
        "required": [
          "AllocatedAmount",
          "AllocationDate",
          "CreateUser",
          "ExternalPaymentRequestInvoiceId",
          "PaymentId"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "PaymentId": {
            "type": "integer",
            "format": "int32"
          },
          "ExternalPaymentRequestInvoiceId": {
            "type": "integer",
            "format": "int32"
          },
          "AllocatedAmount": {
            "type": "number",
            "description": "Amount from this payment allocated to this invoice",
            "format": "double"
          },
          "AllocationDate": {
            "type": "string",
            "description": "Date this allocation was created",
            "format": "date-time"
          },
          "CreateUser": {
            "minLength": 1,
            "type": "string",
            "description": "User who created this allocation"
          },
          "Payment": {
            "$ref": "#/components/schemas/Payment"
          },
          "Invoice": {
            "$ref": "#/components/schemas/ExternalPaymentRequestInvoice"
          }
        },
        "additionalProperties": false,
        "description": "Tracks how a payment was allocated across invoices.\r\nEnables precise tracking when multiple partial payments are made."
      },
      "PaymentPreviewRequest": {
        "type": "object",
        "properties": {
          "PaymentRequestGuid": {
            "type": "string",
            "nullable": true
          },
          "PaymentMethod": {
            "type": "string",
            "nullable": true
          },
          "Amount": {
            "type": "number",
            "description": "Optional client-provided unpaid total (used if lower than server computed unpaid amount).",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for previewing a payment"
      },
      "PaymentSettingsVm": {
        "required": [
          "CustomerFeeAmount",
          "CustomerFeeType",
          "InternalFeeAmount",
          "InternalFeeType",
          "PaymentMethod"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "PaymentMethod": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "CustomerFeeType": {
            "maxLength": 20,
            "minLength": 1,
            "type": "string"
          },
          "CustomerFeeAmount": {
            "type": "number",
            "format": "double"
          },
          "InternalFeeType": {
            "maxLength": 20,
            "minLength": 1,
            "type": "string"
          },
          "InternalFeeAmount": {
            "type": "number",
            "format": "double"
          },
          "MinFeeAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "MaxFeeAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "InternalMaxFeeAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "CustomerFixedFeeAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "InternalFixedFeeAmount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "CustomerFeeDisplay": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "InternalFeeDisplay": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "PaymentSystemSettingsVm": {
        "required": [
          "DataType",
          "SettingName",
          "SettingValue"
        ],
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "SettingName": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "SettingValue": {
            "maxLength": 500,
            "minLength": 1,
            "type": "string"
          },
          "Description": {
            "maxLength": 500,
            "type": "string",
            "nullable": true
          },
          "DataType": {
            "maxLength": 20,
            "minLength": 1,
            "type": "string"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "AsInt": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "readOnly": true
          },
          "AsBool": {
            "type": "boolean",
            "nullable": true,
            "readOnly": true
          },
          "AsDecimal": {
            "type": "number",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "AsStringArray": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "PreparePaymentRequest": {
        "type": "object",
        "properties": {
          "PaymentMethodId": {
            "type": "string",
            "nullable": true
          },
          "CustomerEmail": {
            "type": "string",
            "nullable": true
          },
          "Amount": {
            "type": "number",
            "description": "Optional: The amount to pay. If not provided or less than/equal to 0, uses the full unpaid invoice amount.\r\nAllows for partial payments.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for preparing a payment (retrieving card details, calculating fees, updating payment intent)"
      },
      "ProfilePictureUploadVm": {
        "type": "object",
        "properties": {
          "Image": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Project": {
        "type": "object",
        "properties": {
          "ProjectId": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectName": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "description": "Auditing",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "ProjectStartDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "DivisionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TeamId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InsuranceCompanyId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InsuranceClaimNum": {
            "type": "string",
            "nullable": true
          },
          "TpaCompanyId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "PolicyHolderId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AdjustingCompanyId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AdjusterId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReceivedById": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReportedById": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AdSourceId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferredContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferredAccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "BusDevUser": {
            "type": "string",
            "nullable": true
          },
          "IsSelfPay": {
            "type": "boolean"
          },
          "Active": {
            "type": "boolean"
          },
          "Closed": {
            "type": "boolean"
          },
          "Reviewed": {
            "type": "boolean"
          },
          "UseSecondaryWorkAuth": {
            "type": "boolean"
          },
          "ForceUseSecondaryAuth": {
            "type": "boolean"
          },
          "ActualRev": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "ActualPay": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "ActualCost": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "EstJobCost": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "EstJobRev": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "LossDescriptionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "LossInstructionId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "SpecialBillingInstructionsId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectJobs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectJob"
            },
            "nullable": true
          },
          "ProjectReferrals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectReferrals"
            },
            "description": "Project-specific referral relationships",
            "nullable": true
          },
          "Team": {
            "$ref": "#/components/schemas/Team"
          },
          "ReferredContact": {
            "$ref": "#/components/schemas/Contact"
          },
          "ReferredAccount": {
            "$ref": "#/components/schemas/Account"
          },
          "Division": {
            "$ref": "#/components/schemas/Division"
          },
          "ReceivedByUser": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "ReportedBy": {
            "$ref": "#/components/schemas/Contact"
          },
          "AdSource": {
            "$ref": "#/components/schemas/AdSource"
          },
          "InsuranceCompany": {
            "$ref": "#/components/schemas/Account"
          },
          "TpaCompany": {
            "$ref": "#/components/schemas/Account"
          },
          "PolicyHolder": {
            "$ref": "#/components/schemas/Account"
          },
          "AdjustingCompany": {
            "$ref": "#/components/schemas/Account"
          },
          "Adjuster": {
            "$ref": "#/components/schemas/Contact"
          },
          "LossDescription": {
            "$ref": "#/components/schemas/Note"
          },
          "LossInstructions": {
            "$ref": "#/components/schemas/Note"
          },
          "SpecialBillingInstructions": {
            "$ref": "#/components/schemas/Note"
          },
          "LinkedSpecialInstructions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinkedSpecialInstructionVm"
            },
            "nullable": true
          },
          "TypeLabel": {
            "type": "string",
            "description": "Quick-search display only. Distinct job type / subtype pairs on this project.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ProjectJob": {
        "type": "object",
        "properties": {
          "ProjectJobId": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Project": {
            "$ref": "#/components/schemas/Project"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          }
        },
        "additionalProperties": false
      },
      "ProjectReferrals": {
        "required": [
          "ChildEntityId",
          "ProjectId",
          "RelationshipType"
        ],
        "type": "object",
        "properties": {
          "ProjectReferralId": {
            "type": "integer",
            "description": "Primary key for the project referral relationship",
            "format": "int32"
          },
          "ProjectId": {
            "type": "integer",
            "description": "Project this relationship belongs to - indexed for fast project queries",
            "format": "int32"
          },
          "ParentEntityId": {
            "type": "integer",
            "description": "Parent entity in the relationship - indexed for fast parent->child queries\r\nCan be null for root assignments (initial entity assignments to projects)",
            "format": "int32",
            "nullable": true
          },
          "ChildEntityId": {
            "type": "integer",
            "description": "Child entity in the relationship - indexed for fast child->parent queries",
            "format": "int32"
          },
          "RelationshipType": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string",
            "description": "Type of relationship - indexed for filtering\r\n- \"Parent-Child\": Standard hierarchical relationship\r\n- \"Referral-Chain\": One entity refers business to another\r\n- \"Custom\": Project-specific relationship not in global hierarchy"
          },
          "CommissionPercentage": {
            "maximum": 100,
            "minimum": 0,
            "type": "number",
            "description": "Commission sharing percentage for this relationship (0-100)\r\nCan override global relationship commission settings",
            "format": "double",
            "nullable": true
          },
          "IsRewardBeneficiary": {
            "type": "boolean",
            "description": "Indicates if this is the reward beneficiary for the project\r\nOnly one per project can be true"
          },
          "ChannelId": {
            "type": "integer",
            "description": "Snapshot of the child referring entity's Channel at assignment time.",
            "format": "int32",
            "nullable": true
          },
          "SubChannelId": {
            "type": "integer",
            "description": "Snapshot of the child referring entity's SubChannel at assignment time.",
            "format": "int32",
            "nullable": true
          },
          "CreatedDate": {
            "type": "string",
            "description": "Date when this record was created",
            "format": "date-time"
          },
          "CreatedBy": {
            "maxLength": 31,
            "type": "string",
            "description": "User who created this record",
            "nullable": true
          },
          "ModifiedDate": {
            "type": "string",
            "description": "Date when this record was last modified",
            "format": "date-time"
          },
          "ModifiedBy": {
            "maxLength": 31,
            "type": "string",
            "description": "User who last modified this record",
            "nullable": true
          },
          "Project": {
            "$ref": "#/components/schemas/Project"
          },
          "ParentEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "ChildEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "Channel": {
            "$ref": "#/components/schemas/Channel"
          },
          "SubChannel": {
            "$ref": "#/components/schemas/SubChannel"
          },
          "IsActive": {
            "type": "boolean",
            "description": "Fast active check - always true since no InActive field",
            "readOnly": true
          },
          "RelationshipDescription": {
            "type": "string",
            "description": "Cached relationship description for display",
            "nullable": true,
            "readOnly": true
          },
          "IsCustomRelationship": {
            "type": "boolean",
            "description": "Check if this is a custom relationship (always true since no import tracking)",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Project-specific referral relationships that can be customized per project\r\nSupports importing from global ReferringEntity relationships\r\nStores hierarchical relationships between referring entities within a project context"
      },
      "ProjectVm": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32"
          },
          "ProjectName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PsychometricHeader": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "IsOutside": {
            "type": "boolean"
          },
          "IsJobArea": {
            "type": "boolean"
          },
          "IsEquipment": {
            "type": "boolean"
          },
          "IsHiddenEquipment": {
            "type": "boolean"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "JobAreaId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "EquipmentId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "StartDate": {
            "type": "string",
            "format": "date-time"
          },
          "EndDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "PsychometricLine": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PsychometricLine"
            },
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "Equipment": {
            "$ref": "#/components/schemas/Equipment"
          },
          "JobArea": {
            "$ref": "#/components/schemas/JobArea"
          }
        },
        "additionalProperties": false
      },
      "PsychometricLine": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "PsychometricHeaderId": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "JobAreaId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "EquipmentId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Date": {
            "type": "string",
            "format": "date-time"
          },
          "Fahrenheit": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "RelHumidity": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "GPP": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "MoisturePoint": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "PsychometricHeader": {
            "$ref": "#/components/schemas/PsychometricHeader"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "Equipment": {
            "$ref": "#/components/schemas/Equipment"
          }
        },
        "additionalProperties": false
      },
      "ReadyForReviewRequest": {
        "type": "object",
        "properties": {
          "ReadyForReview": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ReasonCode": {
        "type": "object",
        "properties": {
          "ReasonCodeId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "Category": {
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ReassignReferrerAddressesRequest": {
        "type": "object",
        "properties": {
          "TargetReferringEntityId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ReconciledTrxV2": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "JobTrxId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ArTrxId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "OriginalTrxNumber": {
            "type": "string",
            "nullable": true
          },
          "JournalEntry": {
            "type": "string",
            "nullable": true
          },
          "SeqNumber": {
            "type": "string",
            "nullable": true
          },
          "GlAccount": {
            "type": "string",
            "nullable": true
          },
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "DocumentType": {
            "type": "string",
            "nullable": true
          },
          "Amount": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "RefContactClass": {
        "type": "object",
        "properties": {
          "RefContactClassId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "ContactRefContactClass": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactRefContactClass"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ReferralAccountViewModel": {
        "type": "object",
        "properties": {
          "AccountId": {
            "type": "integer",
            "description": "The account ID",
            "format": "int32"
          },
          "DisplayName": {
            "type": "string",
            "description": "The display name",
            "nullable": true
          },
          "AccountType": {
            "type": "string",
            "description": "The account type",
            "nullable": true
          },
          "ReferralType": {
            "type": "string",
            "description": "The referral type",
            "nullable": true
          },
          "CommissionRate": {
            "type": "number",
            "description": "The commission rate",
            "format": "double",
            "nullable": true
          },
          "AssignmentDate": {
            "type": "string",
            "description": "The assignment date",
            "format": "date-time"
          },
          "Level": {
            "type": "integer",
            "description": "The level in hierarchy",
            "format": "int32"
          },
          "HierarchyPathNames": {
            "type": "string",
            "description": "The hierarchy path names",
            "nullable": true
          },
          "HierarchyPathIds": {
            "type": "string",
            "description": "The hierarchy path IDs",
            "nullable": true
          },
          "IsDirectReferral": {
            "type": "boolean",
            "description": "Whether this is a direct referral"
          },
          "IsEnrolledInLoyaltyRewardsProgram": {
            "type": "boolean",
            "description": "Whether the referring entity is enrolled in the loyalty rewards program"
          },
          "IsActive": {
            "type": "boolean",
            "description": "Whether the account is active"
          }
        },
        "additionalProperties": false,
        "description": "View model for referral accounts"
      },
      "ReferralEdge": {
        "type": "object",
        "properties": {
          "From": {
            "type": "integer",
            "format": "int32"
          },
          "To": {
            "type": "integer",
            "format": "int32"
          },
          "RelationshipType": {
            "type": "string",
            "nullable": true
          },
          "CommissionPercentage": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "IsRewardBeneficiary": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "description": "Data transfer object for referral edge"
      },
      "ReferralHierarchyData": {
        "type": "object",
        "properties": {
          "Nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferralNode"
            },
            "nullable": true
          },
          "Edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferralEdge"
            },
            "nullable": true
          },
          "UpdateProjectJobs": {
            "type": "boolean"
          },
          "Initial": {
            "type": "integer",
            "description": "Entity ID of the main referrer (IsRewardBeneficiary=true). Used by the frontend as vm.graph.initial.",
            "format": "int32",
            "nullable": true
          },
          "Version": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Data transfer object for referral hierarchy data"
      },
      "ReferralNode": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "Name": {
            "type": "string",
            "nullable": true
          },
          "IsRoot": {
            "type": "boolean"
          },
          "IsRewardBeneficiary": {
            "type": "boolean"
          },
          "CommissionPercentage": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "EntityTypeDisplay": {
            "type": "string",
            "nullable": true
          },
          "EntityTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "IsEnrolledInLoyaltyRewardsProgram": {
            "type": "boolean"
          },
          "LoyaltyRewardsBalance": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Data transfer object for referral node"
      },
      "ReferralStatisticsViewModel": {
        "type": "object",
        "properties": {
          "TotalReferrers": {
            "type": "integer",
            "description": "The total number of referrers",
            "format": "int32"
          },
          "DirectReferrals": {
            "type": "integer",
            "description": "The number of direct referrals",
            "format": "int32"
          },
          "IndirectReferrals": {
            "type": "integer",
            "description": "The number of indirect referrals",
            "format": "int32"
          },
          "MaxDepth": {
            "type": "integer",
            "description": "The maximum depth of the hierarchy",
            "format": "int32"
          },
          "AverageCommissionRate": {
            "type": "number",
            "description": "The average commission rate",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "View model for referral statistics"
      },
      "ReferringEntity": {
        "required": [
          "FullName",
          "Phone1"
        ],
        "type": "object",
        "properties": {
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32"
          },
          "LegacyAccountId": {
            "type": "integer",
            "description": "Legacy Account ID for migration tracking (nullable after migration complete)",
            "format": "int32",
            "nullable": true
          },
          "LegacyContactId": {
            "type": "integer",
            "description": "Legacy Contact ID for migration tracking (nullable after migration complete)",
            "format": "int32",
            "nullable": true
          },
          "MasterReferringEntityId": {
            "type": "integer",
            "description": "Primary/Master ReferringEntity that this entity reports to (can be any level up in hierarchy, not just immediate parent)",
            "format": "int32",
            "nullable": true
          },
          "FullName": {
            "maxLength": 255,
            "minLength": 1,
            "type": "string",
            "description": "Full name of the referring entity (person name or company name)"
          },
          "GPIdentifier": {
            "type": "string",
            "description": "GP Customer Number for transferred accounts from legacy system",
            "nullable": true
          },
          "PreMergeGPIdentifiers": {
            "maxLength": 500,
            "type": "string",
            "description": "Comma-separated list of historical GP identifiers from merged entities.\r\nUsed to maintain visibility into expenses/transactions from all merged sources.\r\nDoes NOT include the current GPIdentifier (stored above).\r\nExample: \"REF000002,REF000003\" means this entity absorbed entities with those GP IDs.",
            "nullable": true
          },
          "ReferringEntityClassId": {
            "type": "integer",
            "description": "Foreign key to ReferringEntityClass (classification/categorization of this entity)",
            "format": "int32",
            "nullable": true
          },
          "NotifyIfActivityExceeds": {
            "type": "integer",
            "description": "When activity count exceeds this threshold, notify (used when Entity Class is VIP).",
            "format": "int32",
            "nullable": true
          },
          "ChannelId": {
            "type": "integer",
            "description": "Marketing / referral channel for this entity.",
            "format": "int32",
            "nullable": true
          },
          "SubChannelId": {
            "type": "integer",
            "description": "Sub-channel within the selected channel (must be linked via ChannelSubChannel).",
            "format": "int32",
            "nullable": true
          },
          "Phone1": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "Phone1Type": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Phone2": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Phone2Type": {
            "maxLength": 11,
            "type": "string",
            "nullable": true
          },
          "Email": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "SmsEnrolled": {
            "type": "boolean"
          },
          "SmsEnrolledDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "About": {
            "maxLength": 2000,
            "type": "string",
            "description": "Free-text about this referring entity (hobbies, interests, notes migrated from legacy Contacts.HobbiesAndInterests)",
            "nullable": true
          },
          "SpecialInstructionId": {
            "type": "integer",
            "description": "FK to the Special Instruction note (CategoryId -200) for this referring entity.",
            "format": "int32",
            "nullable": true
          },
          "SpecialInstructions": {
            "maxLength": 2000,
            "type": "string",
            "description": "Special instructions text (backed by Note; not a column).",
            "nullable": true
          },
          "BusDevId": {
            "type": "integer",
            "description": "Business Development User responsible for this referring entity",
            "format": "int32",
            "nullable": true
          },
          "IsCommercial": {
            "type": "boolean",
            "description": "Indicates if this is a commercial referring entity"
          },
          "Category": {
            "maxLength": 50,
            "type": "string",
            "description": "Entity category: Person, Organization, or Location. Null until set on the entity.",
            "nullable": true
          },
          "UnitCount": {
            "type": "integer",
            "description": "Number of units for Location-category referring entities. Null when Category is not Location.",
            "format": "int32",
            "nullable": true
          },
          "IsPerson": {
            "type": "boolean",
            "description": "True if this referring entity represents an individual person; false if it represents a company/organization or location.\r\nKept in sync with Category for backward compatibility."
          },
          "Birthday": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Anniversary": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Married": {
            "type": "boolean"
          },
          "Children": {
            "type": "boolean"
          },
          "InActive": {
            "type": "boolean"
          },
          "ExemptFromDuplicate": {
            "type": "boolean",
            "description": "When true, this referring entity is excluded from duplicate detection groups."
          },
          "ReasonCodeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "IsOrphaned": {
            "type": "boolean",
            "description": "Indicates if this referring entity is orphaned (no longer associated with active referrals)"
          },
          "IsPendingReview": {
            "type": "boolean",
            "description": "True while a newly created referrer awaits ApprovePending review.\r\nPending create referrers are excluded from typeaheads, hierarchies, and reports."
          },
          "PendingReviewCreatedByUserId": {
            "type": "integer",
            "description": "User who created this entity while it was pending review (CreatePending flow).",
            "format": "int32",
            "nullable": true
          },
          "PendingReviewCreatedByUser": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "IsRoot": {
            "type": "boolean",
            "description": "Indicates if this referring entity is at the root of the hierarchy (has descendants but no parent)"
          },
          "IsEnrolledInLoyaltyRewardsProgram": {
            "type": "boolean",
            "description": "Indicates if this referring entity is enrolled in the loyalty rewards program"
          },
          "LoyaltyRewardsBalance": {
            "type": "number",
            "description": "Loyalty rewards balance for this referring entity",
            "format": "double"
          },
          "SyncedToGP": {
            "type": "boolean",
            "description": "Indicates if this referring entity has been successfully synced to GP"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "BusDevUser": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "ReasonCode": {
            "$ref": "#/components/schemas/ReasonCode"
          },
          "LegacyAccount": {
            "$ref": "#/components/schemas/Account"
          },
          "LegacyContact": {
            "$ref": "#/components/schemas/Contact"
          },
          "SpecialInstruction": {
            "$ref": "#/components/schemas/Note"
          },
          "MasterReferringEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "ReferringEntityTypeAssignments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferringEntityTypeAssignment"
            },
            "description": "Assignments connecting this entity to one or more ReferringEntityTypes",
            "nullable": true
          },
          "ReferringEntityHobbyAssignments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferringEntityHobbyAssignment"
            },
            "description": "Assignments connecting this entity to one or more Hobbies",
            "nullable": true
          },
          "ReferringEntityAddresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferringEntityAddress"
            },
            "description": "Addresses associated with this referring entity (via link table ReferringEntityAddress)",
            "nullable": true
          },
          "LastActivityDate": {
            "type": "string",
            "description": "Last activity date associated with this referring entity (stored for reporting)",
            "format": "date-time",
            "nullable": true
          },
          "TotalRevenue": {
            "type": "number",
            "description": "Total revenue from all jobs associated with this referring entity (stored for reporting)",
            "format": "double"
          },
          "DateOfLastReferredWork": {
            "type": "string",
            "description": "Date of the last referred work associated with this referring entity",
            "format": "date-time",
            "nullable": true
          },
          "TotalJobs": {
            "type": "integer",
            "description": "Total number of jobs associated with this referring entity",
            "format": "int32"
          },
          "TotalActiveJobs": {
            "type": "integer",
            "description": "Total number of active jobs",
            "format": "int32"
          },
          "TotalClosedJobs": {
            "type": "integer",
            "description": "Total number of closed jobs",
            "format": "int32"
          },
          "TotalInactiveJobs": {
            "type": "integer",
            "description": "Total number of inactive jobs",
            "format": "int32"
          },
          "TotalJobRevenue": {
            "type": "number",
            "description": "Total job revenue",
            "format": "double"
          },
          "TotalActiveJobRevenue": {
            "type": "number",
            "description": "Total active job revenue",
            "format": "double"
          },
          "TotalClosedJobRevenue": {
            "type": "number",
            "description": "Total closed job revenue",
            "format": "double"
          },
          "TotalInactiveJobRevenue": {
            "type": "number",
            "description": "Total inactive job revenue",
            "format": "double"
          },
          "TotalProjects": {
            "type": "integer",
            "description": "Total number of projects",
            "format": "int32"
          },
          "TotalActiveProjects": {
            "type": "integer",
            "description": "Total number of active projects",
            "format": "int32"
          },
          "TotalClosedProjects": {
            "type": "integer",
            "description": "Total number of closed projects",
            "format": "int32"
          },
          "TotalInactiveProjects": {
            "type": "integer",
            "description": "Total number of inactive projects",
            "format": "int32"
          },
          "TotalProjectRevenue": {
            "type": "number",
            "description": "Total project revenue",
            "format": "double"
          },
          "TotalActiveProjectRevenue": {
            "type": "number",
            "description": "Total active project revenue",
            "format": "double"
          },
          "TotalClosedProjectRevenue": {
            "type": "number",
            "description": "Total closed project revenue",
            "format": "double"
          },
          "TotalInactiveProjectRevenue": {
            "type": "number",
            "description": "Total inactive project revenue",
            "format": "double"
          },
          "TotalActivity": {
            "type": "integer",
            "description": "Total activity count",
            "format": "int32"
          },
          "TotalExpenses": {
            "type": "number",
            "description": "Total activity expenses",
            "format": "double"
          },
          "UserMostRecentlyChangedBy": {
            "maxLength": 255,
            "type": "string",
            "description": "User who most recently changed this entity",
            "nullable": true
          },
          "ReferringEntityClass": {
            "$ref": "#/components/schemas/ReferringEntityClass"
          },
          "Channel": {
            "$ref": "#/components/schemas/Channel"
          },
          "SubChannel": {
            "$ref": "#/components/schemas/SubChannel"
          }
        },
        "additionalProperties": false,
        "description": "Unified model for referring entities that combines the functionality of referring Accounts and Contacts\r\nSupports both company and individual referral sources\r\nMigrated from Account (with AccountType=\"Referring Account\") and Contact (with RefContactClass=\"Referring Contact\")"
      },
      "ReferringEntityAddress": {
        "type": "object",
        "properties": {
          "ReferringEntityAddressId": {
            "type": "integer",
            "format": "int32"
          },
          "ReferringEntityId": {
            "type": "integer",
            "description": "Foreign key to ReferringEntity",
            "format": "int32"
          },
          "AddressId": {
            "type": "integer",
            "description": "Foreign key to legacy Address table (existing data uses this)\r\nNullable for records migrated to V2-only",
            "format": "int32",
            "nullable": true
          },
          "AddressV2Id": {
            "type": "integer",
            "description": "Foreign key to AddressV2 (new clean address model)\r\nNullable until migrated to V2 system",
            "format": "int32",
            "nullable": true
          },
          "OtherAddressTypeDescription": {
            "maxLength": 100,
            "type": "string",
            "description": "Free-text description if AddressType = \"Other\"",
            "nullable": true
          },
          "IsPrimary": {
            "type": "boolean",
            "description": "Marks whether this address is the primary address for the referring entity"
          },
          "InActive": {
            "type": "boolean",
            "description": "Soft-delete flag for the assignment"
          },
          "CreateDate": {
            "type": "string",
            "description": "Audit fields",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "ReferringEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "Address": {
            "$ref": "#/components/schemas/Address"
          },
          "AddressV2": {
            "$ref": "#/components/schemas/AddressV2"
          }
        },
        "additionalProperties": false,
        "description": "Link table associating a ReferringEntity with an AddressV2.\r\nAllows multiple addresses per entity (e.g., Home, Office) with type classification.\r\nUpdated to use AddressV2 (clean address data) instead of legacy Address table.\r\nPhone/email contact info stored on ReferringEntity itself, not per-address."
      },
      "ReferringEntityClass": {
        "type": "object",
        "properties": {
          "ReferringEntityClassId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "type": "string",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "ReferringEntities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferringEntity"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ReferringEntityHobbyAssignment": {
        "required": [
          "HobbyId",
          "ReferringEntityId"
        ],
        "type": "object",
        "properties": {
          "ReferringEntityHobbyAssignmentId": {
            "type": "integer",
            "description": "Surrogate primary key for the mapping row",
            "format": "int32"
          },
          "ReferringEntityId": {
            "type": "integer",
            "description": "FK to the referring entity",
            "format": "int32"
          },
          "HobbyId": {
            "type": "integer",
            "description": "FK to the hobby",
            "format": "int32"
          },
          "InActive": {
            "type": "boolean",
            "description": "Soft-delete flag for the assignment"
          },
          "CreateDate": {
            "type": "string",
            "description": "Creation timestamp",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "description": "Creating user",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "description": "Last update timestamp",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "description": "Last updating user",
            "nullable": true
          },
          "ReferringEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "Hobby": {
            "$ref": "#/components/schemas/Hobby"
          }
        },
        "additionalProperties": false,
        "description": "Mapping table allowing a ReferringEntity to be assigned multiple Hobbies.\r\nStored as a separate entity to support audit fields and soft-delete on the assignment."
      },
      "ReferringEntityType": {
        "required": [
          "Description"
        ],
        "type": "object",
        "properties": {
          "ReferringEntityTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "maxLength": 101,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "IsBuilding": {
            "type": "boolean",
            "description": "Indicates whether this referring entity type is associated with a building.\r\nDefault: false"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "ReferringEntities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferringEntity"
            },
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines the types of referring entities (e.g., Insurance Adjuster, Attorney, Restoration Company, etc.)\r\nReplaces the need for AccountType and RefContactClass for referring entities"
      },
      "ReferringEntityTypeAssignment": {
        "required": [
          "ReferringEntityId",
          "ReferringEntityTypeId"
        ],
        "type": "object",
        "properties": {
          "ReferringEntityTypeAssignmentId": {
            "type": "integer",
            "description": "Primary key for the mapping row",
            "format": "int32"
          },
          "ReferringEntityId": {
            "type": "integer",
            "description": "FK to ReferringEntity (the node)",
            "format": "int32"
          },
          "ReferringEntityTypeId": {
            "type": "integer",
            "description": "FK to ReferringEntityType (the assigned type)",
            "format": "int32"
          },
          "InActive": {
            "type": "boolean",
            "description": "Soft-delete flag for the assignment row"
          },
          "CreateDate": {
            "type": "string",
            "description": "Audit: creation timestamp",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "description": "Audit: creating user",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "description": "Audit: last update timestamp",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "description": "Audit: last updating user",
            "nullable": true
          },
          "ReferringEntity": {
            "$ref": "#/components/schemas/ReferringEntity"
          },
          "ReferringEntityType": {
            "$ref": "#/components/schemas/ReferringEntityType"
          }
        },
        "additionalProperties": false,
        "description": "Link table allowing a ReferringEntity to have multiple ReferringEntityTypes\r\nIntroduced as a mapping table so entities can be typed with zero, one or many types.\r\nDesigned with a surrogate key for simpler EF usage and to make future extensions easier."
      },
      "ResendMicrodepositEmailRequest": {
        "type": "object",
        "properties": {
          "Email": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RespondToEventInviteVm": {
        "type": "object",
        "properties": {
          "Response": {
            "type": "string",
            "description": "accept | tentative | decline",
            "nullable": true
          },
          "Comment": {
            "type": "string",
            "description": "Optional message sent back to the organizer.",
            "nullable": true
          },
          "SendResponse": {
            "type": "boolean",
            "description": "Whether to send a response email to the organizer (default true)."
          }
        },
        "additionalProperties": false
      },
      "RestoreLoyaltyBalanceRequest": {
        "type": "object",
        "properties": {
          "Amount": {
            "type": "number",
            "description": "Gets or sets the amount to restore",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Request model for restoring loyalty rewards balance"
      },
      "RetryGpIntegrationModel": {
        "required": [
          "IntegrationType"
        ],
        "type": "object",
        "properties": {
          "IntegrationType": {
            "minLength": 1,
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "RevenueSummaryViewModel": {
        "type": "object",
        "properties": {
          "TotalJobRevenue": {
            "type": "number",
            "description": "The total job revenue",
            "format": "double"
          },
          "TotalCommissionPaid": {
            "type": "number",
            "description": "The total commission paid",
            "format": "double"
          },
          "NumberOfCredits": {
            "type": "integer",
            "description": "The number of credits",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "View model for revenue summary"
      },
      "ReviewJobVm": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "integer",
            "format": "int32"
          },
          "BusDevContact": {
            "type": "string",
            "nullable": true
          },
          "AdSourceId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferredContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringAccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Reviewed": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SaveCalendarFilterPresetVm": {
        "type": "object",
        "properties": {
          "Name": {
            "type": "string",
            "nullable": true
          },
          "FilterJson": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SaveCalendarViewClaimVm": {
        "type": "object",
        "properties": {
          "Name": {
            "type": "string",
            "nullable": true
          },
          "FilterJson": {
            "type": "string",
            "nullable": true
          },
          "SortOrder": {
            "type": "integer",
            "format": "int32"
          },
          "IsActive": {
            "type": "boolean"
          },
          "AssignedUserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "DefaultUserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SaveEventMetadataVm": {
        "type": "object",
        "properties": {
          "MetadataScope": {
            "type": "string",
            "description": "occurrence or series — default series when recurring.",
            "nullable": true
          },
          "CalendarEventTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectJobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TeamId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TeamIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "IsGeneralCalendarOrganizer": {
            "type": "boolean"
          },
          "AttendeeEmails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "ActivityTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ExpectedContentFingerprint": {
            "type": "string",
            "description": "Optional content fingerprint for edit-modal concurrency (same as UpdateEvent).",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SaveJobHierarchyEdge": {
        "type": "object",
        "properties": {
          "From": {
            "type": "string",
            "nullable": true
          },
          "To": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SaveJobHierarchyNode": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "nullable": true
          },
          "Label": {
            "type": "string",
            "nullable": true
          },
          "IsRoot": {
            "type": "boolean"
          },
          "IsInitialAccount": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SaveJobHierarchyRequest": {
        "type": "object",
        "properties": {
          "Nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SaveJobHierarchyNode"
            },
            "nullable": true
          },
          "Edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SaveJobHierarchyEdge"
            },
            "nullable": true
          },
          "Initial": {
            "type": "string",
            "nullable": true
          },
          "Version": {
            "type": "string",
            "nullable": true
          },
          "Overwrite": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "description": "DTO for saving a hierarchy"
      },
      "SaveSupplyUsageDayRequest": {
        "type": "object",
        "properties": {
          "QtyDehumidifiersLGR": {
            "type": "string",
            "nullable": true
          },
          "QtyFanAirMover": {
            "type": "string",
            "nullable": true
          },
          "QtyAirScrubberGuardian": {
            "type": "string",
            "nullable": true
          },
          "QtyAntimicrobialBenefect": {
            "type": "string",
            "nullable": true
          },
          "QtyBagContractor6Mil": {
            "type": "string",
            "nullable": true
          },
          "QtyCartDemolition": {
            "type": "string",
            "nullable": true
          },
          "QtyBladesDemo": {
            "type": "string",
            "nullable": true
          },
          "QtyChemicalBleach": {
            "type": "string",
            "nullable": true
          },
          "QtyRags": {
            "type": "string",
            "nullable": true
          },
          "QtyPumpUpSprayer": {
            "type": "string",
            "nullable": true
          },
          "QtyMopHeads": {
            "type": "string",
            "nullable": true
          },
          "QtyToolSetDemolition": {
            "type": "string",
            "nullable": true
          },
          "QtyDuctTape": {
            "type": "string",
            "nullable": true
          },
          "QtyBlueTape": {
            "type": "string",
            "nullable": true
          },
          "QtyPlasticSheeting": {
            "type": "string",
            "nullable": true
          },
          "QtyVacuumHEPA": {
            "type": "string",
            "nullable": true
          },
          "QtyPortableExtractor": {
            "type": "string",
            "nullable": true
          },
          "QtyGlovesLatex": {
            "type": "string",
            "nullable": true
          },
          "QtySafetyGlasses": {
            "type": "string",
            "nullable": true
          },
          "QtyGlovesCotton": {
            "type": "string",
            "nullable": true
          },
          "QtyRespiratorsN95": {
            "type": "string",
            "nullable": true
          },
          "QtyExtensionCord50": {
            "type": "string",
            "nullable": true
          },
          "Qty5GallonBuckets": {
            "type": "string",
            "nullable": true
          },
          "QtyTrashContainers": {
            "type": "string",
            "nullable": true
          },
          "QtyThermalImagingCamera": {
            "type": "string",
            "nullable": true
          },
          "QtyMoistureMappingKit": {
            "type": "string",
            "nullable": true
          },
          "QtyBoxTruck": {
            "type": "string",
            "nullable": true
          },
          "QtyPickupTruck": {
            "type": "string",
            "nullable": true
          },
          "QtyPassengerVan": {
            "type": "string",
            "nullable": true
          },
          "AdditionalItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SupplyUsageAdditionalItemSave"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SendJobSmsRequest": {
        "type": "object",
        "properties": {
          "TemplateKey": {
            "type": "string",
            "nullable": true
          },
          "TechnicianUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TechnicianUserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "VehicleDataId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "IncludeEta": {
            "type": "boolean"
          },
          "EtaLocal": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "RecipientContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "RecipientName": {
            "type": "string",
            "nullable": true
          },
          "RecipientPhone": {
            "type": "string",
            "nullable": true
          },
          "UseManualPhone": {
            "type": "boolean"
          },
          "ManualSmsConsent": {
            "type": "boolean"
          },
          "EnrollmentEntityType": {
            "type": "string",
            "nullable": true
          },
          "EnrollmentEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AuditNoteText": {
            "type": "string",
            "nullable": true
          },
          "PortalThreadEmail": {
            "type": "string",
            "description": "Portal share email for LiveVideoInvite (live chat is private per recipient email).",
            "nullable": true
          },
          "DeliveryChannel": {
            "type": "string",
            "description": "LiveVideoInvite only: \"Email\" or \"Sms\". Default Sms.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SendPaymentRequestVm": {
        "required": [
          "EmailAddresses"
        ],
        "type": "object",
        "properties": {
          "ArTrxId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ArTrxIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "EmailAddresses": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "CustomSubject": {
            "maxLength": 200,
            "type": "string",
            "nullable": true
          },
          "CustomMessage": {
            "type": "string",
            "nullable": true
          },
          "ExpiryDays": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AllInvoiceIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "SendPaymentRequestWithPdfVm": {
        "required": [
          "PaymentGuid",
          "PdfBase64",
          "PdfFileName"
        ],
        "type": "object",
        "properties": {
          "PaymentGuid": {
            "minLength": 1,
            "type": "string"
          },
          "PdfBase64": {
            "minLength": 1,
            "type": "string"
          },
          "PdfFileName": {
            "minLength": 1,
            "type": "string"
          },
          "CustomMessage": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SendStatementPaymentWithPdfVm": {
        "type": "object",
        "properties": {
          "InvoiceIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "List of invoice IDs to include in the payment request",
            "nullable": true
          },
          "EmailAddresses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Email addresses to send the payment request to",
            "nullable": true
          },
          "PdfBase64": {
            "type": "string",
            "description": "Base64 encoded PDF content",
            "nullable": true
          },
          "PdfFileName": {
            "type": "string",
            "description": "Name of the PDF file",
            "nullable": true
          },
          "CustomSubject": {
            "type": "string",
            "description": "Custom subject for the email",
            "nullable": true
          },
          "CustomMessage": {
            "type": "string",
            "description": "Custom message to include in the email",
            "nullable": true
          },
          "ExpiryDays": {
            "type": "integer",
            "description": "Number of days until the payment request expires",
            "format": "int32",
            "nullable": true
          },
          "WaiveCCFee": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "View model for sending AR Statement payment requests with PDF attachment"
      },
      "SentNotification": {
        "type": "object",
        "properties": {
          "SentNotificationId": {
            "type": "integer",
            "format": "int32"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreatedUser": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "CreatedDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdatedUser": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "UpdatedDate": {
            "type": "string",
            "format": "date-time"
          },
          "Body": {
            "type": "string",
            "nullable": true
          },
          "ToPhoneNumber": {
            "type": "string",
            "nullable": true
          },
          "ToEmail": {
            "type": "string",
            "nullable": true
          },
          "FromPhoneNumber": {
            "type": "string",
            "nullable": true
          },
          "FromEmail": {
            "type": "string",
            "nullable": true
          },
          "IsEmail": {
            "type": "boolean"
          },
          "IsSMS": {
            "type": "boolean"
          },
          "IsInternal": {
            "type": "boolean"
          },
          "IsExternal": {
            "type": "boolean"
          },
          "SentEmail": {
            "type": "boolean"
          },
          "SentSMS": {
            "type": "boolean"
          },
          "InternalAlertViewed": {
            "type": "boolean"
          },
          "SMSFailed": {
            "type": "boolean"
          },
          "EmailFailed": {
            "type": "boolean"
          },
          "IsScheduled": {
            "type": "boolean"
          },
          "ScheduleDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ScheduleComplete": {
            "type": "boolean"
          },
          "ScheduleFrequency": {
            "type": "string",
            "nullable": true
          },
          "RecipientUserId": {
            "type": "integer",
            "format": "int32"
          },
          "NotificationTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "SMSErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "EmailErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "UrlParams": {
            "type": "string",
            "nullable": true
          },
          "RecipientUser": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "NotificationType": {
            "$ref": "#/components/schemas/NotificationType"
          }
        },
        "additionalProperties": false
      },
      "SetCalendarDefaultBuiltinVm": {
        "type": "object",
        "properties": {
          "BuiltinId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SetCalendarDefaultViewClaimVm": {
        "type": "object",
        "properties": {
          "ViewClaimId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "SetCalendarIntegrationSettingsVm": {
        "type": "object",
        "properties": {
          "BlockExternalInvites": {
            "type": "boolean"
          },
          "BlockOutlookSync": {
            "type": "boolean",
            "description": "P2 → Outlook outbound."
          },
          "BlockOutlookInboundSync": {
            "type": "boolean",
            "description": "Outlook → P2 inbound."
          },
          "AllowDragResize": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "SetGeneralOrganizerVm": {
        "type": "object",
        "properties": {
          "Email": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SetOutlookOriginEditPolicyVm": {
        "type": "object",
        "properties": {
          "Policy": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SignCotWDayRequest": {
        "type": "object",
        "properties": {
          "SignatureUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SignOutRequest": {
        "type": "object",
        "properties": {
          "SignOutTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SignScopeSheetRequest": {
        "type": "object",
        "properties": {
          "SignatureUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SignSupplyUsageDayRequest": {
        "type": "object",
        "properties": {
          "SignatureUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SiteSettings": {
        "type": "object",
        "properties": {
          "SiteSettingId": {
            "type": "integer",
            "format": "int32"
          },
          "NotificationOriginatingEmail": {
            "type": "string",
            "nullable": true
          },
          "NotificationOriginatingEmailName": {
            "type": "string",
            "nullable": true
          },
          "NotificationOriginatingEmailForCustomers": {
            "type": "string",
            "nullable": true
          },
          "NotificationOriginatingEmailForCustomersName": {
            "type": "string",
            "nullable": true
          },
          "NotificationOriginatingPhoneNumber": {
            "type": "string",
            "nullable": true
          },
          "SendSMSNotifications": {
            "type": "boolean"
          },
          "SendEmailNotifications": {
            "type": "boolean"
          },
          "AllNotificationsDisabled": {
            "type": "boolean"
          },
          "SendInternalNotifications": {
            "type": "boolean"
          },
          "SendExternalNotifications": {
            "type": "boolean"
          },
          "TodaysJobsDefaultTab": {
            "type": "integer",
            "format": "int32"
          },
          "CalendarGeneralOrganizerEmail": {
            "type": "string",
            "nullable": true
          },
          "CalendarOutlookOriginEditPolicy": {
            "type": "string",
            "nullable": true
          },
          "CalendarBlockExternalInvites": {
            "type": "boolean"
          },
          "CalendarBlockOutlookSync": {
            "type": "boolean",
            "description": "When true, P2 will not create/update/delete events in Microsoft Outlook (outbound)."
          },
          "CalendarBlockOutlookInboundSync": {
            "type": "boolean",
            "description": "When true, Outlook→P2 pulls (webhooks, SyncUser) are skipped (inbound)."
          },
          "CalendarAllowDragResize": {
            "type": "boolean",
            "description": "When true, standalone calendar users can enter Arrange mode to drag/resize appointments."
          },
          "CalendarEnabled": {
            "type": "boolean",
            "description": "When false, hide calendar sidebar page and all embedded calendars site-wide."
          },
          "CustomerPortalEnabled": {
            "type": "boolean",
            "description": "When false, hide job/project Portal tabs and SMS live video invite."
          }
        },
        "additionalProperties": false
      },
      "SubChannel": {
        "required": [
          "SubChannelDesc"
        ],
        "type": "object",
        "properties": {
          "SubChannelId": {
            "type": "integer",
            "format": "int32"
          },
          "SubChannelDesc": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "ChannelSubChannels": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChannelSubChannel"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SubJobType": {
        "required": [
          "JobTypeId",
          "SubJobTypeDesc"
        ],
        "type": "object",
        "properties": {
          "SubJobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "SubJobTypeDesc": {
            "maxLength": 31,
            "minLength": 1,
            "type": "string"
          },
          "JobTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "JobType": {
            "$ref": "#/components/schemas/JobType"
          }
        },
        "additionalProperties": false
      },
      "SubmitPaymentRequest": {
        "type": "object",
        "properties": {
          "PaymentMethodId": {
            "type": "string",
            "description": "Stripe PaymentMethod ID created client-side via stripe.createPaymentMethod({ elements })",
            "nullable": true
          },
          "CustomerEmail": {
            "type": "string",
            "nullable": true
          },
          "Amount": {
            "type": "number",
            "description": "Gross amount (invoice net + fee). Server validates against PaymentIntent amount.",
            "format": "double"
          },
          "InvoiceAmount": {
            "type": "number",
            "description": "Net invoice amount (excluding processing fee). Used as fallback when PaymentIntent metadata is unavailable (e.g. dev mode).",
            "format": "double",
            "nullable": true
          },
          "SelectedPaymentMethod": {
            "type": "string",
            "description": "Payment method the user selected in the UI: creditcard / debitcard / ach",
            "nullable": true
          },
          "ReturnUrl": {
            "type": "string",
            "description": "Return URL used for 3DS / bank redirect flows",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SupervisorRequest": {
        "type": "object",
        "properties": {
          "UserId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "SupplyUsageAdditionalItemSave": {
        "type": "object",
        "properties": {
          "ItemName": {
            "type": "string",
            "nullable": true
          },
          "Quantity": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Team": {
        "required": [
          "TeamDesc"
        ],
        "type": "object",
        "properties": {
          "TeamId": {
            "type": "integer",
            "format": "int32"
          },
          "TeamDesc": {
            "maxLength": 101,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "HideInReporting": {
            "type": "boolean"
          },
          "CalendarOnly": {
            "type": "boolean"
          },
          "AllowOnCalendar": {
            "type": "boolean",
            "description": "Team can appear in calendar filters and be tagged on appointments.\r\nForced on when P2.Api.Models.DomainModels.Team.CalendarOnly is true. Regular teams can opt in too."
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "TeamUsers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamUser"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TeamNotificationVm": {
        "type": "object",
        "properties": {
          "NotificationId": {
            "type": "integer",
            "format": "int32"
          },
          "NotificationTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "TeamId": {
            "type": "integer",
            "format": "int32"
          },
          "TeamDesc": {
            "type": "string",
            "nullable": true
          },
          "JobType": {
            "type": "string",
            "nullable": true
          },
          "SubJobType": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          },
          "Selected": {
            "type": "boolean"
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TeamPosition": {
        "required": [
          "Position"
        ],
        "type": "object",
        "properties": {
          "TeamPosId": {
            "type": "integer",
            "format": "int32"
          },
          "Position": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string"
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TeamUser": {
        "required": [
          "TeamId",
          "TeamPosId",
          "UserId"
        ],
        "type": "object",
        "properties": {
          "TeamUserId": {
            "type": "integer",
            "format": "int32"
          },
          "TeamId": {
            "type": "integer",
            "format": "int32"
          },
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "TeamPosId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "Team": {
            "$ref": "#/components/schemas/Team"
          },
          "User": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "Position": {
            "$ref": "#/components/schemas/TeamPosition"
          }
        },
        "additionalProperties": false
      },
      "TempAgency": {
        "required": [
          "AgencyName"
        ],
        "type": "object",
        "properties": {
          "TempAgencyId": {
            "type": "integer",
            "format": "int32"
          },
          "AgencyName": {
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "IsActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TempAgencyPayRate": {
        "required": [
          "HourlyRate",
          "SkillLevel",
          "TempAgencyId"
        ],
        "type": "object",
        "properties": {
          "TempAgencyPayRateId": {
            "type": "integer",
            "format": "int32"
          },
          "TempAgencyId": {
            "type": "integer",
            "format": "int32"
          },
          "TempAgency": {
            "$ref": "#/components/schemas/TempAgency"
          },
          "SkillLevel": {
            "maxLength": 20,
            "minLength": 1,
            "type": "string"
          },
          "HourlyRate": {
            "type": "number",
            "format": "double"
          },
          "OvertimeRate": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TempWorkerSignIn": {
        "required": [
          "SignInDate",
          "TemporaryWorkerId"
        ],
        "type": "object",
        "properties": {
          "TempWorkerSignInId": {
            "type": "integer",
            "format": "int32"
          },
          "TemporaryWorkerId": {
            "type": "integer",
            "format": "int32"
          },
          "TemporaryWorker": {
            "$ref": "#/components/schemas/TemporaryWorker"
          },
          "SignInDate": {
            "type": "string",
            "format": "date-time"
          },
          "SignInTime": {
            "type": "string",
            "format": "date-time"
          },
          "SignOutTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TempWorkerTimeEntry": {
        "type": "object",
        "properties": {
          "TempWorkerTimeEntryId": {
            "type": "integer",
            "format": "int32"
          },
          "TemporaryWorkerId": {
            "type": "integer",
            "format": "int32"
          },
          "TemporaryWorker": {
            "$ref": "#/components/schemas/TemporaryWorker"
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "PhaseId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ElementId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ElementPhaseId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "IsShopTime": {
            "type": "boolean"
          },
          "IsCabinetShopTime": {
            "type": "boolean"
          },
          "Phase": {
            "$ref": "#/components/schemas/JobPhase"
          },
          "Element": {
            "$ref": "#/components/schemas/JobElement"
          },
          "ElementPhase": {
            "$ref": "#/components/schemas/JobElementPhase"
          },
          "TimeInDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TimeInTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TimeOutDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TimeOutTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Hours": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "HoursReg": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "HoursOt": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "RegRate": {
            "type": "number",
            "description": "Regular rate snapshot from agency pay rate at time of entry creation.",
            "format": "double",
            "nullable": true
          },
          "OtRate": {
            "type": "number",
            "description": "OT rate snapshot from agency pay rate at time of entry creation.",
            "format": "double",
            "nullable": true
          },
          "FieldApproved": {
            "type": "boolean"
          },
          "FieldApprovedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "FieldApprovedByUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "PayrollApproved": {
            "type": "boolean"
          },
          "PayrollApprovedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "PayrollApprovedByUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "IsReadyForApproval": {
            "type": "boolean"
          },
          "LinkedToGp": {
            "type": "integer",
            "description": "0 = not synced, 1 = synced OK, 2 = error",
            "format": "int32"
          },
          "GpJeNumber": {
            "type": "string",
            "nullable": true
          },
          "SuccessMessage": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "DayOfWeek": {
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "CreatedByUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "CanCurrentUserFieldApprove": {
            "type": "boolean"
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TemporaryWorker": {
        "required": [
          "FirstName",
          "LastName",
          "TempAgencyId"
        ],
        "type": "object",
        "properties": {
          "TemporaryWorkerId": {
            "type": "integer",
            "format": "int32"
          },
          "FirstName": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string"
          },
          "MiddleName": {
            "maxLength": 51,
            "type": "string",
            "nullable": true
          },
          "LastName": {
            "maxLength": 51,
            "minLength": 1,
            "type": "string"
          },
          "DateOfBirth": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TempAgencyId": {
            "type": "integer",
            "format": "int32"
          },
          "TempAgency": {
            "$ref": "#/components/schemas/TempAgency"
          },
          "SkillLevel": {
            "maxLength": 20,
            "type": "string",
            "nullable": true
          },
          "IsActive": {
            "type": "boolean"
          },
          "InactivateReason": {
            "type": "string",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TimeEntry": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "integer",
            "format": "int32"
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "PhaseId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ElementId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ElementPhaseId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TimeInTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TimeInDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TimeOutTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "TimeOutDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ArrivalTimeTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ArrivalTimeDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "Hours": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "HoursReg": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "HoursOt": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "HoursDt": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "type": "string",
            "nullable": true
          },
          "IsShopTime": {
            "type": "boolean"
          },
          "IsAdminTime": {
            "type": "boolean"
          },
          "IsDormTime": {
            "type": "boolean"
          },
          "IsCabinetShopTime": {
            "type": "boolean"
          },
          "FieldApproved": {
            "type": "boolean"
          },
          "FieldApprovedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "FieldApprovedByUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "PayrollApproved": {
            "type": "boolean"
          },
          "PayrollApprovedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "PayrollApprovedByUserId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Location": {
            "type": "string",
            "nullable": true
          },
          "Department": {
            "type": "string",
            "nullable": true
          },
          "DayOfWeek": {
            "type": "string",
            "nullable": true
          },
          "GpJeNumber": {
            "type": "string",
            "nullable": true
          },
          "LinkedToGp": {
            "type": "integer",
            "description": "0=Not Tried,1=Linked,2=Error",
            "format": "int32"
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "SuccessMessage": {
            "type": "string",
            "nullable": true
          },
          "IsReadyForApproval": {
            "type": "boolean"
          },
          "Reconciled": {
            "type": "boolean"
          },
          "Job": {
            "$ref": "#/components/schemas/Job"
          },
          "User": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "Phase": {
            "$ref": "#/components/schemas/JobPhase"
          },
          "Element": {
            "$ref": "#/components/schemas/JobElement"
          },
          "ElementPhase": {
            "$ref": "#/components/schemas/JobElementPhase"
          }
        },
        "additionalProperties": false
      },
      "ToggleManualBankEntryRequest": {
        "type": "object",
        "properties": {
          "Value": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ToggleReviewedRequest": {
        "type": "object",
        "properties": {
          "Reviewed": {
            "type": "boolean",
            "description": "Desired Reviewed state."
          }
        },
        "additionalProperties": false,
        "description": "Request payload to set the Reviewed state on a line."
      },
      "TrackHierarchyEntry": {
        "type": "object",
        "properties": {
          "EntityId": {
            "type": "integer",
            "format": "int32"
          },
          "EntityName": {
            "type": "string",
            "nullable": true
          },
          "Action": {
            "type": "string",
            "nullable": true
          },
          "RelatedEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "RelatedEntityName": {
            "type": "string",
            "nullable": true
          },
          "RelationshipType": {
            "type": "string",
            "nullable": true
          },
          "Comment": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "TrackHierarchyUpdateRequest": {
        "type": "object",
        "properties": {
          "EntityIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Gets or sets the referring entity IDs touched during the hierarchy save",
            "nullable": true
          },
          "TrackingEntries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TrackHierarchyEntry"
            },
            "description": "Gets or sets detailed tracking entries for each entity",
            "nullable": true
          },
          "Comment": {
            "type": "string",
            "description": "Gets or sets an optional comment to store with the tracking record",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for logging hierarchy tracking entries"
      },
      "TruckRequest": {
        "type": "object",
        "properties": {
          "VehicleDataId": {
            "type": "integer",
            "format": "int32"
          },
          "Temps": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ExtraNotes": {
            "type": "string",
            "nullable": true
          },
          "Employees": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EmployeeRequest"
            },
            "nullable": true
          },
          "Supervisors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SupervisorRequest"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UnlinkReferrerAddressesRequest": {
        "type": "object",
        "properties": {
          "SoftDelete": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateCalendarEventNoteVm": {
        "type": "object",
        "properties": {
          "NoteText": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateCalendarEventPhotoVm": {
        "type": "object",
        "properties": {
          "Note": {
            "type": "string",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateCalendarEventVm": {
        "type": "object",
        "properties": {
          "ApplicationUserId": {
            "type": "integer",
            "description": "When set, moves the appointment to this employee's calendar (recreates in Outlook).",
            "format": "int32"
          },
          "AssignedToUserIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "AttendeeEmails": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "Subject": {
            "type": "string",
            "nullable": true
          },
          "StartDateTimeUtc": {
            "type": "string",
            "format": "date-time"
          },
          "EndDateTimeUtc": {
            "type": "string",
            "format": "date-time"
          },
          "IsAllDay": {
            "type": "boolean"
          },
          "Location": {
            "type": "string",
            "nullable": true
          },
          "Body": {
            "type": "string",
            "nullable": true
          },
          "Recurrence": {
            "$ref": "#/components/schemas/CalendarRecurrenceVm"
          },
          "EditScope": {
            "type": "string",
            "description": "occurrence or series — default occurrence.",
            "nullable": true
          },
          "MetadataScope": {
            "type": "string",
            "description": "occurrence or series — default series when recurring.",
            "nullable": true
          },
          "CalendarEventTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectJobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ContactId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "AccountId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ActivityTypeId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TeamId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "TeamIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "Notes": {
            "type": "string",
            "nullable": true
          },
          "ExpectedContentFingerprint": {
            "type": "string",
            "description": "When set, returns 409 if user-visible content changed since the editor opened.",
            "nullable": true
          },
          "Sensitivity": {
            "type": "string",
            "description": "normal | personal | private | confidential — null leaves sensitivity unchanged.",
            "nullable": true
          },
          "ShowAs": {
            "type": "string",
            "description": "busy | tentative | free | oof | workingelsewhere — updates the logged-in user's calendar copy.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateGpSyncErrorModel": {
        "required": [
          "ErrorMessage"
        ],
        "type": "object",
        "properties": {
          "ErrorMessage": {
            "minLength": 1,
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "UpdateJobLoyaltyRewardRequest": {
        "type": "object",
        "properties": {
          "LoyaltyRewardAmount": {
            "type": "number",
            "description": "The updated loyalty reward amount",
            "format": "double",
            "nullable": true
          },
          "Status": {
            "type": "string",
            "description": "The updated status (Available, Applied, Expired, Pending)",
            "nullable": true
          },
          "LoyaltyRewardsRate": {
            "type": "number",
            "description": "The updated loyalty rewards rate (decimal, e.g., 0.10 for 10%)",
            "format": "double",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "description": "The updated referring entity ID (if changing the entity)",
            "format": "int32",
            "nullable": true
          },
          "JobId": {
            "type": "integer",
            "description": "The updated job ID (if moving the reward to a different job)",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for updating a loyalty reward via job endpoint"
      },
      "UpdateMappingRequestVm": {
        "type": "object",
        "properties": {
          "Mapping": {
            "$ref": "#/components/schemas/XactimateMapping"
          },
          "EstimatedProfitMargin": {
            "type": "number",
            "format": "double"
          },
          "MappingTypeId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "UpdatePaymentIntentRequestVm": {
        "required": [
          "PaymentMethod"
        ],
        "type": "object",
        "properties": {
          "PaymentMethod": {
            "minLength": 1,
            "type": "string"
          },
          "CardCountry": {
            "type": "string",
            "description": "Two-letter country code of the payment method (for international fee calculation)",
            "nullable": true
          },
          "CardFunding": {
            "type": "string",
            "description": "Stripe card funding type when PaymentMethod is a card: \"credit\", \"debit\", \"prepaid\", or \"unknown\"",
            "nullable": true
          },
          "Amount": {
            "type": "number",
            "description": "Optional client-calculated unpaid invoice amount (used as an override if smaller than server total)",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for updating payment intent amount based on selected payment method"
      },
      "UpdatePaymentRequestVm": {
        "type": "object",
        "properties": {
          "EmailAddresses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "CustomSubject": {
            "type": "string",
            "nullable": true
          },
          "CustomMessage": {
            "type": "string",
            "nullable": true
          },
          "WaiveCCFee": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateReferrerLoyaltyRewardRequest": {
        "type": "object",
        "properties": {
          "LoyaltyRewardAmount": {
            "type": "number",
            "description": "The updated loyalty reward amount",
            "format": "double",
            "nullable": true
          },
          "Status": {
            "type": "string",
            "description": "The updated status (Available, Applied, Expired, Pending)",
            "nullable": true
          },
          "LoyaltyRewardsRate": {
            "type": "number",
            "description": "The updated loyalty rewards rate (decimal, e.g., 0.10 for 10%)",
            "format": "double",
            "nullable": true
          },
          "ReferringEntityId": {
            "type": "integer",
            "description": "The referring entity ID (for re-assignment between entities)",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request model for updating a loyalty reward via referrer endpoint"
      },
      "UpdateRelationshipRequest": {
        "type": "object",
        "properties": {
          "RelationshipType": {
            "type": "string",
            "nullable": true
          },
          "CommissionSharePercentage": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "Notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateStatusRequest": {
        "type": "object",
        "properties": {
          "Status": {
            "type": "string",
            "nullable": true
          },
          "Notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateTempWorkerSignInTimesRequest": {
        "type": "object",
        "properties": {
          "SignInTime": {
            "type": "string",
            "format": "date-time"
          },
          "SignOutTime": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserNotificationVm": {
        "type": "object",
        "properties": {
          "NotificationId": {
            "type": "integer",
            "format": "int32"
          },
          "NotificationTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "Name": {
            "type": "string",
            "nullable": true
          },
          "JobType": {
            "type": "string",
            "nullable": true
          },
          "SubJobType": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          },
          "Selected": {
            "type": "boolean"
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserPreference": {
        "type": "object",
        "properties": {
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserRolesVm": {
        "type": "object",
        "properties": {
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "RoleId": {
            "type": "integer",
            "format": "int32"
          },
          "RoleName": {
            "type": "string",
            "nullable": true
          },
          "IsAssigned": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ValidateCardTypeRequest": {
        "type": "object",
        "properties": {
          "PaymentMethodId": {
            "type": "string",
            "nullable": true
          },
          "SelectedPaymentMethod": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "VehicleData": {
        "type": "object",
        "properties": {
          "VehicleDataId": {
            "type": "integer",
            "format": "int32"
          },
          "Name": {
            "type": "string",
            "nullable": true
          },
          "VehicleNumber": {
            "type": "string",
            "nullable": true
          },
          "RegistrationNumber": {
            "type": "string",
            "nullable": true
          },
          "VIN": {
            "type": "string",
            "nullable": true
          },
          "Make": {
            "type": "string",
            "nullable": true
          },
          "Year": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Model": {
            "type": "string",
            "nullable": true
          },
          "TankCapacity": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "HighwayMPG": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "CityMPG": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "VehicleSize": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "FuelType": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "HasNavigationDevice": {
            "type": "boolean"
          },
          "HasTachograph": {
            "type": "boolean",
            "nullable": true
          },
          "VehicleId": {
            "type": "string",
            "nullable": true
          },
          "Odometer": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "LastUpdated": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "SeatCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "OriginatedFromSync": {
            "type": "boolean"
          },
          "InActive": {
            "type": "boolean"
          },
          "Latitude": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "Longitude": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "SpeedMph": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "Heading": {
            "type": "string",
            "nullable": true
          },
          "GpsDisplayState": {
            "type": "string",
            "nullable": true
          },
          "GpsLastUpdated": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "ExcludeFromGpsSync": {
            "type": "boolean",
            "description": "When true, scheduled GPS sync never updates this vehicle."
          },
          "ExcludeFromOvernightGpsSync": {
            "type": "boolean",
            "description": "When true, scheduled GPS sync skips this vehicle overnight (10pm–6am Eastern)."
          },
          "GpsSyncIntervalDayMinutes": {
            "type": "integer",
            "description": "Daytime GPS sync interval in minutes (1 or 5). Default 1.",
            "format": "int32"
          },
          "GpsSyncIntervalOvernightMinutes": {
            "type": "integer",
            "description": "Overnight GPS sync interval in minutes (1 or 5). Default 5.",
            "format": "int32"
          },
          "UserAssignments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VehicleUserAssignment"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "VehicleUserAssignment": {
        "required": [
          "UserId",
          "VehicleDataId"
        ],
        "type": "object",
        "properties": {
          "VehicleUserAssignmentId": {
            "type": "integer",
            "format": "int32"
          },
          "UserId": {
            "type": "integer",
            "format": "int32"
          },
          "VehicleDataId": {
            "type": "integer",
            "format": "int32"
          },
          "User": {
            "$ref": "#/components/schemas/ApplicationUser"
          },
          "Vehicle": {
            "$ref": "#/components/schemas/VehicleData"
          }
        },
        "additionalProperties": false
      },
      "VideoBulkDeleteRequest": {
        "type": "object",
        "properties": {
          "Ids": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "VideoProcessingCompletedRequest": {
        "type": "object",
        "properties": {
          "VideoId": {
            "type": "integer",
            "format": "int32"
          },
          "OriginalBlobPath": {
            "type": "string",
            "nullable": true
          },
          "PlaybackBlobPath": {
            "type": "string",
            "nullable": true
          },
          "PosterBlobPath": {
            "type": "string",
            "nullable": true
          },
          "DurationSeconds": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Width": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Height": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "VideoProcessingFailedRequest": {
        "type": "object",
        "properties": {
          "VideoId": {
            "type": "integer",
            "format": "int32"
          },
          "ErrorDetails": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "VideoProcessingStartedBody": {
        "type": "object",
        "properties": {
          "VideoId": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "VideoUpdateRequest": {
        "type": "object",
        "properties": {
          "DisplayName": {
            "type": "string",
            "nullable": true
          },
          "Note": {
            "type": "string",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "DateTaken": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "VideoUploadInitRequest": {
        "type": "object",
        "properties": {
          "EntityType": {
            "type": "string",
            "nullable": true
          },
          "EntityId": {
            "type": "integer",
            "format": "int32"
          },
          "FileName": {
            "type": "string",
            "nullable": true
          },
          "FileSizeBytes": {
            "type": "integer",
            "format": "int64"
          },
          "ContentType": {
            "type": "string",
            "nullable": true
          },
          "DisplayName": {
            "type": "string",
            "nullable": true
          },
          "CategoryId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Note": {
            "type": "string",
            "nullable": true
          },
          "DurationSeconds": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "VideoZipRequest": {
        "type": "object",
        "properties": {
          "Ids": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "nullable": true
          },
          "JobId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "ProjectId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "XactimateLineItemDto": {
        "type": "object",
        "properties": {
          "XactimateLineNumber": {
            "type": "string",
            "nullable": true
          },
          "GroupDescription": {
            "type": "string",
            "nullable": true
          },
          "Description": {
            "type": "string",
            "nullable": true
          },
          "ItemAmount": {
            "type": "number",
            "format": "double"
          },
          "UnitCost": {
            "type": "number",
            "format": "double"
          },
          "Unit": {
            "type": "string",
            "nullable": true
          },
          "MaxPayOutAmount": {
            "type": "number",
            "format": "double"
          },
          "JobElementPhaseId": {
            "type": "integer",
            "description": "The JobElementPhaseId that this line item maps to\r\nPopulated during the estimate mapping process",
            "format": "int32",
            "nullable": true
          },
          "CategoryCode": {
            "type": "string",
            "description": "The original Xactimate category code for mapping lookup",
            "nullable": true
          },
          "Selector": {
            "type": "string",
            "description": "The original Xactimate selector for mapping lookup",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Shared data transfer object for raw Xactimate Excel line items\r\nUsed for FTPRP integration to avoid duplicate type definitions"
      },
      "XactimateMapping": {
        "required": [
          "JobElementId",
          "JobPhaseId",
          "XactimateCode"
        ],
        "type": "object",
        "properties": {
          "ID": {
            "type": "integer",
            "format": "int32"
          },
          "XactimateMappingTypeId": {
            "type": "integer",
            "format": "int32"
          },
          "XactimateCode": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string"
          },
          "XactimateSelector": {
            "maxLength": 50,
            "type": "string",
            "nullable": true
          },
          "JobPhaseId": {
            "type": "integer",
            "format": "int32"
          },
          "JobElementId": {
            "type": "integer",
            "format": "int32"
          },
          "JobElementPhaseId": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "InActive": {
            "type": "boolean"
          },
          "CreateDate": {
            "type": "string",
            "format": "date-time"
          },
          "UpdateDate": {
            "type": "string",
            "format": "date-time"
          },
          "CreateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "UpdateUser": {
            "maxLength": 31,
            "type": "string",
            "nullable": true
          },
          "EstimatedProfitMarginPercent": {
            "type": "number",
            "format": "double"
          },
          "JobPhase": {
            "$ref": "#/components/schemas/JobPhase"
          },
          "JobElement": {
            "$ref": "#/components/schemas/JobElement"
          },
          "JobElementPhase": {
            "$ref": "#/components/schemas/JobElementPhase"
          },
          "XactimateMappingType": {
            "$ref": "#/components/schemas/XactimateMappingType"
          }
        },
        "additionalProperties": false
      },
      "XactimateMappingType": {
        "type": "object",
        "properties": {
          "ID": {
            "type": "integer",
            "format": "int32"
          },
          "Description": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    }
  }
}