Loan-Identifying Tokens and "Magic Link" Generation

General

Some customers host their own application to make the process of applying for a loan customized for their company and customers. When data is gathered, these companies often want to save it in LoanPro. The problem is that the application process is often not completed in one sitting. This could mean that the customer will return to the loan and need to log in, in order to complete the application. To eliminate the need for the customer to log in, LoanPro provides the option to send the customer a "magic link" that they can click to resume the application without having to log in.

So, how does the "magic link" work? The diagram below shows the basic process.

The rest of the article will cover each step in detail.

Preparation

Trigger & Event-Based Notification

In order to have LoanPro send the notification with the "magic link", you will need to configure a trigger or event-based notification that will include the "magic link". This means creating what the message itself will look like and what event or trigger will cause the notification to be sent. Most companies will choose the event of changing from one loan status to another in order to trigger the email, but any trigger or event can be chosen. Remember that when this email is sent, LoanPro will merge the token into the message. The token is not saved by LoanPro, so this will mean that a new token will be generated. Multiple tokens can exist for the same loan, and each will have it's own expiration cycle.

The context variable that will merge the token is: loan-token

When building the URL for the customer to use, we recommend something like www.companydomain.com/application?applicationid=[[v('loan-token')]]

This will make the token a GET value, which should be easy to retrieve on your side.

There is an event that will send a notification to the customer ONLY if an expired token is sent to the token decode endpoint. It's the Loan Token Update event. It is usually best to turn on this notification so the customer will receive a new email with a new token if their token has expired. This will be discussed more in the Token Received and Sent to Token Decode Endpoint section.

Rules Applied

Some customers will choose to have the loan status or other settings updated through the API, while others will do this through Rules Applied. If you choose to do this through rules applied, it's important to set up those rules before using the "magic link".

Customer Enters Application Information

The customer will enter application information on your website. It will be your responsibility to decide how to capture this information, and when to save it in LoanPro.

Loan Is Created

The "magic link" feature is specifically for companies that are creating loans through the API. This article gives more information about how that can be done. A loan must exist in LoanPro before a token can be created to identify the loan.

Loan Is Updated

The loan data and attributes (e.g. portfolio, loan status) may be updated via rules applied or through the API as the customer fills out an application. Rules applied will only run based on data that is contained in LoanPro. Make sure you are sending the correct data to LoanPro in order to make your rules run.

Notification Trigger or Event Occurs

In order for the notification with the "magic link" to be sent out, your trigger or event will need to happen. Make sure rules applied are configured to make changes that will cause the notification to be sent. Make sure to choose a trigger or event that will send when you want it to be sent.

LoanPro Creates the Token

LoanPro will create a token that identifies the loan when a loan token is requested from our context engine (our system of pulling variable values from the right loans, customers, etc.). The token is not saved in the database, and will therefore not be retrievable through an API endpoint. Tokens will expire after 48 hours. A new token will be generated when an expired token is sent to the decode endpoint. The Token Received and Sent to Token Decode Endpoint section will talk further about how that is done.

The notification with the "magic link" will be sent to your customer when the trigger or event occurs. It will be sent to the email address you have on file for the customer. In order for this to happen, you will need to ensure that your LoanPro account is configured to send email. You will also need to gather the customer's email address early in the application process.

When the customer clicks the link, they will be taken directly to the linked page. Make sure the page they are taken to is one that will have the necessary code to retrieve the token and send it to the token decoding endpoint.

Token Received and Sent to Token Decode Endpoint

It is necessary to retrieve the token from the URL that the customer clicks on. Most companies will send the customer to the original application page, or to a landing page designed specifically to tell the customer that they are being logged in. Once the token is parsed from the URL, it should be sent to the following endpoint:

POST https://loanpro.simnang.com/api/public/api/1/loan-application/token/verify

The payload will look something like this:

{  
"token":"asde1312asdasdcsxcv12"
}

The response you receive will look something like this:

{  
"loan":2,
"expiration":"2019-06-03T18:42:06+00:00",
"token-valid":true,
"token-expired":false
}

The information the response provides is as follows:

  • loan - This is the ID of the loan the token was created for. If the token is not valid, or is expired, the loan ID will not be returned.
  • expiration - This is the expiration date and time of the token in UTC time.
  • token-valid - This shows whether the token is valid or not. If the token was created for the loan, it will be valid. If the token is not valid, no information will be returned.
  • token-expired - This shows whether the token is expired or not.

