Skip to content

Endpoints

Wondering what a "Seed" is?

You may notice references to seed or seeds in the Endpoint documentation below and in the Data Models, for example /api/seeds or SeedSummaryDto.

This is a legacy alias for what is now referred to simply as a deal or deals. You can consider references to either seed or deal to be referring to the same entity and underlying data, e.g. deal.id == seed.id.

However, API paths (e.g. /api/seeds), query parameters (e.g. dealId, seedId), etc. are not interchangeable unless specified in the endpoint's documentation.

Search for Deals Using Query

Retrieve all deals. Optionally filter deals with RSQL or text search support.

GET /api/seeds

Parameters

textSearch string

Filter by any deal field, returning any deal containing any part of the text entered in any one of the deal direct fields.

search string

Filter the returned deals using query criteria text search with RSQL support.

sort string +lastModifiedTime

Sort by any direct deal fields and the following indirect deal fields: dateUpdated, lastModifiedTime (alias for dateUpdated), address, closingDate, seedScore. Sort ascending using + (e.g. +fieldName) or descending using - (e.g. -fieldName).

last integer($int32) 20

Limits the total number of deals to retrieve starting from offset.

offset integer($int32)0

Exclude the first n items from the response.

Response

Returns array [ SeedSummaryDto ]

The response body contains an arrary of deal summary objects that match the request query.

The response headers will also contain pagination details:

  • X-Paging-PageCount: The total number of pages.
  • X-Paging-PageNo: The current page number. Equal to the request offset.
  • X-Paging-PageSize: The current page size. Equal to the request last.
  • X-Paging-TotalRecordCount: The total number of records returned on this page and preceding pages.

Swagger Docs /api/swagger-ui/index.html#/Deal/searchForDealsUsingQueryUsingGET

Example

POST ${BASE_URL}/api/seeds
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw

last=20&offset=0&search=(componentType%3D%3DHotel%20or%20componentType%3D%3DMixed)&sort=%2BlastModifiedTime
curl --request GET \
    --url "${BASE_URL}/api/seeds?last=20&offset=0&search=(componentType%3D%3DHotel%20or%20componentType%3D%3DMixed)&sort=%2BlastModifiedTime" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public List<SeedSummaryDto> searchForSeedsUsingQuery(String query, String textSearch, String sort, int offset, Integer last) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestsFactory());
    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(BASE_URL).path("/api/seeds");

    MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
    queryParams.add("search", query);

    if (offset > 0) {
        queryParams.add("offset", String.format("%d", offset));
    }
    if (last > 0) {
        queryParams.add("last", String.format("%d", last));
    }
    if(!StringUtils.isBlank(sort)) {
        queryParams.add("sort", sort);
    }
    if(!StringUtils.isBlank(textSearch)) {
        queryParams.add("textSearch", textSearch);
    }
    builder.queryParams(queryParams);

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, builder.encode().build().toUri());
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);
    requestBuilder.accept(MediaType.APPLICATION_JSON);

    ResponseEntity<List<SeedSummaryDto>> responseEntity = restTemplate.exchange(requestBuilder.build(), new ParameterizedTypeReference<>() {
    });

    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responsenEntity.getBody();
    } else {
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

[
    {
        "borrowerRequiredCloseDate": "2022-12-27",
        "closedDate": "2022-12-27T20:18:01.885Z",
        "componentType": "Distribution_Warehouse",
        "createdBy": "string",
        "creationTime": "2022-12-27T20:18:01.885Z",
        "grossLoan": 0,
        "id": "string",
        "lastModifiedTime": "2022-12-27T20:18:01.885Z",
        "loanId": "string",
        "loanTerm": 0,
        "loanType": "Acquisition",
        "ltv": 0,
        "mainDealScore": 0,
        "mainImageFileId": "string",
        "modifiedBy": "string",
        "originatedLoanAmount": 0,
        "originationDate": "2022-12-27T20:18:01.885Z",
        "ownerId": "string",
        "priority": "High",
        "remainingLoanTerm": 0,
        "seedMainAddress": {
        "additionalFreeText": "string",
        "city": "string",
        "country": "string",
        "county": "string",
        "fullAddress": "string",
        "geoLocation": {
            "lat": 0,
            "lng": 0
        },
        "number": 0,
        "placeId": "string",
        "state": "string",
        "street": "string",
        "zipCode": "string"
        },
        "seedName": "string",
        "state": "Completed",
        "status": "string"
    }
]

Headers

  • X-Paging-PageCount: 1
  • X-Paging-PageNo: 0
  • X-Paging-PageSize: 20
  • X-Paging-TotalRecordCount: 20

Text Search (textSearch)

You can filter by any deal field, returning any deal containing any part of the text entered in any one of the deal direct fields.

Example 1: Los Angeles

Searching for Los Angeles (textSearch=Los%20Angeles) will return all deals containing either the word Los or Angeles in one of the deal’s fields.

Example 2: "Los Angeles"

Searching for "Los Angeles" (textSearch=%22Los%20Angeles%22) with quotes will only return deals containing the complete phrase Los Angeles in one of the deal’s fields.

Example 3: P_I_AMORTIZATION Rejected

Searching for P_I_AMORTIZATION Rejected (textSearch=P_I_AMORTIZATION%20Rejected) will return all deals containing either P_I_AMORTIZATION or Rejected in one of the deal's fields.

The way RSQL expressions are represented internally is in the form of nodes.

  • A Logical node is an AND/OR node and has multiple children.
  • A Comparison node has no children and holds the Selector, Operator, and the Arguments.

For example, the query originatedLoanAmount==0 is composed of the following:

  1. Selector: originatedLoanAmount
  2. Comparison Operator: ==
  3. Arguments: [0]

Logical Operators

and search=fieldA==valueA and fieldB!=valueB

Logical AND query. Returns all deals where the values in fieldA exactly equal valueA AND the values in fieldB do not equal valueB.

or search=fieldA==valueA or fieldB==valueB

Logical OR query. Returns all deals where the values in fieldA exactly equal valueA OR the values in fieldB exactly equal valueB.

Comparison Operators

== equalssearch=fieldA==queryValue

Performs an equals query. Returns all deals where the values in fieldA exactly equal queryValue.

!= not equalssearch=fieldA!=queryValue

Performs a not equals query. Returns all deals where the values in fieldA do not equal queryValue.

>, =gt= greater thansearch=fieldA>queryValue or search=fieldA=gt=queryValue

Performs a greater than query. Returns all deals where the values in fieldA are greater than queryValue.

>=, =ge= equal to or greater thansearch=fieldA>=queryValue or search=fieldA=ge=queryValue

Performs an equal to or greater than query. Returns all deals where the values in fieldA are equal to or greater than queryValue.

<, =lt= less thansearch=fieldA<queryValue or search=fieldA=lt=queryValue

Performs a less than query. Returns all deals where the values in fieldA are less than queryValue.

<=, =le= equal to or less thansearch=fieldA<=queryValue or search=fieldA=le=queryValue

Performs an equal to or less than query. Returns all deals where the values in fieldA are equal to or less than queryValue.

=in= insearch=fieldA=in=(valueA, valueB)

Performs an in query. Returns all deals where the values in fieldA contain valueA OR valueB.

=out= not insearch=fieldA=out=(valueA, valueB)

Performs a not in query. Returns all deals where the values in fieldA do not contain valueA OR valueB.

Available Selectors

loanType enumsearch=loanType==Acquisition

Available enum values: Acquisition, Acquisition_Construction, Construction, Permanent, Refinance, Refinance_Construction, Stabilization

grossLoan numericsearch=grossLoan>1000000

riskRating numericsearch=riskRating<50

seedScoreInfo.selectedSeedScore.mainScore numericsearch=seedScoreInfo.selectedSeedScore.mainScore>90

originationDate date-time(yyyy-MM-dd HH:mm:ss)search=originationDate<='2022-12-22 00:00:00'

closedDate date-time(yyyy-MM-dd HH:mm:ss)search=closedDate<='2022-12-22 00:00:00'

closingDate date-time(yyyy-MM-dd)search=closingDate=='2022-12-22'

state enumsearch=state==NewDeal

Available enum values: Completed, NewDeal, Originated, Prep, Rejected

address.state stringsearch=address.state==CA

address.zipCode stringsearch=address.zipCode==92024

originatedLoanAmount numericsearch=originatedLoanAmount>1500000

companies.role enumsearch=companies.role==Borrower

Available enum values: Borrower, Guarantor_Sponsor, Broker, ReferralIndividual

persons.role enumsearch=persons.role==Guarantor_Sponsor

Available enum values: Borrower, Guarantor_Sponsor, Broker, ReferralIndividual

companies._id stringsearch=companies._id==aecfd206-ef41-47ac-9013-ca84f4ed9668

persons._id stringsearch=persons._id==2ba67da9-4bd8-4c32-9699-993a44c40607



Get Deal

Retrieve a deal by its id.

GET /api/seeds/{dealId}

Parameters

dealId string

The unique identifier of the deal that you want to retrieve.

Response

Returns SeedDto

The response body contains the deal object of the requested dealId.

Swagger Docs /api/swagger-ui/index.html#/Deal/readDealUsingGET

Example

GET ${BASE_URL}/api/seeds/0b6696e4-7c45-46c2-bb1f-d36d3ee93df7
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request GET \
    --url "${BASE_URL}/api/seeds/0b6696e4-7c45-46c2-bb1f-d36d3ee93df7" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public SeedDto readDeal(String dealId) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/seeds/{dealId}")
            .buildAndExpand(dealId)
            .toUriString();

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, uri);
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);

    ResponseEntity<SeedDto> responseEntity = restTemplate.exchange(requestBuilder.build(), SeedDto.class);
    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responseEntity.getBody();
    } else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

