LoanCraft PPE API Developer Guide
Reference for the LoanCraft Price, Program & Eligibility (PPE) API.
Getting Started
The LoanCraft PPE API exposes published programs from the Pricing, Program & Eligibility engine. Program rules are curated by LoanCraft and administered via the PPE Manager. Use this API to build or retrieve a PriceRequest, submit it, and receive eligible offers along with exclusions.
- Access all published programs via the API.
- Rules are maintained by LoanCraft (via PPE Manager).
- Supports default request templates and on-the-fly requests.
The easiest way to start using the PPE API is to base your request on a pre-configured PriceRequest template, which you can retrieve using the PriceRequestDefault endpoint.
These templates are configured in the PPE Admin interface. You can create and manage multiple templates there. Each template is identified by a unique RequestId.
Quick Overview of Steps when Using a Default Price Request
- Retrieve the Default Request
- Use the
PriceRequestDefaultendpoint with a specificDefaultRequestIdto retrieve aPriceRequestobject. - This object contains pre-filled fields and offer selection settings defined in the template.
GET /ppeapi/api/PriceRequestDefault/{DefaultRequestId} Host: api.loancraft.net Authorization: Bearer {your_token} - Use the
- Customize the Request
- Modify any fields you want to change (e.g.,
LoanAmount,PropertyValue,Term).
- Modify any fields you want to change (e.g.,
- Use the OptionSet Endpoint
- Use
/ppeapi/api/OptionSetto retrieve valid values for configurable fields likeOccupancy,LoanPurpose, andPropertyType.
- Use
- Submit the Request
- Send the customized
PriceRequestto theOfferListendpoint. - The response will include an
OfferListobject containing eligible offers and any exclusions.
POST /ppeapi/api/OfferList Host: api.loancraft.net Authorization: Bearer {your_token} Content-Type: application/json { "PriceRequest": { "LoanAmount": 350000, "PropertyValue": 500000, "LoanPurpose": "PURCHASE", "Occupancy": "PRIMARY" ... } } - Send the customized
Example: Simplest flow using a pre-configured PriceRequest template
Before making a pricing request to the PPE API, gather all relevant information that will be used by pricing rules. This ensures your request accurately reflects the borrower's scenario and property characteristics.
The primary object for specifying pricing information is the PriceRequest and its property PriceRequestData. The Swagger interface provides a full specification and documentation for both objects.
PriceRequest schema in Swagger to understand all available fields, required parameters, and data types.
Steps to Prepare a Pricing Request
- Identify Required Fields
- Gather all borrower, property, and loan details that impact pricing (e.g., loan amount, purpose, occupancy, credit, and property type).
- Review the PriceRequest Structure
- Check
PriceRequestDatawithin thePriceRequestobject to ensure all pricing fields are properly populated.
- Check
- Use the OptionSet Transaction
- Several elements in
PriceRequestDatahave defined valid values (for example:LoanPurpose,Occupancy,PropertyType). - Use the
OptionSetendpoint to retrieve current valid values for each field.
- Several elements in
Example OptionSet Request
GET /ppeapi/api/OptionSet/LoanPurpose
Host: api.loancraft.net
Authorization: Bearer {your_token}
Example OptionSet Response
{
"values": [
"PURCHASE",
"REFINANCE",
"CASHOUT",
"HOME_EQUITY"
]
}
OptionSet ensures that your pricing requests are always aligned with the latest configurable values in the PPE system.
Overview: Gathering inputs and using OptionSet to prepare a PriceRequest
Follow these core steps to submit a pricing request and receive results from the PPE API:
- Obtain an Authentication Token
- Use the authentication endpoint to request a bearer token.
- See Section Two: Authentication for full details on this step.
- Use the Bearer Token in API Requests
- Include the token in the Authorization header of each API request:
Authorization: Bearer {your_token} - Build the PriceRequest Object
You have two options for building a PriceRequest:
- Use a pre-configured template (see Simplest Approach): Retrieve a ready-to-use request via the
PriceRequestDefaultendpoint. - Build from scratch: Create your own
PriceRequestobject manually.
π‘ Use the
OptionSetendpoint to retrieve valid values for configurable fields (e.g., loan purpose, occupancy, property type). - Use a pre-configured template (see Simplest Approach): Retrieve a ready-to-use request via the
- Submit the Request and Get Offers
- Send the
PriceRequestobject to theOfferListendpoint. - The response will include:
offerList: all qualifying offersexclusionList: offers that failed eligibility rules
- Send the
Two Ways to Build a PriceRequest
- Use a Default Request — Retrieve a preconfigured
PriceRequestvia PriceRequestDefault by supplying aDefaultRequestId, then customize fields (e.g.,LoanAmount,PropertyValue,Term). - Build from Scratch — Construct a
PriceRequestmanually. Use OptionSet to fetch valid enumerations (loan purpose, occupancy, property type, etc.).
End-to-End Flow
- Obtain a bearer token.
- Include
Authorization: Bearer <token>on each request. - Create/modify
PriceRequest. - Submit to OfferList; parse
offerList(eligible) andexclusionList(ineligible).
Authorization Header
Authorization: Bearer {your_token}Additional Features
Developers can control whether the PPE returns a single best offer or a complete list of qualifying offers. This is configured in the PriceRequest object.
Modes:
- Single Offer Mode
- Set
SingleOffer = true. - Returns only one qualifying offer that best matches the request parameters.
- Ideal for workflows that display a single rate or product to the user.
- Set
- Multiple Offer Mode
- Set
SingleOffer = false. - Returns an
offerListcontaining all qualifying offers. - Enables comparison between programs, terms, and product types.
- Driven by βOffer Poolβ configuration in PPE Admin.
- Set
Offer Pool Configuration in PPE Admin
When a PriceRequest is submitted to the /OfferList endpoint, the response contains two key collections:
- offerList β qualifying offers that passed eligibility rules
- Program name and ID
- Interest rate, price, and APR
- Payment, term, and lock period
- Associated fees
- exclusionList β offers that failed one or more eligibility rules
- Includes failed rule name and reason for exclusion.
- Helps diagnose why a loan program didnβt qualify.
Example Response
{
"offerList": [
{
"ProgramName": "Standard Fixed 30-Year",
"Rate": 6.25,
"Price": 99.50,
"APR": 6.32,
"LockDays": 45
}
],
"exclusionList": [
{
"ProgramName": "High LTV Program",
"ExclusionReason": "LTV exceeds program maximum of 90%"
}
]
}Single vs Multiple Offers
- Set
SingleOffer = trueto retrieve a single matching offer. - Use Offer Pool settings (configurable in PPE Admin) to produce multiple offers.
Offer List Response
offerList contains eligible OfferItem entries (rate, lender, payment, term, etc.). exclusionList lists attempts that failed eligibility rules.
Variations
Flags/Booleans:
tryAlternativeLoanAmountstryMaxLTVtryOtherTermstryOtherProductTypes
Explicit Sets:
LendersToQueryLoanAmountsToTryTermsToTry
MAXLTV determines the highest qualifying LTV and loan amount by evaluating applicable exclusion rulesets (considering single-rule exclusions).
After MaxLTV and MaxLoanAmount are determined, a loan offer is attempted using:
LoanAmount = LOWER OF ( MaxLoanAmount OR ( HomeValue * ( MaxLTV - OtherLiens ) ) )
Request fields involved in buydowns:
BuydownAddOrSubtract— whether discount fees are added to or subtracted from the loan amount.FeeTolerance— percentage tolerance for fees (e.g., up to ~4%).GoAboveFeeToleranceIfNecessary— try above tolerance if needed to find a rate.RevenueTarget— desired revenue amount for the lender.
The PPE looks for a rate that hits the revenue target within the fee tolerance, applying discount fees as necessary.
Credentials & Implementation
- Integrate and validate against the Sandbox environment.
- Use Swagger to explore endpoints and payloads.
- When ready, request Production credentials & endpoints.
Initial Information Required
- API Key
- UserId
- Password
- Authentication Endpoint
Obtain an Access Token
GET /authapi/api/Token HTTP/1.1 Host: api.loancraft.net APIKey: <<< API KEY >>> APIEnvironment: Sandbox UserId: <<< USER ID >>> Password: <<< PASSWORD >>>
Response contains token and expiration. Use the token as a Bearer credential on subsequent calls.
Validate Access
curl -X 'GET' \ 'https://api.loancraft.net/Sandbox/PPEAPI/api/QuickTestAuth' \ -H 'accept: text/plain' \ -H 'Authorization: Bearer <your_jwt_token>'
A successful response confirms authenticated connectivity.
Explore and test endpoints with Swagger UI.
Open Swagger Console/authapi/api/Tokenβ obtain bearer token/PPEAPI/api/OfferListβ pricing results/PPEAPI/api/PriceRequestDefaultβ get a default request byDefaultRequestId/PPEAPI/api/OptionSetβ lookup valid enumerations/PPEAPI/api/QuickTestAuthβ verify access
- Endpoints and credentials may change; keep them in configuration.
- Offer variations can increase computation time and permutations.
- Use default templates and Offer Pools from PPE Admin to streamline setup.