If the token has expired, a new token will be automatically generated when the decode endpoint is hit. If the Loan Token Update event-based notification is turned on, the customer will get a new email with the new token. In this event, we recommend building the logic into your web application to tell the customer that their link has expired and a new link has been sent to them.

Loan ID Is Returned

The most important piece of information you receive from the decode endpoint response is the loan ID. Notice that you don't receive a customer ID. The customer information and all related loan information can be retrieved with the loan ID.

Retrieve Loan Information

To retrieve the loan information, send a request to the following endpoint:

GET https://loanpro.simnang.com/api/public/api/1/odata.svc/Loans(<loanId>)

Make sure you replace <loanId> with the ID from the response. In our example, the loan ID was 2, so the request would be sent to:

GET https://loanpro.simnang.com/api/public/api/1/odata.svc/Loans(2)

Keep in mind that the response from this endpoint will look like this:

{
"d": {
"__metadata": {
"uri": "http://loanpro.simnang.com/api/public/api/1/odata.svc/Loans(id=667)",
"type": "Entity.Loan"
},
"Insurance": {
"__deferred": {
"uri": "Loans(id=667)/Insurance"
}
},
"CustomFieldValues": {
"__deferred": {
"uri": "Loans(id=667)/CustomFieldValues"
}
},
"ChecklistItemValues": {
"__deferred": {
"uri": "Loans(id=667)/ChecklistItemValues"
}
},
"Documents": {
"__deferred": {
"uri": "Loans(id=667)/Documents"
}
},
"Collateral": {
"__deferred": {
"uri": "Loans(id=667)/Collateral"
}
},
"LoanSettings": {
"__deferred": {
"uri": "Loans(id=667)/LoanSettings"
}
},
"LoanSetup": {
"__deferred": {
"uri": "Loans(id=667)/LoanSetup"
}
},
"Notes": {
"__deferred": {
"uri": "Loans(id=667)/Notes"
}
},
"Promises": {
"__deferred": {
"uri": "Loans(id=667)/Promises"
}
},
"Bankruptcies": {
"__deferred": {
"uri": "Loans(id=667)/Bankruptcies"
}
},
"Charges": {
"__deferred": {
"uri": "Loans(id=667)/Charges"
}
},
"Payments": {
"__deferred": {
"uri": "Loans(id=667)/Payments"
}
},
"LoanFunding": {
"__deferred": {
"uri": "Loans(id=667)/LoanFunding"
}
},
"Advancements": {
"__deferred": {
"uri": "Loans(id=667)/Advancements"
}
},
"Credits": {
"__deferred": {
"uri": "Loans(id=667)/Credits"
}
},
"DueDateChanges": {
"__deferred": {
"uri": "Loans(id=667)/DueDateChanges"
}
},
"CurtailmentDates": {
"__deferred": {
"uri": "Loans(id=667)/CurtailmentDates"
}
},
"StatusArchive": {
"__deferred": {
"uri": "Loans(id=667)/StatusArchive"
}
},
"Transactions": {
"__deferred": {
"uri": "Loans(id=667)/Transactions"
}
},
"EscrowCalculatedTx": {
"__deferred": {
"uri": "Loans(id=667)/EscrowCalculatedTx"
}
},
"ScheduleRolls": {
"__deferred": {
"uri": "Loans(id=667)/ScheduleRolls"
}
},
"StopInterestDates": {
"__deferred": {
"uri": "Loans(id=667)/StopInterestDates"
}
},
"APDAdjustments": {
"__deferred": {
"uri": "Loans(id=667)/APDAdjustments"
}
},
"DPDAdjustments": {
"__deferred": {
"uri": "Loans(id=667)/DPDAdjustments"
}
},
"LoanModifications": {
"__deferred": {
"uri": "Loans(id=667)/LoanModifications"
}
},
"EscrowAdjustments": {
"__deferred": {
"uri": "Loans(id=667)/EscrowAdjustments"
}
},
"EscrowTransactions": {
"__deferred": {
"uri": "Loans(id=667)/EscrowTransactions"
}
},
"EscrowSubsetOptions": {
"__deferred": {
"uri": "Loans(id=667)/EscrowSubsetOptions"
}
},
"EscrowCalculators": {
"__deferred": {
"uri": "Loans(id=667)/EscrowCalculators"
}
},
"EstimatedDisbursements": {
"__deferred": {
"uri": "Loans(id=667)/EstimatedDisbursements"
}
},
"Loans": {
"__deferred": {
"uri": "Loans(id=667)/Loans"
}
},
"LinkedLoanValues": {
"__deferred": {
"uri": "Loans(id=667)/LinkedLoanValues"
}
},
"RecurrentCharges": {
"__deferred": {
"uri": "Loans(id=667)/RecurrentCharges"
}
},
"PayNearMeOrders": {
"__deferred": {
"uri": "Loans(id=667)/PayNearMeOrders"
}
},
"Customers": {
"__deferred": {
"uri": "Loans(id=667)/Customers"
}
},
"Portfolios": {
"__deferred": {
"uri": "Loans(id=667)/Portfolios"
}
},
"SubPortfolios": {
"__deferred": {
"uri": "Loans(id=667)/SubPortfolios"
}
},
"EscrowSubsets": {
"__deferred": {
"uri": "Loans(id=667)/EscrowSubsets"
}
},
"RuleAppliedLoanSettings": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedLoanSettings"
}
},
"RuleAppliedChargeOff": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedChargeOff"
}
},
"RuleAppliedAPDReset": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedAPDReset"
}
},
"RuleAppliedChecklists": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedChecklists"
}
},
"RuleAppliedChangeDueDates": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedChangeDueDates"
}
},
"RuleAppliedStopInterest": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedStopInterest"
}
},
"RuleAppliedAccountTools": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedAccountTools"
}
},
"RuleAppliedCustomerTools": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedCustomerTools"
}
},
"RuleAppliedAutopay": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedAutopay"
}
},
"RuleAppliedLoanSetup": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedLoanSetup"
}
},
"Autopays": {
"__deferred": {
"uri": "Loans(id=667)/Autopays"
}
},
"ActionResultNotes": {
"__deferred": {
"uri": "Loans(id=667)/ActionResultNotes"
}
},
"id": 667,
"displayId": "LN - PHP SDK597f600a7190b",
"title": "LN - PHP SDK597f600a7190b",
"settingsId": 626,
"setupId": 823,
"insurancePolicyId": "0",
"collateralId": 0,
"linkedLoan": null,
"modId": null,
"modTotal": 0,
"humanActivityDate": "/Date(1559692800)/",
"created": "/Date(1501519882)/",
"lastMaintRun": "/Date(1559737850)/",
"createdBy": 806,
"active": 1,
"archived": 0,
"loanAlert": null,
"temporaryAccount": 0,
"deleted": 0,
"deletedAt": null,
"_relatedMetadata": null,
"_dynamicProperties": null
}
}