{
    "amortizationTerm": 0,
    "assets": 0,
    "borrowerRequiredCloseDate": "2023-01-23",
    "cachedAddress": {
      "additionalFreeText": "string",
      "city": "string",
      "country": "string",
      "county": "string",
      "fullAddress": "string",
      "geoLocation": {
        "lat": 0,
        "lng": 0
      },
      "number": 0,
      "placeId": "string",
      "state": "string",
      "street": "string",
      "zipCode": "string"
    },
    "cashFlow": 0,
    "closedDate": "2023-01-23T22:27:14.482Z",
    "collateralTotals": {
      "alternativeValuation": 0,
      "debtService": 0,
      "debtYield": 0,
      "dscr": 0,
      "incomeValuation": 0,
      "netCashFlow": 0,
      "netIncome": 0,
      "netOperatingIncome": 0,
      "salesValuation": 0
    },
    "companies": {
      "additionalProp1": [
        {
          "financialData": {
            "companyCashFlowAfterDebtService": 0,
            "companyCashFlowAvailableForDebtService": 0,
            "companyDSCR": 0,
            "companyDebtService": 0
          },
          "id": "string",
          "participation": 0,
          "role": "Borrower"
        }
      ],
      "additionalProp2": [
        {
          "financialData": {
            "companyCashFlowAfterDebtService": 0,
            "companyCashFlowAvailableForDebtService": 0,
            "companyDSCR": 0,
            "companyDebtService": 0
          },
          "id": "string",
          "participation": 0,
          "role": "Borrower"
        }
      ],
      "additionalProp3": [
        {
          "financialData": {
            "companyCashFlowAfterDebtService": 0,
            "companyCashFlowAvailableForDebtService": 0,
            "companyDSCR": 0,
            "companyDebtService": 0
          },
          "id": "string",
          "participation": 0,
          "role": "Borrower"
        }
      ]
    },
    "componentType": "Distribution_Warehouse",
    "createdBy": "string",
    "creationTime": "2023-01-23T22:27:14.482Z",
    "dealLTVs": {
      "alternativeLTV": 0,
      "incomeLTV": 0,
      "salesLTV": 0
    },
    "debtService": 0,
    "description": "string",
    "dscr": 0,
    "extensionTerm": 0,
    "globalFinancialInfo": {
      "additionalProp1": {
        "totalAssets": 0,
        "totalCashFlow": 0,
        "totalDSCR": 0,
        "totalDebtService": 0,
        "totalEquity": 0,
        "totalLiabilities": 0,
        "totalLiquidity": 0,
        "totalNetCashFlow": 0
      },
      "additionalProp2": {
        "totalAssets": 0,
        "totalCashFlow": 0,
        "totalDSCR": 0,
        "totalDebtService": 0,
        "totalEquity": 0,
        "totalLiabilities": 0,
        "totalLiquidity": 0,
        "totalNetCashFlow": 0
      },
      "additionalProp3": {
        "totalAssets": 0,
        "totalCashFlow": 0,
        "totalDSCR": 0,
        "totalDebtService": 0,
        "totalEquity": 0,
        "totalLiabilities": 0,
        "totalLiquidity": 0,
        "totalNetCashFlow": 0
      }
    },
    "grossLoan": 0,
    "id": "string",
    "indexRate": 0,
    "interestRate": 0,
    "interestRateFloor": 0,
    "lastModifiedTime": "2023-01-23T22:27:14.482Z",
    "lenderReturns": {
      "cashReturn": 0,
      "equityMultiple": 0
    },
    "liabilities": 0,
    "liquidity": 0,
    "liquidityRatio": 0,
    "loanId": "string",
    "loanPaymentStructure": "InterestOnly",
    "loanTerm": 0,
    "loanTermEnding": "2023-01-23",
    "loanType": "Acquisition",
    "ltc": 0,
    "ltv": 0,
    "mainImageFileId": "string",
    "modifiedBy": "string",
    "netCashFlow": 0,
    "netWorth": 0,
    "netWorthRatio": 0,
    "notes": [
      {
        "creationTime": "2023-01-23T22:27:14.482Z",
        "owner": "string",
        "text": "string"
      }
    ],
    "originatedLoanAmount": 0,
    "originatedSeedScore": [
      {
        "mainReason": "string",
        "mainScore": 0,
        "profileName": "string",
        "scoreReasons": [
          {
            "contribution": 0,
            "displayName": "string",
            "name": "string",
            "score": 0,
            "subReasons": [
              null
            ],
            "value": "string",
            "valueFormat": "string",
            "weight": 0
          }
        ]
      }
    ],
    "originationDate": "2023-01-23T22:27:14.482Z",
    "ownerId": "string",
    "ownerInvestor": true,
    "persons": {
      "additionalProp1": [
        {
          "financialData": {
            "personDebtService": 0,
            "personalAssetSubtotal": 0,
            "personalCashFlowAfterDebtService": 0,
            "personalCashFlowAvailableForDebtService": 0,
            "personalDSCR": 0,
            "personalLiabilitySubtotal": 0,
            "personalLiquidity": 0
          },
          "id": "string",
          "participation": 0,
          "role": "Borrower"
        }
      ],
      "additionalProp2": [
        {
          "financialData": {
            "personDebtService": 0,
            "personalAssetSubtotal": 0,
            "personalCashFlowAfterDebtService": 0,
            "personalCashFlowAvailableForDebtService": 0,
            "personalDSCR": 0,
            "personalLiabilitySubtotal": 0,
            "personalLiquidity": 0
          },
          "id": "string",
          "participation": 0,
          "role": "Borrower"
        }
      ],
      "additionalProp3": [
        {
          "financialData": {
            "personDebtService": 0,
            "personalAssetSubtotal": 0,
            "personalCashFlowAfterDebtService": 0,
            "personalCashFlowAvailableForDebtService": 0,
            "personalDSCR": 0,
            "personalLiabilitySubtotal": 0,
            "personalLiquidity": 0
          },
          "id": "string",
          "participation": 0,
          "role": "Borrower"
        }
      ]
    },
    "priority": "High",
    "projectTotalCost": 0,
    "rateIndexType": "1 M LIBOR",
    "rateSpread": 0,
    "rates": [
      {
        "amount": 0,
        "id": "string",
        "measureType": "Amount",
        "percentageAmount": 0,
        "rateType": "AppraisalFee",
        "term": 0
      }
    ],
    "reason": "string",
    "rejectNote": {
      "creationTime": "2023-01-23T22:27:14.482Z",
      "owner": "string",
      "text": "string"
    },
    "remainingLoanTerm": 0,
    "riskRating": 0,
    "scoreHistory": [
      {
        "changeDate": "2023-01-23T22:27:14.482Z",
        "scores": [
          {
            "mainReason": "string",
            "mainScore": 0,
            "profileName": "string",
            "scoreReasons": [
              {
                "contribution": 0,
                "displayName": "string",
                "name": "string",
                "score": 0,
                "subReasons": [
                  null
                ],
                "value": "string",
                "valueFormat": "string",
                "weight": 0
              }
            ]
          }
        ]
      }
    ],
    "seedName": "string",
    "seedScoreInfo": {
      "seedScore": [
        {
          "mainReason": "string",
          "mainScore": 0,
          "profileName": "string",
          "scoreReasons": [
            {
              "contribution": 0,
              "displayName": "string",
              "name": "string",
              "score": 0,
              "subReasons": [
                null
              ],
              "value": "string",
              "valueFormat": "string",
              "weight": 0
            }
          ]
        }
      ],
      "selectedSeedScore": {
        "mainReason": "string",
        "mainScore": 0,
        "profileName": "string",
        "scoreReasons": [
          {
            "contribution": 0,
            "displayName": "string",
            "name": "string",
            "score": 0,
            "subReasons": [
              null
            ],
            "value": "string",
            "valueFormat": "string",
            "weight": 0
          }
        ]
      }
    },
    "state": "Completed",
    "status": "string",
    "stressTestConfiguration": {
      "customStressTestValues": {
        "capRateChange": 0,
        "expensesChange": 0,
        "interestRateChange": 0,
        "revenueChange": 0,
        "vacancyChange": 0
      },
      "selectedStressTestType": "Custom"
    },
    "stressTestLimits": {
      "maxDSCR": 0,
      "maxDebtYield": 0,
      "maxLtv": 0
    },
    "valuationUsedInLtv": "Alternative"
}



Get Collateral

Retrieve a collateral by its id.

GET /api/collaterals/collateral/{collateralId}

Parameters

collateralId string

The unique identifier of the collateral that you want to retrieve.

Response

Returns CollateralDto

The response body contains the collateral object of the requested collateralId.

Swagger Docs /api/collaterals/swagger-ui/index.html#/Collateral/readCollateralUsingGET

Example

GET ${BASE_URL}/api/collaterals/collateral/06597226-a686-4b9c-9cfa-1430e4e517df
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request GET \
    --url "${BASE_URL}/collaterals/collateral/06597226-a686-4b9c-9cfa-1430e4e517df" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public CollateralDto readCollateral(String collateralId) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/collateral/{collateralId}")
            .buildAndExpand(collateralId)
            .toUriString();

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, uri);
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);

    ResponseEntity<CollateralDto> responseEntity = restTemplate.exchange(requestBuilder.build(), CollateralDto.class);
    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responseEntity.getBody();
    } else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

