Pricing a Loan
Simple Pricing will run a pricing search without fees. Despite this, the search can be quite complex and nuanced. The model contains over 200 user fields to tailor your search.
Simple pricing uses the API call: /rest/pricing/multisearch/{userID}
Authentication
All flows begin with authentication. Use any authentication method described to authenticate into the Lender Price API.
Request Model
The pricing request specifies the search terms for the pricing search. It contains over 200 fields to fine tune the search as desired.
Many of the request fields are organized into containers, the most important of which are:
criteria-- contains Borrower Criteria such as loan amount, purchase price, and other fields related to the loan borrower.property-- contains fields relating to the property such as address, number of rooms, and others.brokerCriteria-- contains fields pertaining to the broker such as the lock terms.closingCost-- contains fields related to the Closing Cost such as title services and third party services.miCriteria-- contains fields related to the loan type.
The request also contains fields to handle rates, filter results, select the mortgage type, lock terms, and more.
Pricing Request Breakdown
curl --location -g --request POST '{{protocol}}{{pricingApiHost}}/rest/pricing/multisearch/{{userId}}' \
--header 'secret: {{token}}' \
--header 'companyid: {{companyId}}' \
--data-raw '{
"companyId": "{{companyId}}",
"criteria": {//all search criteria pertainint to the borrower
},
"rateRange": {//set a rate range using the to and from fields here
},
"property": {//all search criteria pertaining to the property
},
"brokerCriteria": {//all search criteria pertaining to the loan broker
},
"accessCriteria": {//internal fields used to tailor the search and not required by the client.
},
"filter": {//options to filter search results by program name or product code
},
"miCriteria": {//search criteria pertaining to the loan
},
"closingCost": {//all search criteria pertaining to the closing cost
},
"termsCriteria": [{{the loan term in years}}],
"loanPurposeCriteria": [{{loan purpose}}],
"loanTypeCriteria": [{{loan type}}],
//additional search fields are listed at this level
}'
Required and Suggested Fields
Certain input fields are required for all requests, and others are suggested.
The following fields are required for every pricing search:
- Multi Criteria Search Model
loanPurposeCriteria(required)loanTypeCriteria(required)companyId(required)termsCriteria(required)maxListingPerRate(required)- Access Criteria:
companyIds(required, can be empty)
- Broker Criteria:
ausList(required)dayLocks(required)
- Borrower Criteria:
appraisedValue(required if purchase)escrowWaiver(recommended, defaults to false if empty or null)fundingFeeFinanced(recommended, defaults to false if empty or null)guranteeFeeFinanced(recommended, defaults to false if empty or null)firstTimeHomeBuyer(recommended, defaults to false if empty or null)pmiType(required, can be set to default to BPMI, will only run for MI scenario)mortgageTypes(required)mortgageType(can be left empty ifmortgageTypesis given, if not, will default to Conventional)Fico(required)loanAmount(required)loanPurpose(optional ifloanPurposeCriteriais given)loanType(required)loanYear(optional iftermsCriteriais empty)monthlyDebt(required)monthlyIncome(required)propertyUse(required)purchasePrice(required)specialMortgageOptions(optional, depends on client configuration)variableLoanTypes(required, can be left empty)
- MiCriteria:
miCompanyName(required for MI)
- Property:
Address(required, zip and state minimum)numberOfUnit(required)propertyType(required)
The following fields are not required but are suggested:
- Multi Criteria Search Model:
showDisqualifyshowDisqualifyRulestermsCriteria
Example Requests
Three example payloads are shown below, ordered from the simplest to the most complete. Click a request to expand it.
Request #1 — Recommended Minimum Payload (Minimum Field Response)
The fields section filters out the amount of fields coming back in the response for each qualified program. Only the fields listed in fields will return. Lender Price recommends implementing the fields section after the client has done its due diligence and mapping with a full response. Removing the fields section will return the full response for each qualified product.
curl --location \
'https://{{protocol}}{{pricingApiHost}}/rest/pricing/multisearch/{{userId}}' \
--header 'secret: {{token}}' \
--header 'companyId: {{companyId}}' \
--header 'Content-Type: application/json' \
--data '{
"companyId": "{{companyId}}",
"accessCriteria": {
"userContext": null
},
"brokerCriteria": {
"ausList": ["None", "GUS", "MUW", "LP", "DU"],
"dayLocks": "30"
},
"criteria": {
"loanAmount": "400000",
"purchasePrice": "600000",
"appraisedValue": "600000",
"monthlyIncome": "150000",
"monthlyDebt": "3000",
"escrowWaiver": "false",
"fico": "740",
"firstTimeHomeBuyer": "false",
"fundingFeeFinanced": "YES",
"guranteeFeeFinanced": "YES",
"loanPurpose": "Purchase",
"loanType": "Fixed",
"mortgageType": "Conventional",
"mortgageTypes": ["Conventional"],
"pmiType": "BPMI",
"propertyUse": "PrimaryResidence"
},
"loanPurposeCriteria": ["Purchase"],
"loanTypeCriteria": ["Fixed"],
"maxListingPerRate": "3",
"miCriteria": {
"miCompanyName": null
},
"property": {
"address": {
"state": "CA",
"zip": "91101"
},
"numberofUnit": "1",
"propertyType": "SingleFamily"
},
"termsCriteria": ["30"],
"fields": [
"resultMap.resultRates.data._ANY_.rateGrid.productCode",
"resultMap.resultRates.data._ANY_.rateGrid.name",
"resultMap.resultRates.data._ANY_.basePoints",
"resultMap.resultRates.data._ANY_.adjustedRates",
"resultMap.resultRates.data._ANY_.rawAdjustmentPoints",
"resultMap.resultRates.data._ANY_.adjustedPoints",
"resultMap.resultRates.data._ANY_.borrowerPaid",
"resultMap.resultRates.data._ANY_.finalClosingCost",
"resultMap.resultRates.data._ANY_.apr",
"resultMap.resultRates.data._ANY_.miPriceDetail.miPayment",
"resultMap.resultRates.data._ANY_.monthlyPayment.monthlyPI",
"resultMap.resultRates.data._ANY_.monthlyPayment.total",
"resultMap.resultRates.data._ANY_.monthlyPayment.mi",
"resultMap.resultRates.data._ANY_.monthlyPayments.mi",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.amount",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.code",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.name",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.isOrigination",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.aprRelated",
"resultMap.resultRates.data._ANY_.groupAdjustmentProperties.disqualifyAdjustments"
]
}'
Request #2 — Minimum Payload with Dynamic Fields
This is an example of a typical request that includes dynamic fields. Dynamic fields are passed at the root of the request in the dynamicPropertiesMap object. Each entry is keyed by its fieldId, and its value supplies the data for that field.
The fields section filters out the amount of fields coming back in the response for each qualified program. Only the fields listed in fields will return. Lender Price recommends implementing the fields section after the client has done its due diligence and mapping with a full response. Removing the fields section will return the full response for each qualified product.
curl --location \
'https://{{protocol}}{{pricingApiHost}}/rest/pricing/multisearch/{{userId}}' \
--header 'secret: {{token}}' \
--header 'companyId: {{companyId}}' \
--header 'Content-Type: application/json' \
--data '{
"companyId": "{{companyId}}",
"accessCriteria": {
"userContext": null
},
"brokerCriteria": {
"ausList": ["None", "GUS", "MUW", "LP", "DU"],
"dayLocks": "30"
},
"criteria": {
"loanAmount": "400000",
"purchasePrice": "600000",
"appraisedValue": "600000",
"monthlyIncome": "150000",
"monthlyDebt": "3000",
"escrowWaiver": "false",
"fico": "740",
"firstTimeHomeBuyer": "false",
"fundingFeeFinanced": "YES",
"guranteeFeeFinanced": "YES",
"loanPurpose": "Purchase",
"loanType": "Fixed",
"mortgageType": "Conventional",
"mortgageTypes": ["Conventional"],
"pmiType": "BPMI",
"propertyUse": "PrimaryResidence"
},
"loanPurposeCriteria": ["Purchase"],
"loanTypeCriteria": ["Fixed"],
"maxListingPerRate": "3",
"miCriteria": {
"miCompanyName": null
},
"property": {
"address": {
"state": "CA",
"zip": "91101"
},
"numberofUnit": "1",
"propertyType": "SingleFamily"
},
"termsCriteria": ["30"],
"fields": [
"resultMap.resultRates.data._ANY_.rateGrid.productCode",
"resultMap.resultRates.data._ANY_.rateGrid.name",
"resultMap.resultRates.data._ANY_.basePoints",
"resultMap.resultRates.data._ANY_.adjustedRates",
"resultMap.resultRates.data._ANY_.rawAdjustmentPoints",
"resultMap.resultRates.data._ANY_.adjustedPoints",
"resultMap.resultRates.data._ANY_.borrowerPaid",
"resultMap.resultRates.data._ANY_.finalClosingCost",
"resultMap.resultRates.data._ANY_.apr",
"resultMap.resultRates.data._ANY_.miPriceDetail.miPayment",
"resultMap.resultRates.data._ANY_.monthlyPayment.monthlyPI",
"resultMap.resultRates.data._ANY_.monthlyPayment.total",
"resultMap.resultRates.data._ANY_.monthlyPayment.mi",
"resultMap.resultRates.data._ANY_.monthlyPayments.mi",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.amount",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.code",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.name",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.isOrigination",
"resultMap.resultRates.data._ANY_.borrowerPaidDetails.aprRelated",
"resultMap.resultRates.data._ANY_.groupAdjustmentProperties.disqualifyAdjustments"
],
"dynamicPropertiesMap": {
"GLOBAL_GIFTFUNDPERCENT": {
"fieldId": "GLOBAL_GIFTFUNDPERCENT",
"value": "0"
},
"Citizenship": {
"fieldId": "Citizenship",
"value": "US Citizen"
},
"MORT30LATESLAST12M": {
"fieldId": "MORT30LATESLAST12M",
"value": "0"
},
"MORT60LATESLAST12M": {
"fieldId": "MORT60LATESLAST12M",
"value": "0"
},
"MORT90LATESLAST12M": {
"fieldId": "MORT90LATESLAST12M",
"value": "0"
},
"MORT120LATESLAST12M": {
"fieldId": "MORT120LATESLAST12M",
"value": "0"
},
"IncomeDocType": {
"fieldId": "IncomeDocType",
"value": "Full Doc - 24M"
},
"AddlOccupancyType": {
"fieldId": "AddlOccupancyType",
"value": ""
},
"GLOBAL_BorrowerType": {
"fieldId": "GLOBAL_BorrowerType",
"value": "Individual"
},
"GLOBAL_NumberOfVacantUnits": {
"fieldId": "GLOBAL_NumberOfVacantUnits",
"value": ""
},
"GLOBAL_MixedUse": {
"fieldId": "GLOBAL_MixedUse"
}
}
}'
Request #3 — Full Pricing Request
curl --location -g --request POST \
'{{protocol}}{{pricingApiHost}}/rest/pricing/multisearch/{{userId}}' \
--header 'secret: {{token}}' \
--header 'companyid: {{companyId}}' \
--data-raw '{
"date": null,
"companyId": "{{companyId}}",
"criteria": {
"purchasePrice": 500000,
"loanAmount": 400000,
"lineAmount": 0,
"rehabBudget": 0,
"drawAmount": 0,
"subordinateLoanAmount": 0,
"pmiType": "None",
"monthlyIncome": "5000.00",
"monthlyDebt": "2150.00",
"loanYear": 30,
"loanPurpose": "Purchase",
"loanType": "Fixed",
"mortgageType": null,
"mortgageTypes": ["Conventional"],
"propertyUse": "PrimaryResidence",
"ownProperties": 0,
"specialMortgageOptions": [],
"fundingFeeFinanced": "YES",
"inclusive": false,
"varaiableLoanTypes": [],
"fico": 760,
"downPaymentAmount": 0,
"isFirstLienSame": "",
"escrowWaiver": false,
"lenderFeeWaiver": true,
"compensationType": "LenderCompPlan",
"lienPriorityType": "FirstLien"
},
"rateRange": {
"@class": "com.cre8techlabs.entity.range.DoubleRangeLeGt",
"from": null,
"to": null
},
"property": {
"address": {
"longitude": null,
"latitude": null,
"censustract": "06037",
"street": "",
"streetCont": "",
"city": "Pasadena",
"zip": "91101",
"zipExt": "",
"state": "CA",
"province": "",
"county": "06037",
"countyName": "",
"country": "US"
},
"propertyType": "SingleFamily",
"numberOfUnit": 1,
"attachmentType": null
},
"brokerCriteria": {
"displayConventionalRate": false,
"minimunCompensation": null,
"maxCompensation": null,
"overrideExistingComplan": false,
"compPlan": null,
"qmFilterLimit": null,
"rateTypes": [],
"sortView": "LenderPaid",
"businessSourceType": "BST_NA",
"divisionSourceType": null,
"feeServicer": null,
"feeServicerList": [],
"dayLocks": 30,
"dayLocksList": [14, 15, 21, 30, 45, 60, 90],
"ausList": ["None", "LP", "DU"],
"closingCostRange": {
"@class": "com.cre8techlabs.entity.broker.BrokerCriteria$RangeClosingCost",
"from": null,
"to": null,
"closestToPar": false,
"infinite": true
},
"searchContext": {}
},
"accessCriteria": {
"marketPlaceSearch": false,
"companyIds": []
},
"filter": {
"programNames": [],
"productCode": []
},
"showDisqualify": false,
"showDisqualifyRules": true,
"showUnmatchCompPlan": false,
"rateGridIds": [],
"ratePeriodIds": [],
"miCriteria": {
"miCompanyId": null,
"miCompanyName": null,
"amortizationType": "FullyAmmortized",
"loanType": "Fixed",
"duLpDecision": "DU_Approve_Eligible",
"buyDownPercent": "None",
"originationChannel": "Retail",
"loanProgram": null,
"renewalType": "Constant",
"paymentPlan": "EZMonthly",
"paymentType": "Monthly",
"coBorrowerFicoScore": null,
"varaiableLoanType": null,
"numberOfDeferredPayments": 0
},
"closingCost": {
"closingCostGroup": [],
"settlementCost": {
"origination": {
"othersLabel": "Fee",
"others": 0,
"underwritingLabel": "Underwriting",
"underwriting": 0,
"administrationLabel": "Administration Fee",
"administration": null,
"lenderCreditLabel": "Lender Credit",
"lenderCredit": null,
"total": 0
},
"titleService": {
"overrideTitle": false,
"titleInsuranceLabel": "Title Insurance Cost",
"titleInsurance": null,
"borrowerTitlePaidPercentLabel": "Borrower Title Insurance Percent",
"borrowerTitlePaidPercent": 0.5,
"overrideEscrow": false,
"escrowCostLabel": "Escrow Cost",
"escrowCost": null,
"borrowerEscrowPaidPercentLabel": "Borrower Escrow Cost Percent",
"borrowerEscrowPaidPercent": 0.5,
"notarySignLabel": "Notary Sign",
"notarySign": 145,
"total": 145
},
"thirdPartyServices": {
"appraisalLabel": "Appraisal",
"appraisal": 500,
"taxServiceLabel": "Tax Service",
"taxService": 0,
"creditReportLabel": "Credit Report",
"creditReport": 0,
"floodCertificationLabel": "Floor Certification",
"floodCertification": 12,
"overnightLabel": "Overnight",
"overnight": 16,
"recordingLabel": "Recording",
"recording": 85,
"total": 613
},
"closingCostGroup": [],
"total": 758
},
"useClosingCost": false,
"useCompanyDefaultClosingCost": false,
"useErnstCost": false,
"allowErnstQuote": false,
"total": 758
},
"rate": null,
"maxListingPerRate": -1,
"skipAdjustments": false,
"name": null,
"termsCriteria": [30],
"loanPurposeCriteria": ["Purchase"],
"loanTypeCriteria": ["Fixed"],
"varLoanTypeCriteria": [],
"code": "FLEX"
}'