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
  1. Retrieve the Default Request
    • Use the PriceRequestDefault endpoint with a specific DefaultRequestId to retrieve a PriceRequest object.
    • 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}
    
  2. Customize the Request
    • Modify any fields you want to change (e.g., LoanAmount, PropertyValue, Term).
  3. Use the OptionSet Endpoint
    • Use /ppeapi/api/OptionSet to retrieve valid values for configurable fields like Occupancy, LoanPurpose, and PropertyType.
  4. Submit the Request
    • Send the customized PriceRequest to the OfferList endpoint.
    • The response will include an OfferList object 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"
          ...
      }
    }
    
Default Price Request Flow Diagram

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.

πŸ’‘ Tip: Review the PriceRequest schema in Swagger to understand all available fields, required parameters, and data types.
Steps to Prepare a Pricing Request
  1. Identify Required Fields
    • Gather all borrower, property, and loan details that impact pricing (e.g., loan amount, purpose, occupancy, credit, and property type).
  2. Review the PriceRequest Structure
    • Check PriceRequestData within the PriceRequest object to ensure all pricing fields are properly populated.
  3. Use the OptionSet Transaction
    • Several elements in PriceRequestData have defined valid values (for example: LoanPurpose, Occupancy, PropertyType).
    • Use the OptionSet endpoint to retrieve current valid values for each field.
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"
  ]
}
βœ… Using OptionSet ensures that your pricing requests are always aligned with the latest configurable values in the PPE system.
Guide for Obtaining Pricing Diagram

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:

  1. Obtain an Authentication Token
    • Use the authentication endpoint to request a bearer token.
    • See Section Two: Authentication for full details on this step.
  2. Use the Bearer Token in API Requests
    • Include the token in the Authorization header of each API request:
    Authorization: Bearer {your_token}
  3. 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 PriceRequestDefault endpoint.
    • Build from scratch: Create your own PriceRequest object manually.

    πŸ’‘ Use the OptionSet endpoint to retrieve valid values for configurable fields (e.g., loan purpose, occupancy, property type).

  4. Submit the Request and Get Offers
    • Send the PriceRequest object to the OfferList endpoint.
    • The response will include:
      • offerList: all qualifying offers
      • exclusionList: offers that failed eligibility rules

Two Ways to Build a PriceRequest
  1. Use a Default Request — Retrieve a preconfigured PriceRequest via PriceRequestDefault by supplying a DefaultRequestId, then customize fields (e.g., LoanAmount, PropertyValue, Term).
  2. Build from Scratch — Construct a PriceRequest manually. Use OptionSet to fetch valid enumerations (loan purpose, occupancy, property type, etc.).
End-to-End Flow
  1. Obtain a bearer token.
  2. Include Authorization: Bearer <token> on each request.
  3. Create/modify PriceRequest.
  4. Submit to OfferList; parse offerList (eligible) and exclusionList (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.
  • Multiple Offer Mode
    • Set SingleOffer = false.
    • Returns an offerList containing all qualifying offers.
    • Enables comparison between programs, terms, and product types.
    • Driven by β€œOffer Pool” configuration in PPE Admin.
πŸ’‘ Tip: In most consumer workflows, Offer Pools are predefined in PPE Admin and automatically apply when multiple offers are enabled.
Single vs Multiple Offers Diagram

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 = true to 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:

  • tryAlternativeLoanAmounts
  • tryMaxLTV
  • tryOtherTerms
  • tryOtherProductTypes

Explicit Sets:

  • LendersToQuery
  • LoanAmountsToTry
  • TermsToTry
Enabling variations multiplies the scenario space and can increase response time.

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

  1. Integrate and validate against the Sandbox environment.
  2. Use Swagger to explore endpoints and payloads.
  3. When ready, request Production credentials & endpoints.
Important: Endpoints, keys, and user credentials may change. Store them in configuration (app settings or secure vault), never hard-code.

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 by DefaultRequestId
  • /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.
An unhandled error has occurred. Reload πŸ—™