{
    "address": {
      "additionalFreeText": "string",
      "city": "string",
      "country": "string",
      "county": "string",
      "fullAddress": "string",
      "geoLocation": {
        "lat": 0,
        "lng": 0
      },
      "number": 0,
      "placeId": "string",
      "state": "string",
      "street": "string",
      "zipCode": "string"
    },
    "appraisalValuation": 0,
    "assessedLandValue": 0,
    "assessedValue": 0,
    "assetClass": "string",
    "bikeScore": 0,
    "borrowerValuation": 0,
    "buyer": "string",
    "buyerSellerRelationship": "string",
    "constructionStatus": "string",
    "createdBy": "string",
    "creationTime": "2023-01-23T22:32:48.310Z",
    "crimeData": {
      "incidents": [
        {
          "address": {
            "address": "string",
            "geoLocation": {
              "lat": 0,
              "lng": 0
            }
          },
          "date": "2023-01-23T22:32:48.310Z",
          "offense": {
            "code": "string",
            "crimeAgainst": "string",
            "description": "string",
            "name": "string"
          }
        }
      ],
      "lastUpdate": "2023-01-23"
    },
    "dealId": "string",
    "description": "string",
    "discountedCashFlow": {
      "capRate": 0,
      "discountRate": 0,
      "expenseGrowth": [
        0
      ],
      "revenueGrowth": [
        0
      ]
    },
    "expectedCompletion": "2023-01-23",
    "floorAreaRatio": 0,
    "grossSF": 0,
    "id": "string",
    "lastModifiedTime": "2023-01-23T22:32:48.311Z",
    "locationOverview": "string",
    "lotSize": 0,
    "mainIncomeValuationId": "string",
    "marketValuation": {
      "capRate": 0,
      "capRateSource": "Manual",
      "cashFlow": {
        "belowTheLineExpanses": {
          "total": 0,
          "totalByYear": [
            0
          ],
          "transactions": [
            {
              "amount": 0,
              "annualized": 0,
              "annualizedByYear": [
                0
              ],
              "description": "string",
              "id": "string",
              "measureType": "Amount"
            }
          ]
        },
        "comment": "string",
        "createdBy": "string",
        "creationTime": "2023-01-23T22:32:48.311Z",
        "discountedCashFlowData": {
          "capRate": 0,
          "discountRate": 0,
          "expenseGrowth": [
            0
          ],
          "revenueGrowth": [
            0
          ]
        },
        "effectiveIncome": 0,
        "effectiveIncomeByYear": [
          0
        ],
        "expenseRatio": 0,
        "fileId": "string",
        "finalSale": 0,
        "fixedCharges": {
          "total": 0,
          "totalByYear": [
            0
          ],
          "transactions": [
            {
              "amount": 0,
              "annualized": 0,
              "annualizedByYear": [
                0
              ],
              "description": "string",
              "id": "string",
              "measureType": "Amount"
            }
          ]
        },
        "id": "string",
        "lastModifiedTime": "2023-01-23T22:32:48.311Z",
        "modifiedBy": "string",
        "netIncome": 0,
        "netIncomeByYear": [
          0
        ],
        "netOperatingIncome": 0,
        "netOperatingIncomeByYear": [
          0
        ],
        "netPresentValue": 0,
        "operatingExpanses": {
          "total": 0,
          "totalByYear": [
            0
          ],
          "transactions": [
            {
              "amount": 0,
              "annualized": 0,
              "annualizedByYear": [
                0
              ],
              "description": "string",
              "id": "string",
              "measureType": "Amount"
            }
          ]
        },
        "otherIncome": {
          "total": 0,
          "totalByYear": [
            0
          ],
          "transactions": [
            {
              "amount": 0,
              "annualized": 0,
              "annualizedByYear": [
                0
              ],
              "description": "string",
              "id": "string",
              "measureType": "Amount"
            }
          ]
        },
        "presentValues": [
          0
        ],
        "revenue": {
          "total": 0,
          "totalByYear": [
            0
          ],
          "transactions": [
            {
              "amount": 0,
              "annualized": 0,
              "annualizedByYear": [
                0
              ],
              "description": "string",
              "id": "string",
              "measureType": "Amount"
            }
          ]
        },
        "totalExpenses": 0,
        "totalExpensesByYear": [
          0
        ],
        "vacancyAndConcessions": {
          "total": 0,
          "totalByYear": [
            0
          ],
          "transactions": [
            {
              "amount": 0,
              "annualized": 0,
              "annualizedByYear": [
                0
              ],
              "description": "string",
              "id": "string",
              "measureType": "Amount"
            }
          ]
        }
      },
      "endDate": "2023-01-23",
      "expansesSource": "Market",
      "expansesSourceId": "string",
      "id": "string",
      "name": "string",
      "revenueSource": "Alternative",
      "startDate": "2023-01-23",
      "totalValuation": 0,
      "userValuationType": "string",
      "vacancySource": "Manual"
    },
    "modifiedBy": "string",
    "name": "string",
    "numberOfBuildings": 0,
    "ownerId": "string",
    "ownerInvestor": true,
    "parcelNumber": "string",
    "parkingRatio": 0,
    "risks": {
      "propertyData": {
        "adjustableRider": "string",
        "airConditioning": "string",
        "airConditioningType": "string",
        "amenities": "string",
        "annualPropertyTaxes": "string",
        "apn": "string",
        "avgDaysSinceTenantBusinessesStarted": "string",
        "basement": "string",
        "blockNumber": "string",
        "buildingArea1": "string",
        "buildingArea1Type": "string",
        "buildingArea2": "string",
        "buildingArea2Type": "string",
        "buildingArea3": "string",
        "buildingArea3Type": "string",
        "buildingArea4": "string",
        "buildingArea4Type": "string",
        "buildingArea5": "string",
        "buildingArea5Type": "string",
        "buildingArea6": "string",
        "buildingArea6Type": "string",
        "buildingArea7": "string",
        "buildingArea7Type": "string",
        "buildingClass": "string",
        "buildingConstructionType": "string",
        "buildingName": "string",
        "buildingSqFtSMREstimated": "string",
        "buildingSqFtTA": "string",
        "buildingSqFtTAIncorrectFlag": "string",
        "buildingStyle": "string",
        "buildingWallsExterior": "string",
        "buildingWallsInterior": "string",
        "buildingsCount": "string",
        "censusTractBlockGroup": "string",
        "combinedDebtAsOfOrigination": "string",
        "contactCompany": "string",
        "contactPersonName": "string",
        "contactPersonTitle": "string",
        "contactPhoneNumber": "string",
        "corporateOwnerFlag": "string",
        "countBaths": "string",
        "countBedrooms": "string",
        "countEquityLoansByCurrentOwner": "string",
        "countNodsSinceOwnerPurchase": "string",
        "countNodsUnderEarlierOwners": "string",
        "countPartialBaths": "string",
        "countPlumbingFixtures": "string",
        "countRefinancingByCurrentOwner": "string",
        "countRooms": "string",
        "countUnits": "string",
        "countyLandUseDescription": "string",
        "countyLegalDescription": "string",
        "currentEquityLoanAmountAtOrigination": "string",
        "currentLenderSubprimeSpecialistFlag": "string",
        "currentMortgageAmountAtOrigination": "string",
        "currentMortgageLenderName": "string",
        "currentMortgageOriginationDate": "string",
        "currentOrLastEquityLenderName": "string",
        "daysSinceLastEquityLoanObtained": "string",
        "daysSinceLastMortgageObtained": "string",
        "daysSincePurchase": "string",
        "effectiveYearBuilt": "string",
        "elevator": "string",
        "estimatedPropertyValueChangeSincePurchase": "string",
        "extraFeatures1": "string",
        "extraFeatures2": "string",
        "extraFeatures3": "string",
        "extraFeatures4": "string",
        "femaFloodCode": "string",
        "fips": "string",
        "fipsApn": "string",
        "fireplace": "string",
        "fixedStepRider": "string",
        "floorCover": "string",
        "foundation": "string",
        "garageOrParkingCapacity": "string",
        "garageOrParkingType": "string",
        "googleMapsUrl": "string",
        "heating": "string",
        "heatingFuel": "string",
        "id": "string",
        "interestOnlyPayments": "string",
        "irate": "string",
        "localAreaCreditRiskConcentrationSeries1": "string",
        "localAreaCreditRiskConcentrationSeries2": "string",
        "lotArea": "string",
        "lotAreaUnit": "string",
        "lotDepthFeet": "string",
        "lotFrontageFeet": "string",
        "lotNumber": "string",
        "mortgageLoanType": "string",
        "mostRecentNodDate": "string",
        "mpAddressOnly": "string",
        "mpAddressOnlyParcelCount": "string",
        "mpAddressOnlyTotalSqFt": "string",
        "mpLoans": "string",
        "mpLoansParcelCount": "string",
        "mpLoansTotalSqFt": "string",
        "mpSameOwnerAndAddress": "string",
        "mpSameOwnerAndAddressParcelCount": "string",
        "mpSameOwnerAndAddressTotalSqFt": "string",
        "multiparcelFlag": "string",
        "noticeOfDefaultObservedFlag": "string",
        "oldFipsApn": "string",
        "originalMortgageLenderName": "string",
        "otherImprovements1": "string",
        "otherImprovements1Sqft": "string",
        "otherImprovements2": "string",
        "otherImprovements2Sqft": "string",
        "otherImprovements3": "string",
        "otherImprovements3Sqft": "string",
        "otherImprovements4": "string",
        "otherImprovements4Sqft": "string",
        "otherImprovements5": "string",
        "otherImprovements5Sqft": "string",
        "ownerAddressTaxServiceFlag": "string",
        "ownerCity": "string",
        "ownerHistoryPiggybackFinancingFlag": "string",
        "ownerHistorySubprimeLoansFlag": "string",
        "ownerName": "string",
        "ownerOccupancyFlag": "string",
        "ownerState": "string",
        "ownerStreetAddress": "string",
        "ownerUnitNumber": "string",
        "ownerUnitType": "string",
        "ownerZip4": "string",
        "ownerZip5": "string",
        "pool": "string",
        "prepayRider": "string",
        "prepayTerm": "string",
        "priorPurchaseDate": "string",
        "priorPurchasePrice": "string",
        "propertyAlternativeStreetAddress": "string",
        "propertyCity": "string",
        "propertyLatitude": "string",
        "propertyLongitude": "string",
        "propertyState": "string",
        "propertyStreetAddress": "string",
        "propertyUnitNumber": "string",
        "propertyUnitType": "string",
        "propertyUseGeneralCategory": "string",
        "propertyUseOverallCategory": "string",
        "propertyUsePrimaryCategory": "string",
        "propertyZip4": "string",
        "propertyZip5": "string",
        "purchaseDate": "string",
        "purchaseDeedTransactionType": "string",
        "purchasePrice": "string",
        "rateAdjustmentFrequency": "string",
        "rateMaximum": "string",
        "rateMaximumAdjustableRateLoan": "string",
        "rateMinimum": "string",
        "roofCover": "string",
        "roofType": "string",
        "scoreExistingMortgage": "string",
        "scoreInsuranceClaimsRisk": "string",
        "scoreNewPurchaseRisk": "string",
        "scoreRefiPropensity": "string",
        "scoreSMRBuildingQuality": "string",
        "sewer": "string",
        "smrestimatedMarketValue": "string",
        "storiesCount": "string",
        "taassessedValueImprovement": "string",
        "taassessedValueLand": "string",
        "taassessedValueTotal": "string",
        "taassessmentYear": "string",
        "tabuildingCondition": "string",
        "tabuildingQuality": "string",
        "tamarketValueImprovement": "string",
        "tamarketValueLand": "string",
        "tamarketValueTotal": "string",
        "tamarketValueYear": "string",
        "tenantsIdentifiedCount": "string",
        "term": "string",
        "type": "string",
        "typeFinancing": "string",
        "water": "string",
        "workersCountEstimated": "string",
        "yearBuilt": "string",
        "yearForPropertyTaxes": "string"
      },
      "propertyRisk": {
        "buildingQuality": 0,
        "buildingQualityDataDate": "2023-01-23",
        "femaFloodZoneCode": "string",
        "femaFloodZoneDataDate": "2023-01-23",
        "fipsApn": "string",
        "fuelTankDataDate": "2023-01-23",
        "hasFuelTank": true,
        "hasSecondaryFireRisk": true,
        "landContaminationDataDate": "2023-01-23",
        "landContaminationType": "string",
        "propertyCrimeRate3YrAvg": 0,
        "secondaryFireRiskCount": 0,
        "secondaryFireRiskSource": "string",
        "totalCrimeRate3YrAvg": 0,
        "violentCrimeRate3YrAvg": 0,
        "yearBuilt": 0,
        "yearBuiltDataDate": "2023-01-23"
      },
      "tenants": [
        {
          "address": "string",
          "businessFormationDate": "2023-01-23",
          "businessType": "string",
          "city": "string",
          "companyAlias": "string",
          "companyName": "string",
          "companyOwnsProperty": true,
          "contactName": "string",
          "contactTitle": "string",
          "fipsApn": "string",
          "isNonprofit": true,
          "movedInDate": "2023-01-23",
          "phone": "string",
          "state": "string",
          "suiteUnit": "string",
          "zip4Ext": "string",
          "zip5": "string"
        }
      ],
      "tenantsRisks": [
        {
          "address": "string",
          "businessFormationDate": "2023-01-23",
          "businessType": "string",
          "childcareDataDate": "2023-01-23",
          "childcareDataSource": "string",
          "city": "string",
          "companyAlias": "string",
          "companyHasMortgageDefault": true,
          "companyName": "string",
          "contactName": "string",
          "contactTitle": "string",
          "dolLastViolationDate": "2023-01-23",
          "dolViolationCount": 0,
          "dotTruckAccidents": 0,
          "dotTruckCount": 0,
          "dotTruckDataDate": "2023-01-23",
          "epaEnforcementCount": 0,
          "epaLastEnforcementDate": "2023-01-23",
          "fipsApn": "string",
          "gunShopLicenseDataDate": "2023-01-23",
          "hasDolRepeatViolation": true,
          "hasDolViolation": true,
          "hasDolWillfulViolation": true,
          "hasDotTruck": true,
          "hasGunShopLicense": true,
          "hasLiquorLicense": true,
          "hasOshaRepeatViolation": true,
          "hasOshaViolation": true,
          "hasOshaWillfulViolation": true,
          "hazardousTransportDataDate": "2023-01-23",
          "hazardousTransportDataSource": "string",
          "irsLastTaxLienDate": "2023-01-23",
          "irsTaxLienAmount": 0,
          "isChildcare": true,
          "isHazardousTransport": true,
          "isHomeBusiness": true,
          "isNonprofit": true,
          "isStartup": true,
          "liquorLicenseDataDate": "2023-01-23",
          "liquorLicenseDataSource": "string",
          "mortgageLastDefaultDate": "2023-01-23",
          "oshaLastViolationDate": "2023-01-23",
          "oshaViolationCount": 0,
          "state": "string",
          "suiteUnit": "string",
          "zip4Ext": "string",
          "zip5": "string"
        }
      ]
    },
    "saleDate": "2023-01-23",
    "salePrice": 0,
    "salePricePerSf": 0,
    "saleValuation": 0,
    "seller": "string",
    "sizeLotAcres": 0,
    "stories": 0,
    "subMarket": "string",
    "totalSf": 0,
    "totalUnits": 0,
    "transitScore": 0,
    "userValuations": [
      {
        "capRate": 0,
        "capRateSource": "Manual",
        "cashFlow": {
          "belowTheLineExpanses": {
            "total": 0,
            "totalByYear": [
              0
            ],
            "transactions": [
              {
                "amount": 0,
                "annualized": 0,
                "annualizedByYear": [
                  0
                ],
                "description": "string",
                "id": "string",
                "measureType": "Amount"
              }
            ]
          },
          "comment": "string",
          "createdBy": "string",
          "creationTime": "2023-01-23T22:32:48.311Z",
          "discountedCashFlowData": {
            "capRate": 0,
            "discountRate": 0,
            "expenseGrowth": [
              0
            ],
            "revenueGrowth": [
              0
            ]
          },
          "effectiveIncome": 0,
          "effectiveIncomeByYear": [
            0
          ],
          "expenseRatio": 0,
          "fileId": "string",
          "finalSale": 0,
          "fixedCharges": {
            "total": 0,
            "totalByYear": [
              0
            ],
            "transactions": [
              {
                "amount": 0,
                "annualized": 0,
                "annualizedByYear": [
                  0
                ],
                "description": "string",
                "id": "string",
                "measureType": "Amount"
              }
            ]
          },
          "id": "string",
          "lastModifiedTime": "2023-01-23T22:32:48.311Z",
          "modifiedBy": "string",
          "netIncome": 0,
          "netIncomeByYear": [
            0
          ],
          "netOperatingIncome": 0,
          "netOperatingIncomeByYear": [
            0
          ],
          "netPresentValue": 0,
          "operatingExpanses": {
            "total": 0,
            "totalByYear": [
              0
            ],
            "transactions": [
              {
                "amount": 0,
                "annualized": 0,
                "annualizedByYear": [
                  0
                ],
                "description": "string",
                "id": "string",
                "measureType": "Amount"
              }
            ]
          },
          "otherIncome": {
            "total": 0,
            "totalByYear": [
              0
            ],
            "transactions": [
              {
                "amount": 0,
                "annualized": 0,
                "annualizedByYear": [
                  0
                ],
                "description": "string",
                "id": "string",
                "measureType": "Amount"
              }
            ]
          },
          "presentValues": [
            0
          ],
          "revenue": {
            "total": 0,
            "totalByYear": [
              0
            ],
            "transactions": [
              {
                "amount": 0,
                "annualized": 0,
                "annualizedByYear": [
                  0
                ],
                "description": "string",
                "id": "string",
                "measureType": "Amount"
              }
            ]
          },
          "totalExpenses": 0,
          "totalExpensesByYear": [
            0
          ],
          "vacancyAndConcessions": {
            "total": 0,
            "totalByYear": [
              0
            ],
            "transactions": [
              {
                "amount": 0,
                "annualized": 0,
                "annualizedByYear": [
                  0
                ],
                "description": "string",
                "id": "string",
                "measureType": "Amount"
              }
            ]
          }
        },
        "endDate": "2023-01-23",
        "expansesSource": "Market",
        "expansesSourceId": "string",
        "id": "string",
        "name": "string",
        "revenueSource": "Alternative",
        "startDate": "2023-01-23",
        "totalValuation": 0,
        "userValuationType": "string",
        "vacancySource": "Manual"
      }
    ],
    "walkScore": 0,
    "yearBuilt": 0,
    "yearRenovated": 0,
    "zoning": "string"
}



