API – Searching Loans

To search loans a POST request is sent to the Loans/Autopal.Search() endpoint, often with request flags to determine what to show in the results. This endpoint takes a JSON object as the body to describe how and what to search. Below is an example:

POST https://loanpro.simnang.com/api/public/api/1/Loans/Autopal.Search()?$top=25&$start=0&$orderby=id%20asc&$expand=Collateral,Customers
{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "query_string": {
                  "query": "*161616.66*",
                  "fields": [
                    "title",
                    "displayId",
                    "collateral.vin",
                    "collateral.color",
                    "collateral.gpsCode",
                    "collateral.licensePlate",
                    "collateralInfo",
                    "primaryCustomerName",
                    "secondaryCustomerName",
                    "primaryCustomerAddress.city",
                    "primaryCustomerAddress.zipcode",
                    "primaryCustomerAddress.state",
                    "secondaryCustomerAddress.city",
                    "secondaryCustomerAddress.zipcode",
                    "secondaryCustomerAddress.state",
                    "primaryPhone",
                    "secondaryPhone",
                    "loanInsurance.companyName",
                    "loanInsurance.insured",
                    "loanInsurance.policyNumber",
                    "loanInsurance.agentName",
                    "customFields"
                  ]
                }
              },
              {
                "nested": {
                  "path": "customers",
                  "query": {
                    "bool": {
                      "should": [
                        {
                          "query_string": {
                            "query": "*161616.66*",
                            "fields": [
                              "firstName",
                              "middleName",
                              "lastName",
                              "email",
                              "ssn",
                              "customId",
                              "accessUserName",
                              "companyName"
                            ]
                          }
                        }
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  },
  "aggs": {
    "sum_loanamount": {
      "sum": {
        "field": "loanAmount"
      }
    },
    "avg_loanamount": {
      "avg": {
        "field": "loanAmount"
      }
    },
    "sum_payoff": {
      "sum": {
        "field": "payoff"
      }
    },
    "avg_payoff": {
      "avg": {
        "field": "payoff"
      }
    },
    "avg_loanage": {
      "avg": {
        "field": "loanAge"
      }
    },
    "avg_dayspastdue": {
      "avg": {
        "field": "daysPastDue"
      }
    },
    "sum_amountdue": {
      "sum": {
        "field": "amountDue"
      }
    },
    "avg_amountdue": {
      "avg": {
        "field": "amountDue"
      }
    },
    "sum_principalbalance": {
      "sum": {
        "field": "principalBalance"
      }
    },
    "avg_principalbalance": {
      "avg": {
        "field": "principalBalance"
      }
    },
    "avg_loanrecency": {
      "avg": {
        "field": "loanRecency"
      }
    },
    "sum_lastpaymentamount": {
      "sum": {
        "field": "lastPaymentAmount"
      }
    },
    "avg_lastpaymentamount": {
      "avg": {
        "field": "lastPaymentAmount"
      }
    },
    "sum_nextpaymentamount": {
      "sum": {
        "field": "nextPaymentAmount"
      }
    },
    "avg_nextpaymentamount": {
      "avg": {
        "field": "nextPaymentAmount"
      }
    }
  }
}

The body consists of two main parts:

  • query – This is a Query Object that describes how to filter the search
  • aggs – This determines what will be shown in the summary section of the response; it is strongly recommended not to change this from the provided example

Below is a sample response:

{
    "d": {
        "results": [
            {
                "id": "199",
                "displayId": "10016541-01",
                "title": "10016541-01",
                "archived": "0",
                "loanAlert": null,
                "humanActivityDate": "2016-09-28",
                "modTotal": 0,
                "eBilling": 0,
                "loanStatusId": "5",
                "loanSubStatusId": "29",
                "agent": "0",
                "sourceCompany": null,
                "closedDate": null,
                "repoDate": null,
                "liquidationDate": null,
                "collateralInfo": "",
                "calcType": "loan.calcType.simpleInterest",
                "loanType": "loan.type.installment",
                "loanClass": "loan.class.other",
                "isSetupValid": true,
                "loanAmount": "4000.00",
                "contractDate": "2016-03-02",
                "active": "1",
                "primaryCustomerName": "",
                "secondaryCustomerName": "",
                "primaryCustomerLastName": "",
                "secondaryCustomerLastName": "",
                "primaryCustomerEmail": "",
                "secondaryCustomerEmail": "",
                "primaryPhone": "",
                "primaryPhoneDnd": "",
                "secondaryPhone": "",
                "primaryCustomerAddress": null,
                "secondaryCustomerAddress": null,
                "payoff": "4267.10",
                "nextPaymentDate": "2016-10-07",
                "nextPaymentAmount": "185.65",
                "daysPastDue": "21",
                "amountDue": "185.65",
                "amountPastDue30": "0.00",
                "principalBalance": "3947.89",
                "loanAge": "210",
                "loanRecency": "82",
                "stoplight": "",
                "lastPaymentDate": "2016-07-08",
                "lastPaymentAmount": "185.65",
                "duePni": "409.92",
                "pendingAutopays": 0,
                "flooringCustomers": null,
                "checklistItemValues": {
                    "checklistItem__1": 0,
                    "checklistItem__2": 0,
                    "checklistItem__57": 0,
                    "checklistItem__3": 0,
                    "checklistItem__4": 0,
                    "checklistItem__5": 0,
                    "checklistItem__58": 0,
                    "checklistItem__6": 0,
                    "checklistItem__7": 0,
                    "checklistItem__8": 0,
                    "checklistItem__9": 0,
                    "checklistItem__10": 0,
                    "checklistItem__11": 0,
                    "checklistItem__12": 0,
                    "checklistItem__13": 0,
                    "checklistItem__14": 0,
                    "checklistItem__15": 0,
                    "checklistItem__16": 0,
                    "checklistItem__17": 0,
                    "checklistItem__18": 0,
                    "checklistItem__19": 0,
                    "checklistItem__20": 0,
                    "checklistItem__59": 0,
                    "checklistItem__21": 0,
                    "checklistItem__22": 0,
                    "checklistItem__23": 0,
                    "checklistItem__24": 0,
                    "checklistItem__25": 0,
                    "checklistItem__26": 0,
                    "checklistItem__27": 0,
                    "checklistItem__28": 0,
                    "checklistItem__29": 0,
                    "checklistItem__60": 0,
                    "checklistItem__30": 0,
                    "checklistItem__31": 0,
                    "checklistItem__32": 0,
                    "checklistItem__61": 0,
                    "checklistItem__33": 0,
                    "checklistItem__34": 0,
                    "checklistItem__35": 0,
                    "checklistItem__36": 0,
                    "checklistItem__37": 0,
                    "checklistItem__38": 0,
                    "checklistItem__62": 0,
                    "checklistItem__39": 0,
                    "checklistItem__40": 0,
                    "checklistItem__41": 0,
                    "checklistItem__42": 0,
                    "checklistItem__63": 0,
                    "checklistItem__43": 0,
                    "checklistItem__44": 0,
                    "checklistItem__45": 0,
                    "checklistItem__46": 0,
                    "checklistItem__64": 0,
                    "checklistItem__47": 0,
                    "checklistItem__48": 0,
                    "checklistItem__49": 0,
                    "checklistItem__50": 0,
                    "checklistItem__65": 0,
                    "checklistItem__51": 0,
                    "checklistItem__52": 0,
                    "checklistItem__53": 0,
                    "checklistItem__54": 0,
                    "checklistItem__55": 0,
                    "checklistItem__56": 0,
                    "checklistItem__66": 0
                },
                "flags": {
                    "flag__1": "0",
                    "flag__2": "0",
                    "flag__3": "1"
                },
                "flagsString": "More than 15 dpd(Id: 3)",
                "customFields": [
                    "161616.66"
                ],
                "subPortfolios": null,
                "loanStatusText": "Collection Account",
                "loanSubStatusText": "Write-Off",
                "dynamicProperties": {
                    "cf_prop_Dealer_Fees": {
                        "value": "0",
                        "type": "customfield.type.currency",
                        "label": "Dealer Fees"
                    },
                    "cf_prop_Sales_Tax": {
                        "value": "0.00",
                        "type": "customfield.type.currency",
                        "label": "Sales Tax"
                    },
                    "cf_prop_Sticker_Price": {
                        "value": "0",
                        "type": "customfield.type.currency",
                        "label": "Sticker Price"
                    },
                    "cf_prop_Down_Payment": {
                        "value": "0",
                        "type": "customfield.type.currency",
                        "label": "Down Payment"
                    },
                    "cf_prop_Testing_2_Field": {
                        "value": "0",
                        "type": "customfield.type.currency",
                        "label": "Testing 2 Field"
                    },
                    "cf_prop_Downpayment": {
                        "value": null,
                        "type": "customfield.type.currency",
                        "label": "Downpayment"
                    },
                    "cf_prop_Doc_Fee": {
                        "value": null,
                        "type": "customfield.type.currency",
                        "label": "Doc Fee"
                    },
                    "cf_prop_Sold_By": {
                        "value": "161616.66",
                        "type": "customfield.type.text",
                        "label": "Sold By"
                    },
                    "cf_prop_Auction_Purchase_Date": {
                        "value": null,
                        "type": "customfield.type.date",
                        "label": "Auction Purchase Date"
                    },
                    "cf_prop_Nickname": {
                        "value": null,
                        "type": "customfield.type.text",
                        "label": "Nickname"
                    },
                    "cf_prop_Spouse_Name": {
                        "value": null,
                        "type": "customfield.type.text",
                        "label": "Spouse Name"
                    },
                    "cf_prop_Other_Name": {
                        "value": null,
                        "type": "customfield.type.text",
                        "label": "Other Name"
                    }
                },
                "humanActivity": 0,
                "primaryCustomerSmsVerified": 0,
                "secondaryCustomerSmsVerified": 0
            }
        ],
        "summary": {
            "totalHits": 1,
            "totalTime": 5,
            "aggregations": {
                "avg_payoff": {
                    "value": 4267.1
                },
                "avg_principalbalance": {
                    "value": 3947.89
                },
                "avg_dayspastdue": {
                    "value": 21
                },
                "avg_loanage": {
                    "value": 210
                },
                "avg_lastpaymentamount": {
                    "value": 185.65
                },
                "avg_nextpaymentamount": {
                    "value": 185.65
                },
                "avg_loanamount": {
                    "value": 4000
                },
                "sum_amountdue": {
                    "value": 185.65
                },
                "avg_loanrecency": {
                    "value": 82
                },
                "avg_amountdue": {
                    "value": 185.65
                },
                "sum_payoff": {
                    "value": 4267.1
                },
                "sum_principalbalance": {
                    "value": 3947.89
                },
                "sum_loanamount": {
                    "value": 4000
                },
                "sum_nextpaymentamount": {
                    "value": 185.65
                },
                "sum_lastpaymentamount": {
                    "value": 185.65
                }
            }
        }
    }
}

The results section shows the returned loan(s), the summary section holds a summary of basic information concerning the results.

Pagination

Often, pagination is desired due to the large amount of results that are returned. Pagination allows integrations to work on small chunks of data at a time instead of loading all of it into memory.

With pagination, there are two main URL query parameters: $start and $top.

$start

$start defines the offset to start returning results with. $start assumes that result indexing starts with 0. This means that $start=0 will return results starting with the 1st result, and $start=25 will return results starting with the 26th element. This is similar to the way arrays work in languages like C/C++, C#, Java, Javascript, etc.

$top

$top defines the number of results to return. $top gives the upper bound on the number of results that will be returned. For example, $top=20 will return up to 20 results, and $top=100 will return the first 100 results.

Combining

For example, assume you want page sizes of 30 results each. With this, you would get the following:

Page 1
$start=0,$top=30
Page 2
$start=30,$top=30
Page 3
$start=60,$top=30
Page 4
$start=90,$top=30

Ordering

Often times, integrations want to process data in orders other than the default ordering provided by LoanPro. This can be done by setting the URL query $orderby variable. The value of the $orderby variable is formatted as “<variable> <direction>”. In the format, “<variable>” is the result field to sort the results by. For examle, to sort loans by stoplights, you would set “<variable>” to be “stoplight”. For “<direction>”, it will be either “asc” for ascending ordering or “desc” for descending ordering.

For example, to order by the stoplight field in ascending order, you would use $orderby=stoplight asc. To order by the stoplight field in descending order, you would use $orderby-stoplight desc.

Related Articles

Leave A Comment?