Copy the code below or download the attached .yaml file at the bottom of the page for use in setting up TE Connect PPEs.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# Total Expert Pricing Engine (PPE) Schema
# YAML representation of the TE PPE Schema for JSON request/response structure
---
# API Configuration
api_configuration:
authentication:
method: "POST"
endpoint: "{{configured_ppe_endpoint}}"
headers:
api-token: "{{configured_api_token}}"
description: "Configured in Pricing Engine Authentication screen under 'TE Connect'"
organization_setting:
name: "rate_quote_default_ppe"
value: "TE Connect"
description: "Required organization setting to enable TE Connect PPE requests"
# Request Structure
request_schema:
org_context:
description: "Organization context information"
fields:
name:
type: "string"
required: true
description: "TE Organization Name"
example: "Expert Bank"
org_id:
type: "string"
required: true
description: "TE Organization ID"
example: "622"
ppe_service_url:
type: "string"
required: true
description: "Configured TE Connect URL in Pricing Auth Settings"
example: "https://apim.workato.com/teconnect/example-ppe-v1/example-ppe"
user_context:
description: "User context for the requesting user"
fields:
username:
type: "string"
required: true
description: "Requesting user TE username"
example: "super.admin@prgo-example.com"
external_id:
type: "string"
required: false
conditional: "Sent if configured for user"
description: "Requesting user TE external ID"
example: "1234"
email:
type: "string"
required: true
description: "Requesting user TE email address"
example: "super.admin@prgo-example.com"
id:
type: "string"
required: true
description: "Requesting user TE ID"
example: "22419214"
invocation_context:
description: "Context about where the PPE request was invoked"
fields:
type:
type: "string"
required: true
description: "Location where PPE request was invoked in TE"
enum: ["Marketing Material", "Contact"]
example: "Marketing Material"
contact_id:
type: "string"
required: false
conditional: "Sent if request type is Contact"
description: "TE Contact ID if request invoked from Contact"
example: "339444304"
loan_to_compare_id:
type: "string"
required: false
conditional: "Sent if request is Contact, purpose is refinance, and loan to compare selected"
description: "TE Loan ID if request invoked from Contact with loan to compare"
example: ""
asset_id:
type: "string"
required: true
conditional: "Sent if invoked from marketing material"
description: "Marketing Material asset ID if invoked from print flyer"
example: "676994"
custom:
description: "Top-level custom fields configured in Pricing Engine Defaults Config"
type: "array"
required: false
conditional: "Sent if configured"
items:
name:
type: "string"
description: "Custom field name"
example: "test3"
value:
type: "string"
description: "Custom field value"
example: "test5"
lead_source:
type: "string"
required: false
conditional: "Sent if configured"
description: "Lead Source value configured in Pricing Engine Defaults Config"
example: "1234"
request:
description: "Main request object containing property, loan, and borrower details"
property:
description: "Property information"
fields:
value:
type: "number"
required: true
description: "Property value figure entered in Create Quote interface"
example: 795000
type:
type: "string"
required: true
description: "Property type"
enum:
- "SingleFamily"
- "Condo"
- "ManufacturedDoubleWide"
- "Condotel"
- "Modular"
- "PUD"
- "Timesharer"
- "ManufacturedSingleWide"
- "Coop"
- "NonWarrantableCondo"
- "Townhouse"
- "DetachedCondo"
example: "SingleFamily"
use:
type: "string"
required: true
description: "Property use type"
enum:
- "PrimaryResidence"
- "SecondHome"
- "InvestmentProperty"
example: "PrimaryResidence"
stories:
type: "integer"
required: true
description: "Stories of the property financed"
example: 1
taxes_annual:
type: "number"
required: false
conditional: "Sent if provided"
description: "Annual taxes value of the property financed"
example: 4751
units:
type: "integer"
required: true
description: "Units of the property financed"
example: 1
insurance_annual:
type: "number"
required: false
conditional: "Sent if provided"
description: "Annual insurance of the property financed"
example: 1400
state:
type: "string"
required: true
description: "Two letter acronym of state location of property financed"
example: "NE"
zip_code:
type: "string"
required: true
description: "Zip code of location of property financed"
example: "68521"
county:
type: "string"
required: true
description: "County location of property financed"
example: "Lancaster"
fips:
type: "string"
required: true
description: "FIPS code location of property financed"
example: "31109"
new_construction:
type: "boolean"
required: false
conditional: "Sent only for Contact request types"
description: "If property financed is new construction"
example: true
unique_property:
type: "boolean"
required: false
conditional: "Sent only for Contact request types"
description: "If property financed is a unique property"
example: true
loan:
description: "Loan information"
fields:
request_id:
type: "string"
required: true
description: "Unique identifier of the request, use in response to correlate request/response in TE UI"
format: "uuid"
example: "d7831ccb-d4e2-456b-ae90-3338c634669d"
loan_purpose:
type: "string"
required: true
description: "Loan purpose type (refinance only available for Contact request types)"
enum:
- "Purchase"
- "Refinance"
example: "Purchase"
refinance:
description: "Refinance specific details"
conditional: "Only passed if loan_purpose is Refinance"
fields:
purpose:
type: "string"
required: false
conditional: "Only sent if Contact request type and loan_purpose is refinance"
description: "Refinance purpose type"
enum:
- "CashoutRefinance"
- "RateAndTermRefinance"
- "InterestRateReductionRefinance"
- "StreamlineRefinance"
example: "CashoutRefinance"
amount_of_cash_out:
type: "number"
required: false
conditional: "Only sent if Contact request type, loan_purpose is refinance, refinance.purpose is CashoutRefinance, and if provided"
description: "Cashout value figure entered in Create Quote interface"
example: 30000
downpayment_value:
type: "number"
required: true
description: "Downpayment value figure entered in Create Quote interface"
example: 159000
loan_amount:
type: "number"
required: true
description: "Loan amount value figure entered in Create Quote interface"
example: 636000
loan_type:
type: "string"
required: true
description: "Loan type"
enum:
- "Conforming"
- "NonConforming"
- "FHA"
- "VA"
- "USDARuralHousing"
example: "Conforming"
amortization_type:
type: "string"
required: true
description: "Amortization type"
enum:
- "Fixed"
- "ARM"
example: "Fixed"
arm_fixed_term:
type: "integer"
required: false
conditional: "Only sent if amortization_type is ARM"
description: "ARM fixed term in months (1, 3, 6, 12, etc)"
example: 0
loan_term:
type: "integer"
required: true
description: "Loan term in months (120, 360, etc)"
example: 360
desired_price:
type: "number"
required: true
description: "Desired price of offer entered in Create Quote interface"
example: 99.75
interest_only:
type: "boolean"
required: true
description: "If offer should be interest only"
example: false
automated_underwriting_system:
type: "string"
required: true
description: "Automated underwriting system"
enum:
- "DU"
- "LP"
- "NotSpecified"
- "InvestorAUS"
- "ManualTraditional"
example: "NotSpecified"
exempt_from_va_funding_fee:
type: "boolean"
required: true
description: "If offer should be exempt from VA funding fee"
example: false
heloc_drawn_amount:
type: "number"
required: true
description: "Desired HELOC draw amount entered in Create Quote interface"
example: 15000
borrower_paid_mi:
type: "boolean"
required: true
description: "If offer has borrower paid mortgage insurance"
example: true
prepay_penalty:
type: "string"
required: false
conditional: "Only sent for Contact request types"
description: "Prepayment penalty (1 equals a 1 year prepayment penalty)"
enum:
- "None"
- "1"
- "2"
- "3"
- "4"
- "5"
example: "2"
debt_consolidation:
type: "boolean"
required: false
conditional: "Only sent for Contact request types"
description: "If cashout reason is debt consolidation"
example: true
lien_position:
type: "string"
required: true
description: "Lien position"
enum:
- "First"
- "Second"
example: "First"
second_lien_amount:
type: "number"
required: false
conditional: "Only sent for Contact request types"
description: "Second lien amount entered in Create Quote interface"
example: 30000
custom:
description: "Loan-level custom fields configured in Default Loan Product"
type: "array"
required: false
conditional: "Sent if configured"
items:
name:
type: "string"
description: "Custom field name"
example: "test1"
value:
type: "string"
description: "Custom field value"
example: "test2"
borrower:
description: "Borrower information"
fields:
debt_to_income_ratio:
type: "number"
required: true
description: "DTI value entered in Create Quote interface"
example: 32
fico_score:
type: "integer"
required: true
description: "FICO value entered in Create Quote interface"
example: 738
months_reserves:
type: "integer"
required: true
description: "Months reserved value entered in Create Quote interface"
example: 12
desired_lock_period:
type: "integer"
required: true
description: "Desired lock period entered in Create Quote Interface"
example: 30
first_time_home_buyer:
type: "boolean"
required: true
description: "If first time home buyer"
example: false
waive_escrows:
type: "boolean"
required: true
description: "If escrows are waived"
example: false
self_employed:
type: "boolean"
required: true
description: "If borrower is self employed"
example: false
va_first_time_use:
type: "boolean"
required: false
conditional: "Only sent for Contact request types"
description: "If borrower is first time VA borrower"
example: true
income_verification_type:
type: "string"
required: false
conditional: "Only sent for Contact request types"
description: "Income verification type"
enum:
- "FullDoc"
- "PersonalBankStmt1Mo"
- "PersonalBankStmt6Mos"
- "PersonalBankStmt12Mos"
- "PersonalBankStmt18Mos"
- "PersonalBankStmt24Mos"
- "BusinessBankStmt1Mo"
- "BusinessBankStmt6Mos"
- "BusinessBankStmt12Mos"
- "BusinessBankStmt18Mos"
- "BusinessBankStmt24Mos"
- "OneYearAltDoc"
- "AssetRelated"
- "InvestorDscr"
- "RestrictedStock"
- "InvestorNoRatio"
- "PersonalBankStmt3Mos"
- "BusinessBankStmt3Mos"
- "TwoYearAltDoc"
- "WrittenVOE"
- "Stated"
- "OneYear1099"
- "TwoYear1099"
- "PLOneYear"
- "PLTwoYear"
- "NoIncomeVerification"
example: "PersonalBankStmt1Mo"
time_since:
description: "Time since credit events"
conditional: "Only sent for Contact request types"
fields:
bankruptcy:
type: "integer"
required: false
description: "Months since bankruptcy: 0, 12, 24, 36, 48, 60, 72 (Greater than 5 Years = 72)"
enum: [0, 12, 24, 36, 48, 60, 72]
example: 0
foreclosure:
type: "integer"
required: false
description: "Months since foreclosure: 0, 12, 24, 36, 48, 60, 72 (Greater than 5 Years = 72)"
enum: [0, 12, 24, 36, 48, 60, 72]
example: 0
housing_event:
description: "Housing event information"
conditional: "Only sent for Contact request types"
fields:
type:
type: "string"
required: false
description: "Housing event type"
enum:
- "None"
- "Modification"
- "DeedInLieu"
- "Foreclosure"
- "ShortSale"
- "Forbearance"
example: "None"
seasoning:
type: "string"
required: false
description: "Housing event seasoning period"
enum:
- "NotApplicable"
- "Last1To12Months"
- "Last13To24Months"
- "Last25to36Months"
- "Last37To48Months"
- "Last49to60Months"
- "MoreThanFiveYearsAgo"
example: "NotApplicable"
citizenship:
type: "string"
required: false
conditional: "Only sent for Contact request types"
description: "Borrower citizenship status"
enum:
- "USCitizen"
- "PermResidentAlien"
- "USCitizenAbroad"
- "ForeignNational"
- "NonPermResidentAlien"
example: "NonPermResidentAlien"
debt_service_coverage_ratio:
type: "number"
required: false
conditional: "Only sent if Contact request type and income_verification_type is InvestorDscr"
description: "DSCR value entered into the Create Quote interface"
example: 30
mortgage_lates:
description: "Mortgage late payment history"
conditional: "Only sent for Contact request types"
fields:
greater_than_30days_12months:
type: "integer"
required: false
description: "Count of lates greater than 30 days in last 12 months"
example: 0
greater_than_60days_12months:
type: "integer"
required: false
description: "Count of lates greater than 60 days in last 12 months"
example: 0
greater_than_90days_12months:
type: "integer"
required: false
description: "Count of lates greater than 90 days in last 12 months"
example: 0
greater_than_120days_12months:
type: "integer"
required: false
description: "Count of lates greater than 120 days in last 12 months"
example: 0
greater_than_30days_24months:
type: "integer"
required: false
description: "Count of lates greater than 30 days in last 24 months"
example: 0
greater_than_60days_24months:
type: "integer"
required: false
description: "Count of lates greater than 60 days in last 24 months"
example: 0
greater_than_90days_24months:
type: "integer"
required: false
description: "Count of lates greater than 90 days in last 24 months"
example: 0
greater_than_120days_24months:
type: "integer"
required: false
description: "Count of lates greater than 120 days in last 24 months"
example: 0
# Response Structure
response_schema:
success_response:
description: "Successful response with pricing results"
http_status: [200, 201]
structure:
results:
type: "array"
required: true
description: "Array of pricing results correlated by request_id"
items:
request_id:
type: "string"
required: true
description: "Echo of correlating request identifier"
format: "uuid"
example: "da611ac2-bd7b-4101-8777-7fadd9c227c8"
product_name:
type: "string"
required: false
description: "Product name of offer"
example: "30 Year Fixed"
rate:
type: "string"
required: true
description: "Rate of offer"
example: "5.250"
price:
type: "string"
required: true
description: "Price of offer"
example: "100.234"
net_price:
type: "string"
required: false
description: "Net price of offer"
example: "100.345"
apr:
type: "string"
required: true
description: "APR of offer"
example: "5.375"
monthly_principal_and_interest:
type: "string"
required: true
description: "Monthly principal and interest of offer"
example: "3000.00"
monthly_mi:
type: "string"
required: false
description: "Monthly mortgage insurance premium of offer"
example: "67.04"
total_monthly_payment:
type: "string"
required: true
description: "Total monthly payment of offer"
example: "3067.04"
total_loan_amount:
type: "string"
required: true
description: "Total loan amount of offer (including financed government fees, etc)"
example: "636000.00"
closing_cost:
type: "string"
required: false
description: "Total closing costs of offer, including upfront government fees"
example: "2000.00"
amortization_term:
type: "string"
required: false
description: "Amortization term of offer"
example: "345"
amortization_type:
type: "string"
required: false
description: "Amortization type of offer"
example: "ARM"
arm_index:
type: "string"
required: false
description: "ARM index of offer"
example: "LIBOR"
arm_margin:
type: "string"
required: false
description: "ARM margin of offer"
example: "2.6"
discount:
type: "string"
required: false
description: "Discount dollar value of offer (points)"
example: "150.02"
rebate:
type: "string"
required: false
description: "Rebate dollar value of offer"
example: "225.02"
price_status:
type: "string"
required: false
description: "Current investor status of offer"
example: "Available"
last_update:
type: "string"
required: false
description: "Date and time of last updated offers of investor"
format: "datetime"
example: "2025-12-19 16:24:27"
investor:
type: "string"
required: false
description: "Investor of offer"
example: "US Bank"
ineligible_response:
description: "Success response but no eligible products found"
http_status: 300
structure:
results:
type: "array"
required: true
description: "Array indicating no products found for request"
items:
request_id:
type: "string"
required: true
description: "Echo of correlating request identifier"
example: ""
message:
type: "string"
required: true
description: "Message indicating no product found"
example: "No product found"
authentication_failure_response:
description: "Authentication failure response"
http_status: 400
structure:
error:
type: "string"
required: true
description: "Error type"
example: "Unauthorized"
error_description:
type: "string"
required: true
description: "Error description"
example: "The access token provided is invalid"
system_error_response:
description: "System error response"
http_status: 500
structure:
error:
type: "string"
description: "System error message"
# Required Response Fields Summary
response_required_fields:
- "request_id"
- "rate"
- "price"
- "apr"
- "monthly_principal_and_interest"
- "total_monthly_payment"
- "total_loan_amount"
# Notes
notes:
- "Custom Loan Products have no impact on PPE request (TE UX Only)"
- "Default Borrower Information has no impact on PPE request (TE UX Only)"
- "Default Loan Products drive default options for TE user and available values for PPE requests"
- "Custom fields configured in Default Loan Products are nested under individual loan request"
- "Top-level custom fields are passed to PPE in top-level 'custom' node"
- "Lead source is passed to PPE in top-level 'lead_source' field"
- "Marketing Material requests have fewer available fields than Contact requests"
- "Refinance loan purpose is only available for Contact request types"
- "PPE endpoint recipient should translate TE data inputs to their correlating fields or apply defaults"
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------