Get Component

Retrieve a component by its id.

GET /api/components/component/{componentId}

Parameters

componentId string

The unique identifier of the component that you want to retrieve.

Response

Returns ComponentDto

The response body contains the component object of the requested componentId.

Swagger Docs /api/components/swagger-ui/index.html#/Component/readComponentUsingGET

Example

GET ${BASE_URL}/api/components/component/850a0b2f-528f-4b33-b00d-24b1262c5879
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request GET \
    --url "${BASE_URL}/components/component/850a0b2f-528f-4b33-b00d-24b1262c5879" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public ComponentDto readComponent(String componentId) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/components/component/{componentId}")
            .buildAndExpand(componentId)
            .toUriString();

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, uri);
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);

    ResponseEntity<ComponentDto> responseEntity = restTemplate.exchange(requestBuilder.build(), ComponentDto.class);
    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responseEntity.getBody();
    } else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

{
  "address": {
    "additionalFreeText": "string",
    "city": "string",
    "country": "string",
    "county": "string",
    "fullAddress": "string",
    "geoLocation": {
      "lat": 0,
      "lng": 0
    },
    "number": 0,
    "placeId": "string",
    "state": "string",
    "street": "string",
    "zipCode": "string"
  },
  "assetType": "Distribution_Warehouse",
  "collateralId": "string",
  "componentType": "Commercial",
  "createdBy": "string",
  "creationTime": "2023-01-23T22:35:27.270Z",
  "dealId": "string",
  "id": "string",
  "landUseDescription": "string",
  "lastModifiedTime": "2023-01-23T22:35:27.270Z",
  "leaseToPreLeaseRatio": 0,
  "locationScore": 0,
  "marketTrendSummary": {
    "lastUpdated": "2023-01-23T22:35:27.270Z",
    "rent": {
      "bullets": [
        "string"
      ],
      "title": "string"
    },
    "sections": [
      {
        "para": "string",
        "title": "string"
      }
    ],
    "vacancy": {
      "bullets": [
        "string"
      ],
      "title": "string"
    }
  },
  "modifiedBy": "string",
  "ownerId": "string",
  "saleValueComputationType": "BySf",
  "salesCompSFValuation": 0,
  "salesCompUnitValuation": 0,
  "selectedRentRollId": "string"
}



