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 requestoffset
.X-Paging-PageSize
: The current page size. Equal to the requestlast
.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¶
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
: 1X-Paging-PageNo
: 0X-Paging-PageSize
: 20X-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.
Advanced Search with RSQL (search
)¶
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:
- Selector:
originatedLoanAmount
- Comparison Operator:
==
- 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¶
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¶
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
.
Tip
Use the specific component type endpoint to extend the data to one of ComponentDto
derived classes:
Swagger Docs /api/components/swagger-ui/index.html#/Component/readComponentUsingGET
Example¶
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¶
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¶
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¶
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¶
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¶
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());
}
}
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¶
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¶
To retrieve the generated document's content, use the Get File Content endpoint with the following parameters:entityType
:Deal
entityId
: ThedealId
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¶
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());
}
}
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¶
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());
}
}
Create Commercial Deal¶
Creates a commercial deal using the provided data.
POST /api/batchProcessor/Deal/createCommercialDeal
Parameters¶
Request body CreateCommercialDealDto
address
AddressCreateDto
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());
}
}
Create Hotel Deal¶
Creates a hotel deal using the provided data.
POST /api/batchProcessor/Deal/createHotelDeal
Parameters¶
Request body CreateHotelDealDto
address
AddressCreateDto
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());
}
}
Create Residential Deal¶
Creates a residential deal using the provided data.
POST /api/batchProcessor/Deal/createResidentialDeal
Parameters¶
Request body CreateResidentialDealDto
address
AddressCreateDto
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());
}
}