By default, none of the entities associated with a loan will be expanded. You can expand any of them by including their name as one of the comma-separated values in the OData $expand clause in the request URL like this:

https://loanpro.simnang.com/api/public/api/1/odata.svc/Loans(2)?$expand=LoanSettings,Customers,LoanSetup

You can also use a / in the $expand values to expand entities that are nested in nested entities like this:

https://loanpro.simnang.com/api/public/api/1/odata.svc/Loans(667)?$expand=LoanSettings,Customers/PrimaryAddress,Customers/Phones,LoanSetup

The above example will yield a result like this:

{
"d": {
"__metadata": {
"uri": "http://loanpro.simnang.com/api/public/api/1/odata.svc/Loans(id=667)",
"type": "Entity.Loan"
},
"Insurance": {
"__deferred": {
"uri": "Loans(id=667)/Insurance"
}
},
"CustomFieldValues": {
"__deferred": {
"uri": "Loans(id=667)/CustomFieldValues"
}
},
"ChecklistItemValues": {
"__deferred": {
"uri": "Loans(id=667)/ChecklistItemValues"
}
},
"Documents": {
"__deferred": {
"uri": "Loans(id=667)/Documents"
}
},
"Collateral": {
"__deferred": {
"uri": "Loans(id=667)/Collateral"
}
},
"LoanSettings": {
"__metadata": {
"uri": "http://loanpro.simnang.com/api/public/api/1/odata.svc/LoanSettings(id=626)",
"type": "Entity.LoanSettings"
},
"Loan": {
"__deferred": {
"uri": "LoanSettings(id=626)/Loan"
}
},
"LoanStatus": {
"__deferred": {
"uri": "LoanSettings(id=626)/LoanStatus"
}
},
"LoanSubStatus": {
"__deferred": {
"uri": "LoanSettings(id=626)/LoanSubStatus"
}
},
"CustomFieldValues": {
"__deferred": {
"uri": "LoanSettings(id=626)/CustomFieldValues"
}
},
"SrcCompany": {
"__deferred": {
"uri": "LoanSettings(id=626)/SrcCompany"
}
},
"MerchantProcessorGroup": {
"__deferred": {
"uri": "LoanSettings(id=626)/MerchantProcessorGroup"
}
},
"id": 626,
"loanId": 667,
"cardFeeAmount": "0",
"cardFeeType": "loan.cardfee.types.1",
"cardFeePercent": "0",
"agent": 0,
"loanStatusId": 3,
"loanSubStatusId": 16,
"sourceCompany": null,
"eBilling": 0,
"ECOACode": "loan.ecoacodes.1",
"coBuyerECOACode": "loan.ecoacodes.0",
"creditStatus": "loan.creditstatus.0",
"creditBureau": "loan.creditbureau.00",
"reportingType": "loan.reportingtype.I",
"secured": 1,
"autopayEnabled": 0,
"repoDate": "/Date(-62169984000)/",
"closedDate": "/Date(-62169984000)/",
"liquidationDate": "/Date(-62169984000)/",
"followUpDate": "/Date(-62169984000)/",
"isStoplightManuallySet": 0,
"merchantProcessorGroupId": 0
},
"LoanSetup": {
"__metadata": {
"uri": "http://loanpro.simnang.com/api/public/api/1/odata.svc/LoanSetup(id=823)",
"type": "Entity.LoanSetup"
},
"CustomFieldValues": {
"__deferred": {
"uri": "LoanSetup(id=823)/CustomFieldValues"
}
},
"id": 823,
"loanId": 667,
"modId": 0,
"active": 1,
"apr": "11.9964",
"aprForceSingle": 0,
"payment": "398.69",
"origFinalPaymentDate": "/Date(1523145600)/",
"origFinalPaymentAmount": "228.45",
"tilFinanceCharge": "2182.60",
"tilTotalOfPayments": "14182.60",
"tilLoanAmount": "12000.00",
"tilSalesPrice": "14182.60",
"tilPaymentSchedule": "[{\"count\":35,\"payment\":\"398.69\",\"startDate\":\"05\\/08\\/2015\"},{\"count\":1,\"payment\":\"228.45\",\"startDate\":\"04\\/08\\/2018\"}]",
"regzCustomEnabled": 0,
"regzApr": "0.0000",
"regzFinanceCharge": "0.00",
"regzAmountFinanced": "0.00",
"regzTotalOfPayments": "0.00",
"loanAmount": "12000.00",
"discount": "500.00",
"underwriting": "0.00",
"loanRate": "12.0212",
"loanRateType": "loan.rateType.annually",
"loanTerm": "36.0000",
"moneyFactor": "0",
"residual": "0.00",
"contractDate": "/Date(1430956800)/",
"firstPaymentDate": "/Date(1431043200)/",
"scheduleRound": "0.00",
"amountDown": "0.00",
"reserve": "5.00",
"salesPrice": "12000.00",
"gap": "1120.00",
"warranty": "2500.00",
"dealerProfit": "1000.00",
"taxes": "125.25",
"creditLimit": "15500.00",
"reportingCreditLimit": "0.00",
"loanClass": "loan.class.carLoan",
"loanType": "loan.type.installment",
"discountSplit": 1,
"paymentFrequency": "loan.frequency.monthly",
"calcType": "loan.calcType.simpleInterest",
"daysInYear": "loan.daysInYear.frequency",
"interestApplication": "loan.interestApplication.betweenTransactions",
"begEnd": "loan.begend.end",
"firstPeriodDays": "loan.firstPeriodDays.frequency",
"firstDayInterest": 0,
"discountCalc": "loan.discountCalc.straightLine",
"diyAlt": 0,
"dueDateOnLastDOM": 0,
"dueDatesOnBusinessDays": "loan.businessduedates.disabled",
"daysInPeriod": "loan.daysinperiod.24",
"roundDecimals": 5,
"lastAsFinal": 0,
"nddCalc": "loan.nddCalc.standard",
"endInterest": "loan.endInterest.no",
"scheduleTemplate": 0,
"curtailmentTemplate": 0,
"feesPaidBy": "loan.feesPaidBy.date",
"useInterestTiers": 0,
"calcHistoryEnabled": 0,
"calcDatesEnabled": 0,
"graceDays": 5,
"lateFeeType": "loan.lateFee.3",
"lateFeeAmount": "30.00",
"lateFeePercent": "10.00",
"lateFeeCalc": "loan.lateFeeCalc.standard",
"lateFeePercentBase": "loan.latefeepercentbase.regular",
"rollLastPayment": 0,
"paymentDateApp": "loan.pmtdateapp.actual",
"suspendForecastTo": null,
"isSetupValid": true,
"usuryAlert": null
},
"Notes": {
"__deferred": {
"uri": "Loans(id=667)/Notes"
}
},
"Promises": {
"__deferred": {
"uri": "Loans(id=667)/Promises"
}
},
"Bankruptcies": {
"__deferred": {
"uri": "Loans(id=667)/Bankruptcies"
}
},
"Charges": {
"__deferred": {
"uri": "Loans(id=667)/Charges"
}
},
"Payments": {
"__deferred": {
"uri": "Loans(id=667)/Payments"
}
},
"LoanFunding": {
"__deferred": {
"uri": "Loans(id=667)/LoanFunding"
}
},
"Advancements": {
"__deferred": {
"uri": "Loans(id=667)/Advancements"
}
},
"Credits": {
"__deferred": {
"uri": "Loans(id=667)/Credits"
}
},
"DueDateChanges": {
"__deferred": {
"uri": "Loans(id=667)/DueDateChanges"
}
},
"CurtailmentDates": {
"__deferred": {
"uri": "Loans(id=667)/CurtailmentDates"
}
},
"StatusArchive": {
"__deferred": {
"uri": "Loans(id=667)/StatusArchive"
}
},
"Transactions": {
"__deferred": {
"uri": "Loans(id=667)/Transactions"
}
},
"EscrowCalculatedTx": {
"__deferred": {
"uri": "Loans(id=667)/EscrowCalculatedTx"
}
},
"ScheduleRolls": {
"__deferred": {
"uri": "Loans(id=667)/ScheduleRolls"
}
},
"StopInterestDates": {
"__deferred": {
"uri": "Loans(id=667)/StopInterestDates"
}
},
"APDAdjustments": {
"__deferred": {
"uri": "Loans(id=667)/APDAdjustments"
}
},
"DPDAdjustments": {
"__deferred": {
"uri": "Loans(id=667)/DPDAdjustments"
}
},
"LoanModifications": {
"__deferred": {
"uri": "Loans(id=667)/LoanModifications"
}
},
"EscrowAdjustments": {
"__deferred": {
"uri": "Loans(id=667)/EscrowAdjustments"
}
},
"EscrowTransactions": {
"__deferred": {
"uri": "Loans(id=667)/EscrowTransactions"
}
},
"EscrowSubsetOptions": {
"__deferred": {
"uri": "Loans(id=667)/EscrowSubsetOptions"
}
},
"EscrowCalculators": {
"__deferred": {
"uri": "Loans(id=667)/EscrowCalculators"
}
},
"EstimatedDisbursements": {
"__deferred": {
"uri": "Loans(id=667)/EstimatedDisbursements"
}
},
"Loans": {
"__deferred": {
"uri": "Loans(id=667)/Loans"
}
},
"LinkedLoanValues": {
"__deferred": {
"uri": "Loans(id=667)/LinkedLoanValues"
}
},
"RecurrentCharges": {
"__deferred": {
"uri": "Loans(id=667)/RecurrentCharges"
}
},
"PayNearMeOrders": {
"__deferred": {
"uri": "Loans(id=667)/PayNearMeOrders"
}
},
"Customers": {
"results": [
{
"__metadata": {
"uri": "http://loanpro.simnang.com/api/public/api/1/odata.svc/Customers(id=531)",
"type": "Entity.Customer"
},
"PrimaryAddress": {
"__deferred": {
"uri": "Customers(id=531)/PrimaryAddress"
}
},
"MailAddress": {
"__deferred": {
"uri": "Customers(id=531)/MailAddress"
}
},
"Employer": {
"__deferred": {
"uri": "Customers(id=531)/Employer"
}
},
"References": {
"__deferred": {
"uri": "Customers(id=531)/References"
}
},
"PaymentAccounts": {
"__deferred": {
"uri": "Customers(id=531)/PaymentAccounts"
}
},
"Phones": {
"__deferred": {
"uri": "Customers(id=531)/Phones"
}
},
"CustomFieldValues": {
"__deferred": {
"uri": "Customers(id=531)/CustomFieldValues"
}
},
"Documents": {
"__deferred": {
"uri": "Customers(id=531)/Documents"
}
},
"CreditScore": {
"__deferred": {
"uri": "Customers(id=531)/CreditScore"
}
},
"Loans": {
"__deferred": {
"uri": "Customers(id=531)/Loans"
}
},
"SocialProfiles": {
"__deferred": {
"uri": "Customers(id=531)/SocialProfiles"
}
},
"Notes": {
"__deferred": {
"uri": "Customers(id=531)/Notes"
}
},
"id": 531,
"customId": null,
"mcId": 340653,
"customerType": "customer.type.individual",
"status": "Active",
"firstName": "Johnd",
"lastName": "Dow",
"middleName": null,
"birthDate": "/Date(631152000)/",
"gender": "customer.gender.male",
"generationCode": "customer.generationCode.none",
"email": "KittyHawk@wrightbros.com",
"ssn": "999999999",
"driverLicense": "89875768687",
"companyName": null,
"contactName": null,
"customerIdType": "customer.idType.ssn",
"customerId": "my-customer-id",
"creditLimit": 0,
"accessUserName": "NyL0HyaL43yAhe9sgKdxWDVqg2",
"active": 1,
"ofacMatch": 0,
"ofacTested": 0,
"hasAvatar": 0,
"loanRole": "loan.customerRole.primary",
"created": "/Date(1546639785)/",
"lastUpdate": "/Date(1546982287)/",
"creditScoreId": 60
}
]
},
"Portfolios": {
"__deferred": {
"uri": "Loans(id=667)/Portfolios"
}
},
"SubPortfolios": {
"__deferred": {
"uri": "Loans(id=667)/SubPortfolios"
}
},
"EscrowSubsets": {
"__deferred": {
"uri": "Loans(id=667)/EscrowSubsets"
}
},
"RuleAppliedLoanSettings": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedLoanSettings"
}
},
"RuleAppliedChargeOff": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedChargeOff"
}
},
"RuleAppliedAPDReset": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedAPDReset"
}
},
"RuleAppliedChecklists": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedChecklists"
}
},
"RuleAppliedChangeDueDates": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedChangeDueDates"
}
},
"RuleAppliedStopInterest": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedStopInterest"
}
},
"RuleAppliedAccountTools": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedAccountTools"
}
},
"RuleAppliedCustomerTools": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedCustomerTools"
}
},
"RuleAppliedAutopay": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedAutopay"
}
},
"RuleAppliedLoanSetup": {
"__deferred": {
"uri": "Loans(id=667)/RuleAppliedLoanSetup"
}
},
"Autopays": {
"__deferred": {
"uri": "Loans(id=667)/Autopays"
}
},
"ActionResultNotes": {
"__deferred": {
"uri": "Loans(id=667)/ActionResultNotes"
}
},
"id": 667,
"displayId": "LN - PHP SDK597f600a7190b",
"title": "LN - PHP SDK597f600a7190b",
"settingsId": 626,
"setupId": 823,
"insurancePolicyId": null,
"collateralId": 0,
"linkedLoan": null,
"modId": null,
"modTotal": 0,
"humanActivityDate": "/Date(1559692800)/",
"created": "/Date(1501519882)/",
"lastMaintRun": "/Date(1559737850)/",
"createdBy": 806,
"active": 1,
"archived": 0,
"loanAlert": null,
"temporaryAccount": 0,
"deleted": 0,
"deletedAt": null,
"_relatedMetadata": null,
"_dynamicProperties": null
}
}

Any of the nested entities can be expanded, although they may not contain any data.

Customer Is Served Application Data

Once the data for the customer and loan are retrieved, it will be up to you to decide where to start them in the application process. Parse the data you receive from the loans endpoint and populate the customer's application as needed. Most customers will use loan attributes like loan status or portfolios to decide what step of the application the customer will be served. Make sure to save any new data the customer submits to the same loan within LoanPro.


How did we do?


Powered by HelpDocs (opens in a new tab)