Get Commercial Component

Retrieve a commercial component by its id.

GET /api/components/component/{componentId}/commercial

Parameters

componentId string

The unique identifier of the commercial component that you want to retrieve.

Response

Returns CommercialComponentDto

The response body contains the commercial component object of the requested componentId.

Swagger Docs /api/components/swagger-ui/index.html#/Component/readCommercialComponentUsingGET

Example

GET ${BASE_URL}/api/components/component/850a0b2f-528f-4b33-b00d-24b1262c5879/commercial
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request GET \
    --url "${BASE_URL}/components/component/850a0b2f-528f-4b33-b00d-24b1262c5879/commercial" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public CommercialComponentDto readCommercialComponent(String componentId) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/components/component/{componentId}/commercial")
            .buildAndExpand(componentId)
            .toUriString();

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, uri);
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);

    ResponseEntity<CommercialComponentDto> responseEntity = restTemplate.exchange(requestBuilder.build(), CommercialComponentDto.class);
    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responseEntity.getBody();
    } else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

{
    "address": {
      "additionalFreeText": "string",
      "city": "string",
      "country": "string",
      "county": "string",
      "fullAddress": "string",
      "geoLocation": {
        "lat": 0,
        "lng": 0
      },
      "number": 0,
      "placeId": "string",
      "state": "string",
      "street": "string",
      "zipCode": "string"
    },
    "assetType": "Distribution_Warehouse",
    "collateralId": "string",
    "componentType": "Commercial",
    "createdBy": "string",
    "creationTime": "2023-01-23T22:59:29.504Z",
    "dealId": "string",
    "id": "string",
    "landUseDescription": "string",
    "lastModifiedTime": "2023-01-23T22:59:29.504Z",
    "leaseToPreLeaseRatio": 0,
    "locationScore": 0,
    "marketTrendSummary": {
      "lastUpdated": "2023-01-23T22:59:29.504Z",
      "rent": {
        "bullets": [
          "string"
        ],
        "title": "string"
      },
      "sections": [
        {
          "para": "string",
          "title": "string"
        }
      ],
      "vacancy": {
        "bullets": [
          "string"
        ],
        "title": "string"
      }
    },
    "modifiedBy": "string",
    "ownerId": "string",
    "saleValueComputationType": "BySf",
    "salesCompSFValuation": 0,
    "salesCompUnitValuation": 0,
    "selectedRentRollId": "string",
    "expiringLeases": {
      "additionalProp1": 0,
      "additionalProp2": 0,
      "additionalProp3": 0
    },
    "livingUnitsInfo": {
      "averageAnnualRevenuePerSqft": 0,
      "averageMonthlyRevenuePerSqft": 0,
      "averageSqft": 0,
      "averageUnitSize": 0,
      "livingUnits": [
        {
          "avgAnnualRevenuePerSf": 0,
          "avgMonthlyRevenuePerSf": 0,
          "createdBy": "string",
          "creationTime": "2023-01-23T22:59:29.504Z",
          "description": "string",
          "floor": 0,
          "id": "string",
          "lastModifiedTime": "2023-01-23T22:59:29.504Z",
          "modifiedBy": "string",
          "suite": "string",
          "totalAnnualRevenue": 0,
          "totalMonthlyRevenue": 0,
          "unitSize": 0
        }
      ],
      "marketVacancy": 0,
      "totalAnnualRevenue": 0,
      "totalMonthlyRevenue": 0,
      "totalSf": 0,
      "totalUnits": 0
    },
    "rentRollsInfo": [
      {
        "commercialRentRollSummary": {
          "avgAnnualIncomeSf": 0,
          "avgAnnualIncomeSfComps": 0,
          "avgMonthlyIncome": 0,
          "avgMonthlyIncomeSf": 0,
          "avgMonthlyIncomeSfComps": 0,
          "avgMonthlyIncomeUnitComps": 0,
          "totalSf": 0
        },
        "effectiveDate": "2023-01-23",
        "expiringLeases": {
          "additionalProp1": 0,
          "additionalProp2": 0,
          "additionalProp3": 0
        },
        "fileId": "string",
        "id": "string",
        "name": "string",
        "rentRolls": [
          {
            "annualRent": 0,
            "annualRentPerSf": 0,
            "comments": "string",
            "endDate": "2023-01-23",
            "id": "string",
            "monthlyRent": 0,
            "monthlyRentPerSf": 0,
            "tenantName": "string",
            "unitNumber": "string",
            "unitSize": 0
          }
        ],
        "tenantTurnover": 0,
        "totalAnnualRevenue": 0,
        "totalMonthlyRevenue": 0,
        "totalSf": 0,
        "totalUnits": 0,
        "vacancy": 0
      }
    ]
}



Get Hotel Component

Retrieve a hotel component by its id.

GET /api/components/component/{componentId}/hotel

Parameters

componentId string

The unique identifier of the hotel component that you want to retrieve.

Response

Returns HotelComponentDto

The response body contains the hotel component object of the requested componentId.

Swagger Docs /api/components/swagger-ui/index.html#/Component/readHotelComponentUsingGET

Example

GET ${BASE_URL}/api/components/component/850a0b2f-528f-4b33-b00d-24b1262c5879/hotel
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request GET \
    --url "${BASE_URL}/components/component/850a0b2f-528f-4b33-b00d-24b1262c5879/hotel" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public HotelComponentDto readHotelComponent(String componentId) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/components/component/{componentId}/hotel")
            .buildAndExpand(componentId)
            .toUriString();

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, uri);
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);

    ResponseEntity<HotelComponentDto> responseEntity = restTemplate.exchange(requestBuilder.build(), HotelComponentDto.class);
    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responseEntity.getBody();
    } else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

{
    "address": {
      "additionalFreeText": "string",
      "city": "string",
      "country": "string",
      "county": "string",
      "fullAddress": "string",
      "geoLocation": {
        "lat": 0,
        "lng": 0
      },
      "number": 0,
      "placeId": "string",
      "state": "string",
      "street": "string",
      "zipCode": "string"
    },
    "assetType": "Distribution_Warehouse",
    "collateralId": "string",
    "componentType": "Commercial",
    "createdBy": "string",
    "creationTime": "2023-01-23T22:59:29.504Z",
    "dealId": "string",
    "id": "string",
    "landUseDescription": "string",
    "lastModifiedTime": "2023-01-23T22:59:29.504Z",
    "leaseToPreLeaseRatio": 0,
    "locationScore": 0,
    "marketTrendSummary": {
      "lastUpdated": "2023-01-23T22:59:29.504Z",
      "rent": {
        "bullets": [
          "string"
        ],
        "title": "string"
      },
      "sections": [
        {
          "para": "string",
          "title": "string"
        }
      ],
      "vacancy": {
        "bullets": [
          "string"
        ],
        "title": "string"
      }
    },
    "modifiedBy": "string",
    "ownerId": "string",
    "saleValueComputationType": "BySf",
    "salesCompSFValuation": 0,
    "salesCompUnitValuation": 0,
    "selectedRentRollId": "string",
    "expiringLeases": {
      "additionalProp1": 0,
      "additionalProp2": 0,
      "additionalProp3": 0
    },
    "livingUnitsInfo": {
      "averageAnnualRevenuePerSqft": 0,
      "averageMonthlyRevenuePerSqft": 0,
      "averageSqft": 0,
      "averageUnitSize": 0,
      "livingUnits": [
        {
          "avgAnnualRevenuePerSf": 0,
          "avgMonthlyRevenuePerSf": 0,
          "createdBy": "string",
          "creationTime": "2023-01-23T22:59:29.504Z",
          "description": "string",
          "floor": 0,
          "id": "string",
          "lastModifiedTime": "2023-01-23T22:59:29.504Z",
          "modifiedBy": "string",
          "suite": "string",
          "totalAnnualRevenue": 0,
          "totalMonthlyRevenue": 0,
          "unitSize": 0
        }
      ],
      "marketVacancy": 0,
      "totalAnnualRevenue": 0,
      "totalMonthlyRevenue": 0,
      "totalSf": 0,
      "totalUnits": 0
    },
    "rentRollsInfo": [
      {
        "commercialRentRollSummary": {
          "avgAnnualIncomeSf": 0,
          "avgAnnualIncomeSfComps": 0,
          "avgMonthlyIncome": 0,
          "avgMonthlyIncomeSf": 0,
          "avgMonthlyIncomeSfComps": 0,
          "avgMonthlyIncomeUnitComps": 0,
          "totalSf": 0
        },
        "effectiveDate": "2023-01-23",
        "expiringLeases": {
          "additionalProp1": 0,
          "additionalProp2": 0,
          "additionalProp3": 0
        },
        "fileId": "string",
        "id": "string",
        "name": "string",
        "rentRolls": [
          {
            "annualRent": 0,
            "annualRentPerSf": 0,
            "comments": "string",
            "endDate": "2023-01-23",
            "id": "string",
            "monthlyRent": 0,
            "monthlyRentPerSf": 0,
            "tenantName": "string",
            "unitNumber": "string",
            "unitSize": 0
          }
        ],
        "tenantTurnover": 0,
        "totalAnnualRevenue": 0,
        "totalMonthlyRevenue": 0,
        "totalSf": 0,
        "totalUnits": 0,
        "vacancy": 0
      }
    ]
}



Get Residential Component

Retrieve a residential component by its id.

GET /api/components/component/{componentId}/residential

Parameters

componentId string

The unique identifier of the residential component that you want to retrieve.

Response

Returns ResidentialComponentDto

The response body contains the residential component object of the requested componentId.

Swagger Docs /api/components/swagger-ui/index.html#/Component/readResidentialComponentUsingGET

Example

GET ${BASE_URL}/api/components/component/850a0b2f-528f-4b33-b00d-24b1262c5879/residential
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request GET \
    --url "${BASE_URL}/components/component/850a0b2f-528f-4b33-b00d-24b1262c5879/residential" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public ResidentialComponentDto readResidentialComponent(String componentId) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/components/component/{componentId}/residential")
            .buildAndExpand(componentId)
            .toUriString();

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, uri);
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);

    ResponseEntity<ResidentialComponentDto> responseEntity = restTemplate.exchange(requestBuilder.build(), ResidentialComponentDto.class);
    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responseEntity.getBody();
    } else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

{
    "address": {
      "additionalFreeText": "string",
      "city": "string",
      "country": "string",
      "county": "string",
      "fullAddress": "string",
      "geoLocation": {
        "lat": 0,
        "lng": 0
      },
      "number": 0,
      "placeId": "string",
      "state": "string",
      "street": "string",
      "zipCode": "string"
    },
    "assetType": "Distribution_Warehouse",
    "collateralId": "string",
    "componentType": "Commercial",
    "createdBy": "string",
    "creationTime": "2023-01-23T22:59:29.504Z",
    "dealId": "string",
    "id": "string",
    "landUseDescription": "string",
    "lastModifiedTime": "2023-01-23T22:59:29.504Z",
    "leaseToPreLeaseRatio": 0,
    "locationScore": 0,
    "marketTrendSummary": {
      "lastUpdated": "2023-01-23T22:59:29.504Z",
      "rent": {
        "bullets": [
          "string"
        ],
        "title": "string"
      },
      "sections": [
        {
          "para": "string",
          "title": "string"
        }
      ],
      "vacancy": {
        "bullets": [
          "string"
        ],
        "title": "string"
      }
    },
    "modifiedBy": "string",
    "ownerId": "string",
    "saleValueComputationType": "BySf",
    "salesCompSFValuation": 0,
    "salesCompUnitValuation": 0,
    "selectedRentRollId": "string",
    "expiringLeases": {
      "additionalProp1": 0,
      "additionalProp2": 0,
      "additionalProp3": 0
    },
    "livingUnitsInfo": {
      "averageAnnualRevenuePerSqft": 0,
      "averageMonthlyRevenuePerSqft": 0,
      "averageSqft": 0,
      "averageUnitSize": 0,
      "livingUnits": [
        {
          "avgAnnualRevenuePerSf": 0,
          "avgMonthlyRevenuePerSf": 0,
          "createdBy": "string",
          "creationTime": "2023-01-23T22:59:29.504Z",
          "description": "string",
          "floor": 0,
          "id": "string",
          "lastModifiedTime": "2023-01-23T22:59:29.504Z",
          "modifiedBy": "string",
          "suite": "string",
          "totalAnnualRevenue": 0,
          "totalMonthlyRevenue": 0,
          "unitSize": 0
        }
      ],
      "marketVacancy": 0,
      "totalAnnualRevenue": 0,
      "totalMonthlyRevenue": 0,
      "totalSf": 0,
      "totalUnits": 0
    },
    "rentRollsInfo": [
      {
        "commercialRentRollSummary": {
          "avgAnnualIncomeSf": 0,
          "avgAnnualIncomeSfComps": 0,
          "avgMonthlyIncome": 0,
          "avgMonthlyIncomeSf": 0,
          "avgMonthlyIncomeSfComps": 0,
          "avgMonthlyIncomeUnitComps": 0,
          "totalSf": 0
        },
        "effectiveDate": "2023-01-23",
        "expiringLeases": {
          "additionalProp1": 0,
          "additionalProp2": 0,
          "additionalProp3": 0
        },
        "fileId": "string",
        "id": "string",
        "name": "string",
        "rentRolls": [
          {
            "annualRent": 0,
            "annualRentPerSf": 0,
            "comments": "string",
            "endDate": "2023-01-23",
            "id": "string",
            "monthlyRent": 0,
            "monthlyRentPerSf": 0,
            "tenantName": "string",
            "unitNumber": "string",
            "unitSize": 0
          }
        ],
        "tenantTurnover": 0,
        "totalAnnualRevenue": 0,
        "totalMonthlyRevenue": 0,
        "totalSf": 0,
        "totalUnits": 0,
        "vacancy": 0
      }
    ]
}



Get Comparables By ComponentId

Retrieve all the comparables of a component by the component id.

GET /api/comparables/component/{componentId}

Parameters

componentId string

The unique identifier of the component that you want to retrieve the comparables data of.

Response

Returns ComparablesDto

The response body contains the comparables object of the requested componentId.

Swagger Docs /api/comparables/swagger-ui/index.html#/Comparables/getComparablesByComponentIdUsingGET

Example

GET ${BASE_URL}/api/comparables/component/850a0b2f-528f-4b33-b00d-24b1262c5879
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request GET \
    --url "${BASE_URL}/comparables/component/850a0b2f-528f-4b33-b00d-24b1262c5879" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public ComparablesDto getComparablesByComponentId(String componentId) {
   RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/comparables/component/{componentId}")
            .buildAndExpand(componentId)
            .toUriString();

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, uri);
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);

    ResponseEntity<ComparablesDto> responseEntity = restTemplate.exchange(requestBuilder.build(), ComparablesDto.class);
    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responseEntity.getBody();
    } else {
        //Handle unsuccessful response
         throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

{
    "createdBy": "string",
    "creationTime": "2023-01-23T23:05:32.431Z",
    "id": "string",
    "lastModifiedTime": "2023-01-23T23:05:32.431Z",
    "lastRefreshTime": "2023-01-23T23:05:32.431Z",
    "modifiedBy": "string",
    "ownerId": "string",
    "rentComparablesInfo": {
      "averageAskingRent": 0,
      "averageTotalSize": 0,
      "rentComparables": [
        {
          "address": {
            "additionalFreeText": "string",
            "city": "string",
            "country": "string",
            "county": "string",
            "fullAddress": "string",
            "geoLocation": {
              "lat": 0,
              "lng": 0
            },
            "number": 0,
            "placeId": "string",
            "state": "string",
            "street": "string",
            "zipCode": "string"
          },
          "amenities": [
            "string"
          ],
          "anchorRent": 0,
          "askingRent": 0,
          "assetClass": "string",
          "averageUnitSize": 0,
          "concessions": 0,
          "createdByUser": true,
          "dataAsOf": "2023-01-23",
          "description": "string",
          "id": "string",
          "ignore": true,
          "name": "string",
          "netRentableSF": 0,
          "ranking": 0,
          "rentRoll": [
            {
              "askingRent": 0,
              "askingRentPerSqft": 0,
              "bathrooms": 0,
              "bedrooms": 0,
              "id": "string",
              "numUnits": 0,
              "totalMonthlyRevenue": 0,
              "unitSize": 0
            }
          ],
          "source": "string",
          "stories": 0,
          "tenants": [
            "string"
          ],
          "totalSize": 0,
          "totalUnits": 0,
          "transitScore": 0,
          "updatedBy": "enabledByUser",
          "vacancy": 0,
          "walkScore": 0,
          "yearBuilt": 0,
          "yearRenovated": 0
        }
      ],
      "unitTypeToWeightedAvgs": {
        "additionalProp1": {
          "avgAskingRent": 0,
          "avgPriceSF": 0,
          "avgSF": 0,
          "avgUnits": 0,
          "totalAnnualRent": 0,
          "totalMonthlyRent": 0,
          "totalUnitsForUnitType": 0
        },
        "additionalProp2": {
          "avgAskingRent": 0,
          "avgPriceSF": 0,
          "avgSF": 0,
          "avgUnits": 0,
          "totalAnnualRent": 0,
          "totalMonthlyRent": 0,
          "totalUnitsForUnitType": 0
        },
        "additionalProp3": {
          "avgAskingRent": 0,
          "avgPriceSF": 0,
          "avgSF": 0,
          "avgUnits": 0,
          "totalAnnualRent": 0,
          "totalMonthlyRent": 0,
          "totalUnitsForUnitType": 0
        }
      }
    },
    "salesComparablesInfo": {
      "averageCapRate": 0,
      "averagePricePerSF": 0,
      "averagePricePerUnit": 0,
      "salesComparables": [
        {
          "address": {
            "additionalFreeText": "string",
            "city": "string",
            "country": "string",
            "county": "string",
            "fullAddress": "string",
            "geoLocation": {
              "lat": 0,
              "lng": 0
            },
            "number": 0,
            "placeId": "string",
            "state": "string",
            "street": "string",
            "zipCode": "string"
          },
          "apn": "string",
          "assetClass": "string",
          "avgUnitSize": 0,
          "buildingArea": 0,
          "buyerNames": [
            "string"
          ],
          "capRate": 0,
          "commentsOtherInfo": "string",
          "createdByUser": true,
          "dataAsOf": "2023-01-23",
          "description": "string",
          "id": "string",
          "ignore": true,
          "landUseDescription": "string",
          "lotSize": 0,
          "name": "string",
          "noitotal": 0,
          "pricePerSF": 0,
          "pricePerUnit": 0,
          "ranking": 0,
          "saleDate": "2023-01-23",
          "salePrice": 0,
          "sellerNames": [
            "string"
          ],
          "source": "string",
          "stories": 0,
          "tenantInfoAvailable": "string",
          "totalUnits": 0,
          "transitScore": 0,
          "updatedBy": "enabledByUser",
          "vacancyAtSale": "string",
          "vacancyRate": 0,
          "walkScore": 0,
          "yearBuilt": 0,
          "yearRenovated": 0
        }
      ]
    }
}



Export Deal To Excel

Exports the given deal to excel and returns the byte array of the excel file.

GET /api/exports/deals/{dealId}/excel

Parameters

dealId string

The unique identifier of the deal that you want to export.

Response

Returns Resource

The response body contains the byte array of the excel file export of the requested dealId.

Swagger Docs /api/exports/swagger-ui/index.html#/exports/exportDealToExcelUsingGET

Example

GET ${BASE_URL}/api/exports/deals/28a7c6e6-4e0e-4019-a4da-390ef7623962/excel
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request GET \
    --url "${BASE_URL}/api/exports/deals/28a7c6e6-4e0e-4019-a4da-390ef7623962/excel" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public byte[] exportDealToExcel(String dealId) {
        RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
        var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
                .path("/api/deals/{dealId}/excel")
                .buildAndExpand(dealId)
                .toUriString();

        RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, uri);
        requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);

        ResponseEntity<byte[]> responseEntity = restTemplate.exchange(requestBuilder.build(), byte[].class);
        if (responseEntity.getStatusCode().is2xxSuccessful()){
            return responseEntity.getBody();   
        } else {
            //Handle unsuccessful response
            throw new ClientException(responseEntity.getStatusCode());
        }
    }
200 OK

Type

*/*

Body

{
    "description": "string",
    "filename": "string",
    "inputStream": {},
    "open": true,
    "readable": true,
    "uri": "string",
    "url": "string"
}



Generate Document from Template

Generates a template-based document for the given deal and template.

POST /api/documentGeneration/generate/{dealId}/template/{templateName}

Parameters

dealId string

The unique identifier of the deal that you want to retrieve the extract from.

templateName string

The name of the template that will be used to format the returned document.

Response

Returns string

The response body contains the template-based generated document name. This document name can be used as the fileId when calling Get File Content, along with Deal for entityType and the dealId from this request for entityId.

Swagger Docs /api/documentGeneration/swagger-ui/index.html#/documentGeneration/generateDocumentUsingPOST

Example

POST ${BASE_URL}/api/documentGeneration/generate/f69a9ee5-a01d-480e-8f0c-fd19b4e99c5d/template/Blooma%20-%20Comps%20Export.xlsm
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request POST \
    --url "${BASE_URL}/api/documentGeneration/generate/f69a9ee5-a01d-480e-8f0c-fd19b4e99c5d/template/Blooma%20-%20Comps%20Export.xlsm" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
public String generateDocument(String dealId, String templateName) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());

    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/documentGeneration/generate/{dealId}/template/{templateName}")
            .buildAndExpand(dealId, templateName)
            .encode()
            .toUriString();

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.POST, uri);
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);
    requestBuilder.accept(MediaType.APPLICATION_JSON);

    ResponseEntity<String> responseEntity = restTemplate.exchange(requestBuilder.build(), String.class);
    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responseEntity.getBody();
    } else {
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

*/*

Body

Example
GeneratedDocuments/Blooma - Comps Export_2022-12-29_23-19-46.xlsm
To retrieve the generated document's content, use the Get File Content endpoint with the following parameters:

  • entityType: Deal
  • entityId: The dealId from this request, e.g. f69a9ee5-a01d-480e-8f0c-fd19b4e99c5d
  • fileId: The response from this request, e.g. GeneratedDocuments/Blooma - Comps Export_2022-12-27_14-04-29.xlsm



Get File Content

Returns the file content for the specified entity's file.

GET /api/documents/file/{entityType}/{entityId}/content

Parameters

entityType enum

The type of entity that you want to retrieve the file from.

Available enum values: Collateral, Company, Component, Deal, Person

entityId string

The unique identifier of the entity that you want to retrieve the file from.

fieldId string

The unique identifier of the file that you want to retrieve.

Response

Returns string

The response body contains the byte array of the requested file.

Swagger Docs /api/swagger-ui/index.html#/files-controller/getFileContentUsingGET

Example

GET ${BASE_URL}/api/documents/file/Deal/f69a9ee5-a01d-480e-8f0c-fd19b4e99c5d/content?fileId=GeneratedDocuments%2FBlooma%20-%20Comps%20Export_2022-12-29_23-19-46.xlsm
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
curl --request GET \
    --url "${BASE_URL}/api/documents/file/Deal/f69a9ee5-a01d-480e-8f0c-fd19b4e99c5d/content?fileId=GeneratedDocuments%2FBlooma%20-%20Comps%20Export_2022-12-29_23-19-46.xlsm" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw' \
    --output 'Blooma - Comps Export_2022-12-29_23-19-46.xlsm'
public byte[] getFileContent(FileEntityType entityType, String entityId, String fileId) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());

    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/documents/file/{entityType}/{entityId}/content")
            .queryParam("fileId", fileId)
            .buildAndExpand(entityType, entityId)
            .encode()
            .toUri();

    RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.GET, uri);
    requestBuilder.header("Authorization", "Bearer " + ACCESS_TOKEN);
    requestBuilder.accept(MediaType.APPLICATION_OCTET_STREAM);

    ResponseEntity<byte[]> responseEntity = restTemplate.exchange(requestBuilder.build(), byte[].class);
    if (responseEntity.getStatusCode().is2xxSuccessful()) {
        return responseEntity.getBody();
    } else {
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

*/*

Body

Byte array of the requested file.



Create Intelligent Deal

Creates an deal using the intelligent deal creation workflow with the provided files and data.

POST /api/batchProcessor/Deal/create

Parameters

dealName string

The name of the deal that will be created.

loanType enum

Available enum values: Unknown, Acquisition, Acquisition_Construction, Refinance, Refinance_Construction, Construction, Stabilization, Bridge, Permanent

ownerId string

The identifier for the deal owner in Blooma.

cashFlowActualsFile file

Cash flow P&L file to be uploaded and processed.

rentRollFile file

The rent roll file to be uploaded and processed. Must not be provided if propertyType is Hotel.

dealOM file

The deal offering memorandum file to be uploaded and processed.

address.fullAddress string

The street address, must be a validated address by Google (like "1600 Amphitheatre Parkway, Mountain View, CA").

address.placeId string

The google unique identity of the deal place in the Google Places database and on Google Maps, if used it will override the address.fullAddress provided value.

address.additionalFreeText string

loanTerm number(double)

propertyType enum

Available enum values: None, Mixed, Unknown, Hotel, Industrial, Multi_Family_Apartments, Office, Single_Family, Retail, Health_Care_Assisted_Living, Self_Storage, Land, Special_Purpose, Senior_Housing, Parking_Structure, Distribution_Warehouse, Flex_Office, Portfolio

loanAmount number(double)

File Required

At least one of cashFlowActualsFile, rentRollFile, or dealOM must be provided. Failure to provide a file will trigger an error and the deal won’t be created. Additionally, rentRollFile is blocked when propertyType is Hotel since hotels can't have a rent roll.

Response

Returns string

The response body contains the dealId of the newly created deal.

Deal Notifications

Once Blooma has processed this deal and released it to the deal owner, they will receive an email notification with a link to their deal. At this point the deal will be available to them in the pipeline.

Swagger Docs /api/batchProcessor/swagger-ui/index.html#/deal-processing-controller/createIntelligentDealUsingPOST

Example

POST ${BASE_URL}/api/batchProcessor/Deal/create
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
Content-Type: multipart/form-data
curl --request GET \
    --url "${BASE_URL}/api/batchProcessor/Deal/create" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
    --header 'Content-Type: multipart/form-data'
public String createIntelligentDeal(String dealName, String fullAddress, String propertyType, String loanType, String loanAmount, String loanTerm, String ownerId) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/batchProcessor/Deal/create")
            .buildAndExpand()
            .toUriString();

    byte[] fileContent = "OM file content".getBytes();
    byte[] rentRollFileContent = "Rent roll file content".getBytes();
    byte[] cashFlowFileContent = "Cash flow file content".getBytes();

    var parts = new HttpHeaders();
    parts.setContentType(MediaType.MULTIPART_FORM_DATA);
    final HttpEntity<ByteArrayResource> dealOmPartsEntity = getByteArrayResourceHttpEntity("om.pdf", fileContent, parts);
    final HttpEntity<ByteArrayResource> dealRentrollPartsEntity = getByteArrayResourceHttpEntity("rentroll.pdf", rentRollFileContent, parts);
    final HttpEntity<ByteArrayResource> dealCashflowEntity = getByteArrayResourceHttpEntity("cashflow.pdf", cashFlowFileContent, parts);

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(asList(MediaType.APPLICATION_JSON));
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);
    headers.set("Authorization", "Bearer " + ACCESS_TOKEN);

    var requestMap = new LinkedMultiValueMap<String, Object>();
    requestMap.add("dealName", dealName);
    requestMap.add("address", fullAddress);
    requestMap.add("propertyType", propertyType);
    requestMap.add("loanType", loanType);
    requestMap.add("loanAmount", loanAmount);
    requestMap.add("loanTerm", loanTerm);
    requestMap.add("ownerId", ownerId);
    requestMap.add("dealOM", dealOmPartsEntity);
    requestMap.add("rentRollFile", dealRentrollPartsEntity);
    requestMap.add("cashFlowActualsFile", dealCashflowEntity);


    var responseEntity = restTemplate.exchange(uri, HttpMethod.POST,
            new HttpEntity<>(requestMap, headers), String.class);

    if (responseEntity.getStatusCode().is2xxSuccessful())
        return responseEntity.getBody();
    else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

5f9c2dea-a937-4530-a90e-70f95fd7d1a4



Create Commercial Deal

Creates a commercial deal using the provided data.

POST /api/batchProcessor/Deal/createCommercialDeal

Parameters

Request body CreateCommercialDealDto

commercialLivingUnitCreateDto array [ CommercialLivingUnitCreateDto ]

dealName string

loanAmount number(double)

loanTerm number(double)

loanType string(enum)

Available enum values: Acquisition, Acquisition_Construction, Bridge, Construction, Permanent, Refinance, Refinance_Construction, Stabilization, Unknown

ownerId string

The owner of the deal within Blooma.

propertyType string(enum)

Available enum values: Distribution_Warehouse, Flex_Office, Health_Care_Assisted_Living, Hotel, Industrial, Land, Mixed, Multi_Family_Apartments, None, Office, Parking_Structure, Portfolio, Retail, Self_Storage, Senior_Housing, Single_Family, Special_Purpose, Unknown

Response

Returns string

The response body contains the dealId of the newly created deal.

Swagger Docs /api/batchProcessor/swagger-ui/index.html#/deal-processing-controller/createCommercialDealUsingPOST

Example

POST ${BASE_URL}/api/batchProcessor/Deal/createCommercialDeal
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
Content-Type: application/json

{
    "address": {
        "additionalFreeText": "string",
        "fullAddress": "string",
        "placeId": "string"
    },
    "commercialLivingUnitCreateDto": [
        {
        "description": "string",
        "floor": 0,
        "frontEndGridLineNumber": "string",
        "suite": "string",
        "unitSize": 0
        }
    ],
    "dealName": "string",
    "loanAmount": 0,
    "loanTerm": 0,
    "loanType": "Acquisition",
    "ownerId": "string",
    "propertyType": "Distribution_Warehouse"
}
curl --request GET \
    --url "${BASE_URL}/api/batchProcessor/Deal/createCommercialDeal" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
    --header 'Content-Type: application/json'
    --data '{
        "address": {
            "additionalFreeText": "string",
            "fullAddress": "string",
            "placeId": "string"
        },
        "commercialLivingUnitCreateDto": [
            {
            "description": "string",
            "floor": 0,
            "frontEndGridLineNumber": "string",
            "suite": "string",
            "unitSize": 0
            }
        ],
        "dealName": "string",
        "loanAmount": 0,
        "loanTerm": 0,
        "loanType": "Acquisition",
        "ownerId": "string",
        "propertyType": "Distribution_Warehouse"
    }'
public String createCommercialDeal(CreateCommercialDealDto dealCreationData) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/batchProcessor/Deal/createCommercialDeal")
            .buildAndExpand()
            .toUriString();

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(asList(MediaType.APPLICATION_JSON));
    headers.set("Authorization", "Bearer " + ACCESS_TOKEN);

    var responseEntity = restTemplate.exchange(uri, HttpMethod.POST,
            new HttpEntity<>(dealCreationData, headers), String.class);

    if (responseEntity.getStatusCode().is2xxSuccessful())
        return responseEntity.getBody();
    else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

5f9c2dea-a937-4530-a90e-70f95fd7d1a4



Create Hotel Deal

Creates a hotel deal using the provided data.

POST /api/batchProcessor/Deal/createHotelDeal

Parameters

Request body CreateHotelDealDto

dealName string

hotelLivingUnitCreateDto HotelLivingUnitCreateDto

loanAmount number(double)

loanTerm number(double)

loanType string(enum)

Available enum values: Acquisition, Acquisition_Construction, Bridge, Construction, Permanent, Refinance, Refinance_Construction, Stabilization, Unknown

ownerId string

The owner of the deal within Blooma.

propertyType string(enum)

Available enum values: Distribution_Warehouse, Flex_Office, Health_Care_Assisted_Living, Hotel, Industrial, Land, Mixed, Multi_Family_Apartments, None, Office, Parking_Structure, Portfolio, Retail, Self_Storage, Senior_Housing, Single_Family, Special_Purpose, Unknown

Response

Returns string

The response body contains the dealId of the newly created deal.

Swagger Docs /api/batchProcessor/swagger-ui/index.html#/deal-processing-controller/createHotelDealUsingPOST

Example

POST ${BASE_URL}/api/batchProcessor/Deal/createHotelDeal
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
Content-Type: application/json

{
    "address": {
        "additionalFreeText": "string",
        "fullAddress": "string",
        "placeId": "string"
    },
    "dealName": "string",
    "hotelLivingUnitCreateDto": {
        "adr": 0,
        "numUnits": 0,
        "occupancy": 0,
        "sqFt": 0
    },
    "loanAmount": 0,
    "loanTerm": 0,
    "loanType": "Acquisition",
    "ownerId": "string",
    "propertyType": "Distribution_Warehouse"
}
curl --request GET \
    --url "${BASE_URL}/api/batchProcessor/Deal/createHotelDeal" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
    --header 'Content-Type: application/json'
    --data '{
        "address": {
            "additionalFreeText": "string",
            "fullAddress": "string",
            "placeId": "string"
        },
        "dealName": "string",
        "hotelLivingUnitCreateDto": {
            "adr": 0,
            "numUnits": 0,
            "occupancy": 0,
            "sqFt": 0
        },
        "loanAmount": 0,
        "loanTerm": 0,
        "loanType": "Acquisition",
        "ownerId": "string",
        "propertyType": "Distribution_Warehouse"
    }'
public String createHotelDeal(CreateHotelDealDto dealCreationData) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/batchProcessor/Deal/createHotelDeal")
            .buildAndExpand()
            .toUriString();

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(asList(MediaType.APPLICATION_JSON));
    headers.set("Authorization", "Bearer " + ACCESS_TOKEN);

    var responseEntity = restTemplate.exchange(uri, HttpMethod.POST,
            new HttpEntity<>(dealCreationData, headers), String.class);

    if (responseEntity.getStatusCode().is2xxSuccessful())
        return responseEntity.getBody();
    else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

5f9c2dea-a937-4530-a90e-70f95fd7d1a4



Create Residential Deal

Creates a residential deal using the provided data.

POST /api/batchProcessor/Deal/createResidentialDeal

Parameters

Request body CreateResidentialDealDto

dealName string

loanAmount number(double)

loanTerm number(double)

loanType string(enum)

Available enum values: Acquisition, Acquisition_Construction, Bridge, Construction, Permanent, Refinance, Refinance_Construction, Stabilization, Unknown

ownerId string

The owner of the deal within Blooma.

propertyType string(enum)

Available enum values: Distribution_Warehouse, Flex_Office, Health_Care_Assisted_Living, Hotel, Industrial, Land, Mixed, Multi_Family_Apartments, None, Office, Parking_Structure, Portfolio, Retail, Self_Storage, Senior_Housing, Single_Family, Special_Purpose, Unknown

residentialLivingUnitCreateDto array [ ResidentialLivingUnitCreateDto ]

Response

Returns string

The response body contains the dealId of the newly created deal.

Swagger Docs /api/batchProcessor/swagger-ui/index.html#/deal-processing-controller/createResidentialDealUsingPOST

Example

POST ${BASE_URL}/api/batchProcessor/Deal/createResidentialDeal
Accept: */*
Authorization: Bearer eyJz93a...k4laUWw
Content-Type: application/json

{
    "address": {
        "additionalFreeText": "string",
        "fullAddress": "string",
        "placeId": "string"
    },
    "dealName": "string",
    "loanAmount": 0,
    "loanTerm": 0,
    "loanType": "Acquisition",
    "ownerId": "string",
    "propertyType": "Distribution_Warehouse",
    "residentialLivingUnitCreateDto": [
        {
        "bathrooms": 0,
        "bedrooms": 0,
        "description": "string",
        "frontEndGridLineNumber": "string",
        "numUnits": 0,
        "unitSize": 0
        }
    ]
}
curl --request GET \
    --url "${BASE_URL}/api/batchProcessor/Deal/createResidentialDeal" \
    --header 'Accept: */*' \
    --header 'Authorization: Bearer eyJz93a...k4laUWw'
    --header 'Content-Type: application/json'
    --data '    {
        "address": {
            "additionalFreeText": "string",
            "fullAddress": "string",
            "placeId": "string"
        },
        "dealName": "string",
        "loanAmount": 0,
        "loanTerm": 0,
        "loanType": "Acquisition",
        "ownerId": "string",
        "propertyType": "Distribution_Warehouse",
        "residentialLivingUnitCreateDto": [
            {
            "bathrooms": 0,
            "bedrooms": 0,
            "description": "string",
            "frontEndGridLineNumber": "string",
            "numUnits": 0,
            "unitSize": 0
            }
        ]
    }'
public String createResidentialDeal(CreateResidentialDealDto dealCreationData) {
    RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    var uri = UriComponentsBuilder.fromHttpUrl(BASE_URL)
            .path("/api/batchProcessor/Deal/createResidentialDeal")
            .buildAndExpand()
            .toUriString();

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(asList(MediaType.APPLICATION_JSON));
    headers.set("Authorization", "Bearer " + ACCESS_TOKEN);

    var responseEntity = restTemplate.exchange(uri, HttpMethod.POST,
            new HttpEntity<>(dealCreationData, headers), String.class);

    if (responseEntity.getStatusCode().is2xxSuccessful())
        return responseEntity.getBody();
    else {
        //Handle unsuccessful response
        throw new ClientException(responseEntity.getStatusCode());
    }
}
200 OK

Type

application/json

Body

5f9c2dea-a937-4530-a90e-70f95fd7d1a4

Last update: 2023-07-14