Introduction

The Sherman Calculation Engine is a lightweight suite of lending, depositing, compliance, and support modules that provides lenders with a lightning-fast API tool to meet all calculation needs.

The SCE is secure - neither receiving, retrieving, storing, or exporting any information particular to any individual. Being free of proprietary user information means being free of the security concerns associated with disclosing personal information to a 3rd party vendor. By focusing exclusively on the math, the SCE slims down to focus on computing quick calculations exclusively.

Getting Started

Each solution for the SCE has its own particular technical platform configurations. To assist your technical team get up and running, we offer:

  • SCE Project History - A quick historical overview of the SCE project.
  • API Overview - An overview of the structure common to the modules found implemented in the SCE JSON.
  • SCE Sample Requests - An entire repository of sample requests you can send to the SCE, with comments to help explain the request structure.

Module Overview

Now that the SCE is up and running and queries can be run, get assistance on how to craft xml payloads to correctly represent your calculation request and review the result structures for consuming the solutions.

Loans

The SCE provides a broad spectrum of closed-end loan computation tools, which over the years has culminated with our flagship Loan module.

  • The Loan module is designed to compute any loan from any lending market in any country. The particulars of a loan are added, element-by-element, to reflect precisely the particulars of that loan.

The modules that follow are all legacy modules for single advance, specific repayment structure loans.

Compliance Modules

Loans require specific sets of mandated disclosure quantities. The SCE comes with several modules to assist lenders to determine several critical quantities. These modules are as follows:

Deposit Modules

The SCE comes with several common deposit modules, broadening your suite of solutions. They are as follows:

Utility Modules

  • Account - Lists all available solutions represented by setup files currently operating with the SCEX, each solution represented by a positive Account integer.
  • User Interface - The setup files for a given account solution are queried with this module, revealing all of the protection products and parameters active for that account. This reporting tool may be used by clients designing a responsive user interface to the particulars of a client solution.
  • Version - Reports the version of the SCE being used.

Project History

The development and consulting team here at J. L. Sherman and Associates (JLS) has accumulated over fifty man-years of experience creating a comprehensive array of programs providing complex, accurate, and compliant loan calculations for our clients. All of this experience and expertise goes into our Sherman Calculation Engine (SCE), which is the most robust loan calculation and compliance library available on the market today.

The Sherman Calculation Engine

Prior to the development of the WinLoan32, our desktop based loan quotation software for the 32-bit Windows platform, several of our customers expressed an interest in having access to the calculation routines contained in the WinLoan16. Due to previous design decisions, this was not possible. With Winloan32, however, the powerful calculation engine that is the foundation of our end user loan quotation software (both WinLoan32 and eWinLoan) was developed as a separate product, which we call it the Sherman Calculation Engine (SCE).

The SCE was released as a product in the form of a 32-bit dynamic link library (DLL) for the Windows environment. Loan and insurance setup information is stored in text files that are created and maintained by Sherman's technical support team. Depending upon the level of support you desire, we can handle all of the steps in setting up a new account for you. This process involves gathering samples from the client and payment protection provider, and thoroughly testing to ensure that the final calculation results match what the client is expecting.

By separating the calculation logic from the user interface, we make available to our partners all of our applied knowledge and expertise. However, our new partners encountered three problems as they worked to interface directly with the SCE:

  1. Initially, the user of the SCE needed to implement all of the data structures used by the SCE for input and output, as well as create the interface to the functions found in the DLL.

  2. As the SCE was modified to suit customer needs and federal or state regulations additions and changes, these data structures needed to be altered. This required the data structures in our partner's applications to also be altered, and then the applications which call the SCE must be recompiled.

  3. Some of our partners wanted to access the power and functionality of the SCE from applications not written for the 32-bit Windows platform. There is no simple way to access a 32-bit Windows DLL from another platform.

These three problems prompted Sherman and Associates to begin development on two new satellite projects of the SCE: the SCE with XML interface (hereafter called the SCEX) and the SCEX Loan Server.

Introducing the SCEX

The SCEX addresses problems #1 and #2 in the list above. It provides an XML interface wrapped around the SCE. By using the SCEX instead of the SCE, the calling application no longer needs to duplicate the data structures used by the SCE. Instead, all input sent to the SCEX is contained in one character buffer (or character string). Similarly, the SCEX returns all results in an output character buffer.

The format of the text contained in these character buffers is what the `X' in the SCEX is all about - XML. XML is a simple, flexible text format which is plays an important role in the exchange of data between disparate platforms and systems.

The SCEX alleviates problem #1 by doing away with complex input and output data structures all together. Instead, the application calling the SCEX provides the necessary input in a character buffer, which contains the XML data. As an example, here is the XML input data for a 36 month equal payment loan with a 10% interest rate and an amount requested of $10,000:

<inLOAN_BUILDER>
  <EditInterest Date="2019-01-01" IntRate="10.000" AccrualCode="320" />
  <Advance Date="2019-01-01" Amount="10000.00" />
  <PmtStream Begin="2019-02-01" Term="36" />
</inLOAN_BUILDER>

The result of the loan calculation is then passed back to the calling application in a buffer. The application then need only parse the returned XML to use the calculation results as appropriate. Here is a sample result returned from the SCEX, using the inputs specified above (with the amortization table omitted for brevity's sake):

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE outLOAN_BUILDER SYSTEM "outLOAN_BUILDER.dtd">
<outLOAN_BUILDER>
   <Results>
      <Description>Successful Calculation</Description>
      <XMLDetail>XML Input is well formed</XMLDetail>
      <XMLDetail>XML Output is untested</XMLDetail>
   </Results>
   <FedBox>
      <AmtFin>10000.00</AmtFin>
      <FinChg>1615.40</FinChg>
      <TotPmts>11615.40</TotPmts>
      <RegZAPR Type="Actuarial">9.995</RegZAPR>
   </FedBox>
   <Moneys>
      <Proceeds>10000.00</Proceeds>
      <Principal>10000.00</Principal>
      <Interest>1615.40</Interest>
   </Moneys>
   <Accrual>
      <Method>Actual/365 USRule</Method>
      <Days1Pmt DayCount="Actual">31</Days1Pmt>
      <Maturity>2022-01-01</Maturity>
   </Accrual>
   <PmtStream Term="36" Pmt="322.65" Rate="10.000" Begin="2019-02-01" PPY="12"/>
   <AmTable> ... </AmTable>
</outLOAN_BUILDER>

Furthermore, problem #2 is also handled. If a new input or output data field is added to the SCE, then the appropriate XML input / output tags will be added to the SCEX. Applications which do not require this new functionality will not need to be recompiled. Instead, they will simply not provide the new input field, or not recognize the new output field. So long as your application does not require the use of the new data zfields, then no recompilation is necessary!

Problem #3 was solved with the introduction of the SCEX Loan Server. The SCEX Loan Server goes one step beyond the SCEX, turning the SCEX into a multi-platform calculation engine. The SCEX Loan Server provides a TCP/IP communication wrapper around the SCEX. So long as the platform on which your application resides can communicate via TCP/IP, you can use the Sherman Calculation Engine in your product.

The Rise of the API and SCE JSON

With the advent of cloud computing and the rise of API driven development, a new light weight and flexible data-interchange format arrived and was quickly adopted - JSON. Learning from our 18+ years of creating, updating, and maintaining the SCEX, we decided to launch the SCE with JSON interface (hereafter called the SCE JSON).

The SCE JSON uses the same Sherman Calculation Engine behind a new JSON interface. The sample XML loan request above translates to the following SCE JSON loan request:

{
  "Module" : "Loan",
  "Data" : {
    "Advances" : [
      {
        "Date" : "2019-01-01",
        "Amount" : "10000.00"
      }
    ],
    "AccrualConfigs" : [
      {
        "Date" : "2019-01-01",
        "IntRate" : "10.000",
        "AccrualCode" : "320"
      }
    ],
    "PmtStreams" : [
      {
        "Date" : "2019-02-01",
        "Term" : "36"
      }
    ]
  }
}

Here is the sample result returned from the SCE JSON, using the inputs specified above (with the amortization table omitted for brevity's sake):

{
  "Result" : 200,
  "Module" : "Loan",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Notes" : [
    ],
    "FedBox" : {
      "AmtFin" : "10000.00",
      "FinChg" : "1615.40",
      "TotPmts" : "11615.40",
      "APR" : {
        "Value" : "9.995",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Proceeds" : "10000.00",
      "Principal" : "10000.00",
      "Interest" : "1615.40"
    },
    "Accrual" : {
      "Methods" : [
        "Actual/365 USRule"
      ],
      "Days1Pmt" : "31",
      "DayCount" : "Actual",
      "Maturity" : "2022-01-01"
    },
    "PmtStreams" : [
      {
        "Term" : "36",
        "Pmt" : "322.65",
        "Rate" : "10.000",
        "Begin" : "2019-02-01",
        "PPY" : "12"
      }
    ],
    "AmTable" : { ... }
  }
}

Hosted vs. Docker Implementations vs. Library

The SCE JSON may be implemented in the following manners:

  1. Hosted - The SCE JSON is hosted by JLS on AWS for you. You are provided with a URL and API key that will allow you to access the functionality of the SCE JSON, without having to setup and maintain your own microservice. As new releases of the SCE JSON are made available, you will be notified of these changes and we will upgrade the Hosted version at your request. The only requirement for the application calling the hosted instance of the SCE JSON is being able to execute a network API request to the provided URL, and to be able to process the data returned in the JSON format.

  2. Docker - The SCE API server Docker image is availabe from Docker Hub, ready to be deployed in Docker. You are provided with an API key that will allow you to access the functionality of the SCE, which will need to be updated periodically. As new releases of the SCE are made available, you will be notified of the changes and will be able to download the updated versions as they become generally available. The SCE API server Docker container can be hosted on Linux/amd64 and Linux/aarch64 systems which support Docker.

  3. Library - The SCE library is available for Windows and Linux/amd64 platforms, and is distributed as a shared library. There is no API server included, as applications using the SCE library will natively use the SCE lirary in whatever manner you see fit. Note that the SCE library supports both JSON and XML formats.

API Overview

The SCE JSON offers different functionality in distinct modules, and each module is documented separately in the reference manual. Each module has a different format for its input request and output response, which is detailed in the chapter dedicated to that module. However, the general (or top-level) format of the data sent to the SCE JSON needs to be consistent for correct parsing, and is called the "request envelope".

The Request Envelope Object

The request envelope is simply a JSON object which identifies the requested Module, along with a Data object that contains the module specific data fields. The request Data object for each module is thoroughly documented in the chapter dedicated to that module.

Example - Request Envelope for Version Module:

{
  "Module" : "Version",
  "Data" : {}
}

Example - Request Envelope for Loan Module:

{
  "Module" : "Loan",
  "Data" : {...}
}

Request Envelope Object Field Definitions

🟥 Module

TypeRequiredValuesDefault
StringyesApr, Hcm, Hpml, Loan, Versionn/a

The value of the Module field determines which module within the SCE JSON is being requested.

🟥 Data

TypeRequired
Objectyes

The Data field contains the module specific request data, and differs depending upon the desired Module. Please reference the chapter dedicated to the module for the required format of the Data object.

Calling the SCE JSON API

Once the request envelope has been created by your application, you will need to send it to the SCE JSON using the appropriate method. Typically, this is done via an HTTP POST request with the body of the request consisting of the request envelope described above. You may also be required to include a specific HTTP header specifyng your API key. These details will be provided by J. L. Sherman and Associates, Inc. and will depend upon how you are accessing the SCE JSON.

Once the request envelope has been successfully sent to the SCE JSON, the SCE JSON will attempt to process the request and will then return a response envelope with the results of the request.

The Response Envelope Object

The response envelope is simply a JSON object which identifies the numeric Result of the call to the SCE JSON, a response Module, along with a Data object that contains the response module specific data fields. The response Data object for each module is thoroughly documented in the chapter dedicated to that module.

Example - Response Envelope for Version Module:

{
  "Result" : 200,
  "Module" : "Version",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Product" : "SCEJSON",
    "Version" : "2021.07.0",
    "Rootpath" : "/var/task",
    "Copyright" : "(c) 2021 J. L. Sherman and Associates, Inc."
  }
}

Response Envelope Object Field Definitions

🟥 Result

TypeRequiredValues
Integeryes200, 400, 403

The Result field indicates the status of the API request. Please see the following table for what the API Result code mean. A successful call will result in a Result field value of 200 (API_OK). Any other value indicates that an error was encountered.

ResultSymbolDescription
200API_OKIndicates that the SCE JSON was able to successfully dispatch the request to the specified module. Note that this does not guarantee a successful response from the module (for that, check response Data.Errors[]).
400API_ERR_BADREQUESTOne of the following occurred: (i) an exception was encountered while attempting to parse the request, (ii) could not parse the request into a valid JSON object, (iii) no Module field of type String was found in the envelope, or (iv) no Data field of type Object was found. An API Error response will be returned to the calling application.
403API_ERR_NOTFOUNDThe Module specified was not found. An API Error response will be returned to the calling application.

🟥 Module

TypeRequiredValues
StringyesApr, Apy, Arm, Balloon, Cd, Construction, EqualPmt, Hcm, Hpml, IntOnly, Ira, Irregular, Loan, PrincipalPlus, SinglePmt, Ui, Version

The value of the Module field determines which module within the SCE JSON generated the response. If the value of the Result field is 200 (API_OK), then the value of Module will be the same as the value of the Module field in the request envelope. If the value Result field is something other than 200 (API_OK), then the SCE JSON has encountered an API ERROR condition, and the value of the this field will be set to "Error" to indicate that the Data field should be parsed as an API Error response.

🟥 Data

TypeRequired
Objectyes

The Data field contains the module specific response data, and differs depending upon the returned Module. Please reference the chapter dedicated to the module for the required format of the Data object.

API Error Response

As mentioned above, if the SCE JSON was not able to successfully dispatch a request due to one of several possible error conditions, an API Error Response will be returned. Here are a few examples of SCE JSON requests that generate API Error Responses

Example - Request with invalid JSON and resulting response:

{
  "Module" : "FooBar"
  "Data" : {}
}
{
  "Result" : 400,
  "Module" : "Error",
  "Data" : {
    "Errors" : [
      "Exception while parsing JSON input. \"EJSONParser: Error at line 3, Pos 8:Expected , or ], got token \"Data\".\empty
    ]
  }
}

Example - Request with no Module field and resulting response:

{
  "Data" : {}
}
{
  "Result" : 400,
  "Module" : "Error",
  "Data" : {
    "Errors" : [
      "Bad API request. No 'Module' string field present."
    ]
  }
}

Example - Request with no Data field and resulting response:

{
  "Module" : "Version"
}
{
  "Result" : 400,
  "Module" : "Error",
  "Data" : {
    "Errors" : [
      "Bad API request. No 'Data' object field present."
    ]
  }
}

Example - Request with invalid Module and resulting response:

{
  "Module" : "FooBar",
  "Data" : {}
}
{
  "Result" : 403,
  "Module" : "Error",
  "Data" : {
    "Errors" : [
      "API not found. No Module named 'FooBar' found."
    ]
  }
}

API Error Response Data Object Field Definition

The Data object for an API Error Response contains a single field which returns a description of the API Error.

🟥 Errors

TypeRequired
array of Stringyes

The Errors[] field contains an array of Strings which describe the error conditions which were encountered. For an API Error Response, the length of the Errors[] Array should always be one (1).

Loan Module

The SCE's loan module may be used to compute almost any loan imaginable - from the simplest equal payment loan to loans that have exotic and highly customized features (e.g. payments that occur outside of a fixed periodicity). If you have used the SCE in the past, then you will know this module by a slightly different name - "Loan Builder".

Sample Request

The following example is a request for an equal payment loan with an advance of $1,000, interest will accrue at a 10% rate using an actual day / 365 U.S. Rule accrual method (code 320), and with a repayment schedule of 12 monthly payments. The final payment will be adjusted for perfect amortization.

{
  "Module" : "Loan",
  "Data" : {
    "BusinessRules" : {
      "AmError" : "AdjPmt"
    },
    "EditOutput" : {
      "ShowType" : true
    },
    "Advances" : [
      {
        "Date" : "2019-01-01",
        "Amount" : "1000.00"
      }
    ],
    "AccrualConfigs" : [
      {
        "Date" : "2019-01-01",
        "IntRate" : "10.000",
        "AccrualCode" : "320"
      }
    ],
    "Fees" : [
      {
        "Name" : "DocFee",
        "Amount" : "50",
        "AddToPrin" : false,
        "AddToFinChg" : true
      }
    ],
    "PmtStreams" : [
      {
        "Date" : "2019-02-01",
        "Term" : "12",
        "PPY" : "12"
      }
    ]
  }
}

Sample Response

The following example is the response returned from the SCE for the request provided at the beginning of the previous section.

{
  "Result" : 200,
  "Module" : "Loan",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Notes" : [
    ],
    "FedBox" : {
      "AmtFin" : "950.00",
      "FinChg" : "104.75",
      "TotPmts" : "1054.75",
      "APR" : {
        "Value" : "19.766",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Proceeds" : "1000.00",
      "Principal" : "1000.00",
      "Interest" : "54.75",
      "Prepaid" : "50.00"
    },
    "Accrual" : {
      "Methods" : [
        "Actual/365 USRule"
      ],
      "Days1Pmt" : "31",
      "DayCount" : "Actual",
      "Maturity" : "2020-01-01"
    },
    "PmtStreams" : [
      {
        "Term" : "11",
        "Pmt" : "87.90",
        "Rate" : "10.000",
        "Begin" : "2019-02-01",
        "PPY" : "12"
      },
      {
        "Term" : "1",
        "Pmt" : "87.85",
        "Rate" : "10.000",
        "Begin" : "2020-01-01"
      }
    ],
    "AmTable" : {
      "AmLines" : [...]
    }
  }
}

Loan Module - Request

The fields of the Data object supported by a Loan module request are defined in alphabetical order below:

ObjectFields
🟥 Data🔹Country
|- 🟥 AccrualConfigs[]🔹AccrualCode, 🔹Capitalize, 🔹Date, 🔹ExtraDays, 🔹IntRate, 🔹IntRound, 🔹NewPmt, 🔹PmtRound
|- |- 🟦 Tiers[]🔸Ceiling, 🔸Rate
|- 🟥 Advances[]🔹Amount, 🔹Compute, 🔸Date, 🔹ExtraDays, 🔹NewPmt, 🔹Position
|- 🟦 Apr🔹Code, 🔹Decimals, 🔹Max, 🔹MAPR_Max, 🔹SinglePayFraction, 🔹StrictTime, 🔹UseMAPR
|- 🟦 ARM🔹CalcType
|- |- 🟥 FullyIndexedRate🔸Index, 🔸Margin, 🔹RoundBasis, 🔹RoundMethod
|- |- 🟥 Limits🔸Annual, 🔸Ceiling, 🔸Floor, 🔸Lifetime
|- |- 🟦 PostTeaser🔹Ignore, 🔹ProRateInc, 🔸Rate, 🔹Type
|- |- 🟥 Teaser🔹ForceTerm, 🔹Ignore, 🔸Rate, 🔸Term
|- |- 🟦 TermStep🔹StairStepDown, 🔹Step
|- 🟦 BalAdjs[]🔹Adjust,🔸Date,🔹NewPmt,🔹Target
|- 🟦 BusinessRules🔹AmError, 🔹AmortizeOnly, 🔹CanSkipFirst, 🔹CanSkipLast, 🔹ClosedFormEqn, 🔹LeapYearRound, 🔹MinFinChg, 🔹MinIntChg, 🔹MYED, 🔹OddFirstPmt, 🔹PmtAccrualCode, 🔹ProtMandatory, 🔹UsRuleAprException, 🔹YieldPPY, 🔹ZeroInterestRule
|- 🟦 Capitalize[]🔹AllowFeb29, 🔸Date, 🔹Holidays, 🔹LastDay, 🔹PPY, 🔹SemimonthlyDay, 🔹Weekends
|- 🟦 Construction🔸EndDate, 🔹HalfCommitment
|- 🟦 EditOutput🔹EarlyPayoffDate, 🔹Merge, 🔹PmtDollarRound, 🔹ShowAmTable, 🔹ShowFees, 🔹ShowGrandTot, 🔹ShowSubTot, 🔹ShowTap, 🔹ShowType, 🔹TagPmts
|- 🟦 EndBalNone
|- 🟦 Fees[]🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹AllowFeb29, 🔸Amount, 🔹Blended, 🔹CalcType, 🔹Date, 🔹EqualServChg, 🔹Holidays, 🔹LastDay, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name, 🔹Position, 🔹PPY, 🔹Round, 🔹RoundBasis, 🔹SemimonthlyDay, 🔹ServChgType, 🔹Term, 🔹Weekends
|- 🟦 Format🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator
|- 🟦 Holidays[]
|- 🟦 MI🔹CashDown, 🔹LoanAmt, 🔸PropertyValue, 🔹Type
|- |- 🟦 Periodic🔹DropLTV, 🔹Term, 🔹WarnLTV
|- |- 🟥 Rates[]🔸Rate, 🔹Switch
|- |- 🟦 UpFront🔹Paid, 🔹Reduce, 🔹Units, 🔹Value
|- 🟦 ODI🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI
|- 🟦 PmtStreams🔹AllowFeb29, 🔹Amount, 🔹ComputeTerm, 🔸Date, 🔹Holidays, 🔹LastDay, 🔹MinPmt, 🔹PmtType, 🔹PPY, 🔹ReplaceIdx, 🔹SemimonthlyDay, 🔹Term, 🔹Weekends
|- 🟦 Protection🔹DataPath, 🔹ShowDataPath
|- |- 🟦 Products[]🔹Account, 🔹Benefit, 🔸Birthdays[], 🔸Code, 🔹Coverage, 🔹Dismemberment, 🔹Financed, 🔹Method, 🔹ShowFactor, 🔹Table, 🔹Term, 🔹TermUnits, 🔹UseLevelRates
|- 🟦 TILARESPA2015🔹MaxPnIDetails, 🔹MinPnIDetails

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Country

Objects: 🟥 AccrualConfigs[], 🟥 Advances[], 🟦 Apr, 🟦 ARM, 🟦 BalAdjs[], 🟦 BusinessRules, 🟦 Capitalize[], 🟦 Construction, 🟦 EditOutput, 🟦 EndBal, 🟦 Fees[], 🟦 Format, 🟦 Holidays[], 🟦 MI, 🟦 ODI, 🟦 PmtStreams, 🟦 Protection, 🟦 TILARESPA2015

🔹 Data.Country

TypeRequiredValuesDefault
StringnoSee tableUS

This field allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see the Countries Appendix for the list of supported countries and their associated codes.

Specifying the Country will also set the default value for the Apr.Code and Format.CurrencyDecimals fields, as appropriate for the country specified.


🟥 Data.AccrualConfigs[]

TypeRequired
Array of AccrualConfig Objectsyes

This array of AccrualConfig objects must have at least one member, and is used to specify how interest is calculated.

Fields: 🔸AccrualCode, 🔹Capitalize, 🔹Date, 🔹ExtraDays, 🔹IntRate, 🔹IntRound, 🔹NewPmt, 🔹PmtRound

Objects: 🟦 Tiers[]

🔹 Data.AccrualConfigs[].AccrualCode

TypeRequiredValuesDefault
StringnoSee tabledefault

The method of interest accrual is defined by this field. A value of default means one of two things: if no accrual method has beend defined at all, use the system default of 201. If an accrual code has been previously defined, then the SCE will continue to use that method. Please see the following table of accrual codes and their descriptions for the meanings of each code.

Add-on interest methods [401...406] have restrictions that apply. Only equal payment loans with one AccrualConfig object may use add-on interest. In addition, construction loans may not be used with add-on interest. Also, any protection products requested must also be single premium.

🔹 Data.AccrualConfigs[].Capitalize

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If interest due is to be added to principal (capitalized) on the specified Date, then set this field's value to true.

🔹 Data.AccrualConfigs[].Date

TypeRequiredValuesDefault
StringnoYYYY-MM-DD or NNNN-00-00Date of the last Advance

Set the date of this event. If the Date field is not specified, then it will default to the earliest specified Advance.Date.

All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, to change the interest rate on January 2, 2021, the field would be specified as "Date" : "2021-01-02".

However, to provide power and flexibility to the calling application, the SCE will also understand Date values in the following formats:

  • NNNN-00-00 If you wish to change an interest accrual parameter on the date of a specific payment number (NNNN), use a value of NNNN-00-00. Thus, an value of 0012-00-00 instructs the SCE to set the date of this event equal to that of the 12th payment. A vale of 0000-00-00 will set the date of the event equal to the date of the first advance.

🔹 Data.AccrualConfigs[].ExtraDays

TypeRequiredValuesDefault
IntegernoInteger0

Increase or decrease the number of days between this event and the next event by the value of this field. e.g. 1 will be considered one more day of interest.

🔹 Data.AccrualConfigs[].IntRate

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]see below

Defines the annual interest rate that applies at and beyond this event. If no IntRate is specified, the previously defined interest rate is used. A value of zero (0) will be used if no previous IntRate has been defined.

🔹 Data.AccrualConfigs[].IntRound

TypeRequiredValuesDefault
Stringnonearest, up, downnearest

Defines how interest is to be rounded.

🔹 Data.AccrualConfigs[].NewPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the payment should change to reflect a new interest rate, set the value of this field to true; otherwise, the payment will not change after this event. If only one AccrualConfig object is being specified, then this field should be omitted altogether.

🔹 Data.AccrualConfigs[].PmtRound

TypeRequiredValuesDefault
Stringnonearest, up, down, bestnearest

How are calculated payments to be rounded at and beyond this event? best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen.

Note: If the BusinessRules.ZeroInterestRule field is set to 'true' and all interest rates are zero, payments are required to be rounded down. This rule ensures the total of payments never exceeds the amounts of the loan to pay off (principal balance).


🟦 Data.AccrualConfigs[].Tiers[]

TypeRequired
Array of Tier Objectsno

To compute interest using a split rate method, where different rates are applied to different parts of the balance, the calling application will need to specify a Tier object with its associated Rate and Ceiling fields. Note that the interest rate which is used above the final Ceiling is the one specified in the AccrualConfig object. Furthermore, the Rate objects must be ordered in ascending order based upon the Ceiling amount.

As en example, assume that the calling application needs to charge 20% on the first $100, 15% up to $250, and 10% for the remaining balance. The AccrualConfig object needed to implement this split rate structure is:

"AccrualConfigs" : [
  {
  "AccrualCode" : "201",
  "Date" : "2020-04-01",
  "IntRate" : "10.000",
  "Tiers" : [
    { "Rate" : "20.0", "Ceiling" : "100.00"},
    { "Rate" : "15.0", "Ceiling" : "250.00"}
  ]
  }
]

Fields: 🔸Ceiling, 🔸Rate

Objects: None

🔸 Data.AccrualConfigs[].Tiers[].Ceiling

TypeRequiredValues
StringyesCurrency >= 0

Defines the upper bound to which the specified split rate tier will apply.

🔸 Data.AccrualConfigs[].Tiers[].Rate

TypeRequiredValues
StringyesNumber in [-99.999...600]

Defines the interest rate that applies to this split rate tier.


🟥 Data.Advances[]

TypeRequired
Array of Advance Objectsyes

The array of Advance objects is used to specify the cash advances made to the borrower and must have at least one member.

Fields: 🔹Amount, 🔹Compute, 🔸Date, 🔹ExtraDays, 🔹NewPmt, 🔹Position

Objects: None

🔹 Data.Advances[].Amount

TypeRequiredValues
StringnoCurrency >= 0

The proceeds to be advanced to the borrower is defined using this field. If the calling application requests that the advance be computed (see the Advance.Compute field below), then the value of this field (if present) will be added to the computed advance amount, which can be useful in multiple advance loans.

🔹 Data.Advances[].Compute

TypeRequiredValuesDefault
Stringnotrue, falsefalse

Some applications like to provide useful "what if?" calculations, such as "how much can I afford to borrow given a specified loan term, interest rate, and payment stream?" Here at J. L. Sherman and Associates, we call this a "Roll to Advance" calculation.

If the value of this field is true, then the calling application is requesting that the SCE calculate one or more advances given a specified term, interest rate, and payment stream. With this in mind, all PmtStream objects (which define the specified payment streams in the loan) may not have a PmtType of CalcPmt. Usually, all payment streams will be defined using a PmtType of FixedPmt.

🔸 Data.Advances[].Date

TypeRequiredValues
StringyesDate >= 1900-01-01

This field's value holds the date on which the advance is made. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, an advance date of January 2, 2021 would be specified as "Date" : "2021-01-02".

🔹 Data.Advances[].ExtraDays

TypeRequiredValuesDefault
StringnoInteger0

Increase or decrease the number of days between this event and the next event by the value of this field. e.g. 1 will be considered one more day of interest.

🔹 Data.Advances[].NewPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the payment should change to reflect a new advance, set the value of this field to true; otherwise, the payment will not change after this event. If only one Advance object is being used, then this field should be omitted altogether.

🔹 Data.Advances[].Position

TypeRequiredValuesDefault
StringnoBeforePmt, AfterPmtBeforePmt

If an advance and a payment fall on the same day, the value of this field determines which event occurs first in the amortization schedule. Note that the first advance of every loan is required to occur before the first scheduled payment.

  • BeforePmt means that when the advance occurs on the same date as a payment, the advance is amortized before the payment.
  • AfterPmt means that when the advance occurs on the same date as a payment, the payment is amortized before the advance.

🟦 Data.Apr

TypeRequired
Objectno

Settings related to the computed effective rate returned by the SCE (most commonly, the Regulation Z APR in the United States of America) are contained in the fields of this object.

Fields: 🔹Code, 🔹Decimals, 🔹Max, 🔹MAPR_Max, 🔹SinglePayFraction, 🔹StrictTime, 🔹UseMAPR

Objects: None

🔹 Data.Apr.Code

TypeRequiredValuesDefault
StringnoSee TableText - See below

The method of APR computation is defined by this field. If this field is not included, the default method depends upon the value of the Country field. For the United States of America, the default value is 100 (Actuarial). For a country in the European Union, the default value is 50 (European Union APR). For Canada, the default value is 60.

🔹 Data.Apr.Decimals

TypeRequiredValuesDefault
StringnoInteger in [1...5]3

The number of decimal places of accuracy for the disclosed APR is determined by this field. The default value of this field is 3.

🔹 Data.Apr.Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]0

If the calling application wants the SCE to check the computed APR against a specified maximum APR, then specify the maximum APR using this field. If a maximum is specified, then this maximum will be included in the APR response object in the Max field, and a MaxExceeded field will also be returned to inform the calling application whether or not the specified maximum was exceeded.

🔹 Data.Apr.MAPR_Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]36

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this field.

🔹 Data.Apr.SinglePayFraction

TypeRequiredValuesDefault
StringnoInDays, InMonthsInDays

This field only applies to single advance, single payment transactions of term less than one year. For these loans, when the term of the loan is a number of months, Appendix J allows for the term of the loan to be expressed as either a number of months over twelve, or the number of actual 24-hour days in the loan over 365. For the former, use InMonths. For the latter, use InDays.

🔹 Data.Apr.StrictTime

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When monthly payments are intended for the 29th or 30th of the month, how should the number of unit periods and fraction be calculated in February, when the day of the payment cannot be the intended day? (e.g. A non-leap year February where payments are meant for the 29th, but end up on the 28th). The StrictTime field acknowledges and disambiguates the calculation. Regular payments generally hold the fraction of a unit period constant, based on the date of the first payment. The SCE allows for a constant fraction of a unit period or a strict time accounting, acknowledging that in February, the fraction of a unit period changes.

When the value of this field is true, the SCE will calculate the fraction of a unit period strictly according to the rules of Appendix J of Regulation Z.

A value of false instructs the SCE to keep the fraction of a unit period constant, equal to the fraction obtained by the time calculated from the date of the first payment to the transaction date.

🔹 Data.Apr.UseMAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will compute the Military APR in addition to the Regulation Z APR. The MAPR object will be included in the loan response.


🟦 Data.ARM

TypeRequired
Objectno

The existance of this optional object alerts the Loan module to use adjustable rate mortgage rules. If the loan is not an ARM loan, do not include this field. The existence of this field toggles the rules explained below.

Fields: 🔹CalcType

Objects: 🟥 FullyIndexedRate, 🟥 Limits, 🟦 PostTeaser, 🟥 Teaser

🔹 Data.ARM.CalcType

TypeRequiredValuesDefault
Stringnopayments, balloonpayments

This optional field specifies how the loan adjusts for rate changes. The default value of payments instructs the SCE to adjust the payment reflect the rate change. A value of balloon causes the teaser payment to persist during the rate cahnges, which results in a final balloon payment.


🟥 Data.ARM.FullyIndexedRate

TypeRequired
Objectyes

The fields of this required object represent the data necessary to compute the fully indexed interest rate; that is, the Index + Margin.

Some lenders constrain the fully indexed rate to be rounded to the nearest something. e.g. If the Index + Margin is 7.123, an institution may require this rate to be rounded to the nearest 1/8th of a percent which would produce 7.125%. Use the optional fields RoundBasis and RoundMethod to round the fully indexed rate.

Fields: 🔸Index, 🔸Margin, 🔹RoundBasis, 🔹RoundMethod

Objects: None

🔸 Data.ARM.FullyIndexedRate.Index

TypeRequiredValues
StringyesNumber in [-99.999...600]

This required field holds the value of the published index interest rate appropriate for the loan at the time of closing. For the purpose of modeling the initial disclosure of the loan, this index rate remains constant through maturity.

🔸 Data.ARM.FullyIndexedRate.Margin

TypeRequiredValues
StringyesNumber in [-99.999...600]

This required field holds the value of the margin that adds to the Index to produce the fully indexed rate. As with the Index field, this value remains constant throughout the loan.

🔹 Data.ARM.FullyIndexedRate.RoundBasis

TypeRequiredValuesDefault
StringnoNumber - see below0.001

If the value of this optional field is greater than zero, then the fully indexed rate will be rounded to this amount. Rounding the fully indexed rate to the nearest 1/8th of one percent is a common practice. Making the RoundBasis equal to 0.125 will accomplish this objective.

🔹 Data.ARM.FullyIndexedRate.RoundMethod

TypeRequiredValuesDefault
Stringnonearest, up, downnearest

If rounding of the fully indexed rate is required, the value of this field instructs the SCE how to direct the rounding. The settings below assume a RoundBasis of 0.01 or 1/100th of a percent.

  • nearest - Round to the nearest RoundBasis. 4.005 would round to 4.01.
  • up - Round up to the nearest basis. 4.00001 would round to 4.01.
  • down - Round down to the nearest basis. 4.00999 would round to 4.00.

🟥 Data.ARM.Limits

TypeRequired
Objectyes

The constraints to a changing interest rate are represented as fields of this required object.

Fields: 🔸Annual, 🔸Ceiling, 🔸Floor, 🔸Lifetime

Objects: None

🔸 Data.ARM.Limits.Annual

TypeRequiredValues
StringyesNumber in [-99.999...600]

The interest rate can change no more over any given year than the value of this required field.

🔸 Data.ARM.Limits.Ceiling

TypeRequiredValues
StringyesNumber in [-99.999...600]

The absolute maximum an interest rate can be over the term of the loan is represented by the value of this required field.

🔸 Data.ARM.Limits.Floor

TypeRequiredValues
StringyesNumber in [-99.999...600]

The absolute minimum an interest rate can be over the term of the loan is represented by the value of this required field.

🔸 Data.ARM.Limits.Lifetime

TypeRequiredValues
StringyesNumber in [-99.999...600]

The Lifetime required field represents the maximum the interest rate can change over the lifetime of the loan.


🟦 Data.ARM.PostTeaser

TypeRequired
Objectno

The PostTeaser object defines the interest rate immediately following the teaser rate (see the Teaser object below).

By default, the post teaser rate will be the lesser of the FullyIndexedRate and the teaser rate plus the value of Limits.Annual. If this default behavior needs to be changed, use the fields of this optional object to mirror the lender's practices.

Note: The post teaser rate may be specified as either an increase to Teaser.Rate or an actual interest rate, according to the value of the PostTeaser.Type.

Fields: 🔹Ignore, 🔹ProRateInc, 🔸Rate, 🔹Type

Objects: None

🔹 Data.ARM.PostTeaser.Ignore

TypeRequiredValuesDefault
Stringnoneither, floor, ceiling, bothneither

The post teaser rate is constrained by default by Limits.Floor and Limits.Ceiling. If the post teaser rate ignores either or both of these Limits, choose one of the values below of this optional field.

🔹 Data.ARM.PostTeaser.ProRateInc

TypeRequiredValuesDefault
Booleannotrue, falsefalse

The boolean value of this optional field determines whether or not the rate increase is pro-rated by the number of payments per year. This field requires the PostTeaser.Type field to be Increase.

For example, if the Teaser.Rate is 5.0% and the Limits.Annual is 2.0% on a quarterly loan, setting this field to true would increase the Teaser.Rate from 5.0 to 5.0 + 2.0/4 = 5.5% for the post teaser rate. The default behavior of false would have the post teaser rate be 5.0% + 2.0% = 7.0%.

🔸 Data.ARM.PostTeaser.Rate

TypeRequiredValues
StringyesNumber in [-99.999...600]

The meaning of this required field depends on the value of the PostTeaser.Type field. Enter the value of the post teaser rate PostTeaser.Type = Rate) or rate increase PostTeaser.Type = Increase. In both cases, the rate is expressed as an annual rate.

🔹 Data.ARM.PostTeaser.Type

TypeRequiredValuesDefault
Stringnoincrease, rateincrease

The value of this optional field determines if the PostTeaser.Rate is treated as an interest rate or an adjustment to the teaser rate.


🟥 Data.ARM.Teaser

TypeRequired
Objectyes

The fields of this required object define the discount period of the loan.

Fields: 🔹ForceTerm, 🔹Ignore, 🔸Rate, 🔸Term

Objects: None

🔹 Data.ARM.Teaser.ForceTerm

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If fully indexed rate equals the Teaser.Rate, the default behavior would be to output a single payment stream for the entire term of the loan. If, however, the teaser payment stream should always be displayed as an isolated payment stream, setting this optional field to true forces a teaser period to be displayed.

Example: A teaser rate of 4% for 36 months on a 120 month loan with a fully indexed rate of 4% might have an output similar to the following:

  • If ForceTerm is true:

    36 payments of 920.14 at 4.0%
    84 payments of 920.14 at 4.0%
    
  • If ForceTerm is false:

    120 payments of 920.14 at 4.0%
    

🔹 Data.ARM.Teaser.Ignore

TypeRequiredValuesDefault
Stringnoneither, floor, ceiling, bothneither

The teaser rate is constrained by default by Limits.Floor and Limits.Ceiling. If the post teaser rate ignores either or both of these Limits, choose one of the values below of this optional field.

🔸 Data.ARM.Teaser.Rate

TypeRequiredValues
StringyesNumber in [-99.999...600]

This rate is the fixed discount rate that applies for the Teaser.Term expressed as an annual percentage.

🔸 Data.ARM.Teaser.Term

TypeRequiredValues
StringyesInteger in [1...600]

The fixed term over which the discount rate or Teaser.Rate applies.


🟦 Data.ARM.TermStep

TypeRequired
Objectno

This optional object specifies the number of payments between interest rate changes after the teaser term has elapsed.

Fields: 🔹StairStepDown, 🔹Step

Objects: None

🔹 Data.ARM.TermStep.StairStepDown

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the fully indexed rate is less than the teaser rate, a value of false will keep the interest rate at the teaser rate for the duration of the loan. If your institution allows the rate to decrease below the teaser rate over the term of the loan, set the value of this field to true.

If the interest rate of the loan is decreasing, all of the Limits will be in effect and constrain the loan by their fields, but in reverse. So, for example, a loan with decreasing interest rate can decrease no more than the Limits.Annual amount over a given year.

🔹 Data.ARM.TermStep.Step

TypeRequiredValuesDefault
StringnoInteger > 012

If the value of this field is greater than the number of payments per year, then any value is valid and the rate increase per step is equal to the annual rate increase.

If the value of this field is less than or equal to the number of payments per year, then the it must evenly divide the number of payments per year. In this case, the rate increase per step is equal to the annual rate increase multiplied by the term step divided by the number of payments per year.


🟦 Data.BalAdjs[]

TypeRequired
Array of BalAdj Objectsno

The array of BalAdj objects allows the calling application to make one or more balance adjustments during the amortization of a loan to better support the quotation and servicing of open ended lending.

Fields: 🔹Adjust 🔸Date 🔹NewPmt 🔹Target

Objects: None

🔹 Data.BalAdjs[].Adjust

TypeRequiredValuesDefault
StringnoCurrency0

The Adjust field defines the amount by which to adjust the BegBal amount at the beginning of its amortization line. If, for example, the balance were $1,500 after the 12th payment and an Adjust was 500.00 on 0012-00-00, the loan module would adjust the $1,500 balance by an additional $500, arriving at $2,000 as its EndBal.

🔸 Data.BalAdjs[].Date

TypeRequiredValues
StringyesYYYY-MM-DD or YYYY-00-00

The date of the balance adjustment. (Note the a balance will adjust after a payment that occurs on the same date.)

A special format allows for the adjustment to be made immediately after a specified payment index using the YYYY-00-00 mask. A date entry of 0018-00-00 instructs the Loan module to make an adjustment immediately after the 18th payment.

🔹 Data.BalAdjs[].NewPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the payment should change to reflect the balance adjustment, set the value of this field to true; otherwise, the payment will not change after this event.

🔹 Data.BalAdjs[].Target

TypeRequiredValuesDefault
StringnoCurrency >= 00

The Target field defines what the balance should adjust to at the specified date. If, for example, the balance were $1,500 after the 12th payment and a Target was defined as 2000.00 on 0012-00-00, the loan module would adjust the $1,500 balance to $2,000 as the EndBal of the BalAdj line in the amortization table.


🟦 Data.BusinessRules

TypeRequired
Objectno

Many loan calculation business rules may be toggled using the fields of this object.

Fields: 🔹AmError, 🔹AmortizeOnly, 🔹CanSkipFirst, 🔹CanSkipLast, 🔹ClosedFormEqn, 🔹LeapYearRound, 🔹MinFinChg, 🔹MinIntChg, 🔹MYED, 🔹OddFirstPmt, 🔹PmtAccrualCode, 🔹ProtMandatory, 🔹UsRuleAprException, 🔹YieldPPY, 🔹ZeroInterestRule

Objects: None

🔹 Data.BusinessRules.AmError

TypeRequiredValuesDefault
StringnoAllow, AdjPmt, AdjPrin, AdjIntAllow

When amortizing a loan, often times there is a non-zero ending balance due to rounding. This field determines what to do (if anything) with a non-zero ending balance. This non-zero balance is referred to as the amortization error.

  • Allow - Do not do anything with the non-zero ending balance.

  • AdjPmt - Adjust the final payment to achieve perfect amortization, which will then result in an ending balance of zero.

  • AdjPrin - Adjust the final principal reduction amount to achieve perfect amortization, which will then result in an ending balance of zero.

  • AdjInt - Adjust the final interest reduction amount to achieve perfect amortization, which will then result in an ending balance of zero.

Note that using AdjPrin or AdjInt will cause the final payment to not equal the sum of the principal reduction amount and amount to interest in the amortization schedule.

🔹 Data.BusinessRules.AmortizeOnly

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application sets the value of this field to true, then instead of computing a loan with payments that best amortize the principal balance to zero, the Loan module is instructed to simply amortize the specified loan (all advances and payments specified by the calling application) and return the ending balance.

To use this functionality, there are a few requirements that must be met:

  • All specified payment streams must have a PmtType of other than CalcPmt. In AmortizeOnly mode, the Loan module will not compute "regular" principal and interest payments.

  • No protection products may be requested.

  • All advances must be specified, and not computed.

  • AmError (see above) must be set to "Allow".

Furthermore, the output for an "AmortizeOnly" : true Loan request will omit the FedBox and TILARESPA2015 response objects as well as suppressing the Interest field of the Moneys object.

If the Total Interest, Principal Reduction, and Total of Payments are required, use EditOutput.ShowGrandTot. These three data values will be listed as fields of the GrandTotals object.

If annual subtotals are required, set the EditOutput.ShowSubtot setting to True. This switch will generate an array of annual subtotals to be disclosed in the amortization schedule.

🔹 Data.BusinessRules.CanSkipFirst

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Set this field to true to allow the first payment of a loan to be skipped. The default value of false does not allow a skipped first payment.

🔹 Data.BusinessRules.CanSkipLast

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Set this field to true to allow the last payment of a loan to be skipped. The default value of false does not allow a skipped final payment.

🔹 Data.BusinessRules.ClosedFormEqn

TypeRequiredValuesDefault
Booleannotrue, falsetrue

When searching for the payment that best amortizes the loan to zero, this setting determines whether or not interest is rounded during the payment search algorithm. The default value of true indicates that the closed form equation should be matched, and interest will be left unrounded during the payment search algorithm. Setting this field value to false will cause interest to be rounded during the payment search algorithm.

🔹 Data.BusinessRules.LeapYearRound

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true and one of the actual/actual interest accrual calendars (including Midnight366) is used in the requested loan, then the interest accrued on a 365 days basis is rounded separately from the interest accrued on a 366 days basis. Note that this option is encountered very rarely in the marketplace.

If the value of this field is false, then interest computed on a 365 day basis will be added to the interest computed on a 366 day basis, and then rounded.

🔹 Data.BusinessRules.MinFinChg

TypeRequiredValuesDefault
StringnoNumber - Currecy >= 00

This field allows the calling application to specify a minimum allowed finance charge for the loan. If a value greater than zero is specified, then the loan will be computed in the normal manner, along with the finance charge. If the computed finance charge falls below the specified minimum, then the final payment's interest charge will be adjusted to meet the specified minimum.

Note that the minimum interest charge is checked before the minimum finance charge. If the loan triggered a minimum finance charge adjustment, then the amount of this adjustment will be disclosed in the MinFinChgAdj field of the Moneys response object.

Note that since the minimum finance charge check is done after the loan payment and protection calculations have been completed, certain protection products whose calculations may vary due to a modified final payment will not reflect any minimum finance charge adjustments made to the final payment.

🔹 Data.BusinessRules.MinIntChg

TypeRequiredValuesDefault
StringnoCurrency >= 00

This field allows the calling application to specify a minimum allowed interest charge for the loan. If a value greater than zero is specified, then the loan will be computed in the normal manner, along with the interest charge. If the computed interest charge falls below the specified minimum, then the final payment's interest charge will be adjusted to meet the specified minimum.

Note that the minimum interest charge is checked before the minimum finance charge. If the loan triggered a minimum interest charge adjustment, then the amount of this adjustment will be disclosed in the MinFinChgAdj field of the Moneys response object.

Note that since the minimum interest charge check is done after the loan payment and protection calculations have been completed, certain protection products whose calculations may vary due to a modified final payment will not reflect any minimum interest charge adjustments made to the final payment.

🔹 Data.BusinessRules.MYED

TypeRequiredValuesDefault
StringnoMM-DDn/a

The MYED field represents the Mortgage Year End Date when computing an annual rest loan, a loan which is commonly encountered in the United Kingdom. If you do not need to compute an annual rest loan, then this field need not be included in the request.

If included in the request, then the value of the field must be in the format of "MM-DD" when MM is a valid month number from 1 to 12, and DD is a valid day number in the month specified. The month and day specified is the annual date on which escrowed payments and interest are applied to the outstanding principal balance.

When the MYED is specified, you must also specify a PmtStream object with a PmtType field value of PmtEsc, which indicates an escrowed payment.

🔹 Data.BusinessRules.OddFirstPmt

TypeRequiredValuesDefault
Booleannotrue, false, OnlyPositivefalse

If the first payment should be adjusted (up or down) due to odd days interest in the same manner that interest is accruing in the loan, then set the value of this field true. A value of OnlyPositive instructs the SCE to only adjust the first payment due to odd days if there are positive odd days. Finally, a value of false instructs the SCE to not adjust the first payment using this method.

Note that you can not specify an odd first payment using this field and include ODI in the same request.

🔹 Data.BusinessRules.PmtAccrualCode

TypeRequiredValuesDefault
Stringnodefault, 201...206, 210, 211, 220, 221, 230, 231, 250, 301...306, 308...311, 320, 321, 330, 331, 350default

In rare instances, the calculated payment for a given loan is based upon a different accrual calendar than the one used to amortize interest in the amortization schedule. This is most commonly encountered when a system is not able to compute the "best" payment, and instead uses a simpler accrual calendar with a closed form equation (such as unit period simple). An estimated payment is computed, then used in the amortization schedule where interest is accrued on a different calendar. Note that this will almost always generate an ending balance of greater magnitude that the "correct" payment, unless the BusinessRules.AmError field is used to adjust the final payment.

A value of default means that the payment will be computed using the same accrual calendar as interest. Any other value will cause the computed payment to be calculated using the accrual code specified.

🔹 Data.BusinessRules.ProtMandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then protection premiums/fees will be considered to be a part of the Finance Charge, and thus affect the Regulation Z APR.

🔹 Data.BusinessRules.UsRuleAprException

TypeRequiredValuesDefault
Booleannotrue, falsefalse

The US Rule APR Exception is an option used by some financial institutions that accrue interest in a US Rule manner, and also disclose the US Rule APR. If this field is omitted or set to false, the US Rule APR will always be computed.

If the value of this field is set to true and the following conditions are met: (i) interest is accrued via a US Rule method, (ii) A US Rule APR method matching the acrual method has been specified, (iii) the Regulation Z Finance Charge is equal to the interest charge, and (iv) there is only a single AccrualConfig object, then the US Rule APR will be disclosed as the interest rate.

🔹 Data.BusinessRules.YieldPPY

TypeRequiredValuesDefault
Stringno0, 2, 4, 6, 120

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than "0", this value determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this field with a value other than zero, the calling application must include an odd days prepaid fee in the request.

🔹 Data.BusinessRules.ZeroInterestRule

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true and (i) the interest rate for the entire term of the loan is 0%, or (ii) the computed interest charge for the loan is less than zero, then the interest charge will be set to a value of zero, and the Regulation Z Finance Charge will be adjusted in an identical manner.

Note that setting the value of this field to true will likely cause the sum of the principal and interest to no longer equal the total of payments (similarly for the Amount Financed and Finance Charge). J. L. Sherman and Associates does not recommend that you set the value of this field to true before consulting with your legal counsel in regards to these and other unforseen consequences.

Lastly, all payment rounding is forced to be rounded down to the nearest penny. This adjustment ensures that the sum of payments never exceeds the Principal Balance of the loan.


🟦 Data.Capitalize[]

TypeRequired
Array of Capitalize Objectsno

Some loans require interest to be capitalized on specific dates, irrespective of any other considerations. For these events, use one or more Capitalize objects.

Fields: 🔹AllowFeb29, 🔸Date, 🔹Holidays, 🔹LastDay, 🔹PPY, 🔹SemimonthlyDay, 🔹Weekends

Objects: None

🔹 Data.Capitalize[].AllowFeb29

TypeRequiredValuesDefault
Booleannotrue, falsetrue

This field is used when generating event dates in a capitalization stream (if any) beyond the specified Date date of the Capitalize object. If the value of this field is true, then February 29th is an allowed date.

On the other hand, if the value of this field is set to false and a computed date in the given capitalization stream is scheduled to fall on February 29th, then the scheduled date will be altered in one of the following manners:

  • If the number of payments per year is 1, 2, 4, 6, 12, or 24 then the scheduled date of February 29 will be moved back one day to February 28. This is the only date that will be adjusted.
  • If the number of payments per year is 26 or 52 then the scheduled date of February 29 will be moved forward one day to March 1, and all subsequent dates will be a multiple of 7 or 14 days from this date (depending upon the specified payment frequency).

🔸 Data.Capitalize[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The Date field for the Capitalize object is used to specify the date on which to capitalize interest. (For a stream of Capitilize events, see the Term field.) As an example, if interest is to be capitalized on Feb. 1, 2008, the field should be specified as "Date" : "2008-02-01".

🔹 Data.Capitalize[].Holidays

TypeRequiredValuesDefault
Stringnoignore, prev, nextignore

If event dates (including the specified start date) are not allowed to fall on specified holidays (see the Holidays[] array for more inforation on how to specify holidays), then set the value of this field to something other than ignore. The meaning of the other two values are defined below:

  • prev - The date will be moved to the day before the holiday.
  • next - The date will be moved to the Monday after the holiday.

Note that two other Capitalize fields can cause the computed dates to be adjusted: AllowFeb29 and Weekends. The rules for how these three fields interact are described below in detail.

For every date required in our capitalization stream, the SCE goes through the following steps:

  1. Generate the next date in our date stream, called the target date.
  2. If February 29th is not allowed and if the target date is 2/29, then adjust the target date forward or backward one day based upon the date generation frequency. If the frequency is a monthly multiple, then the target date is moved backward one day to 2/28. Weekly and biweekly frequencies move the target date forward one day to 3/1.
  3. If weekend dates are not allowed (e.g. the Weekends field holds a value other than ignore) and the target date falls on a Saturday or Sunday:
    1. then adjust the target date according to the field value.
    2. if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 3(a) above.
  4. If holidays are not allowed (e.g. the Holidays field holds a value other than ignore) and the target date falls on a specified holiday:
    1. Then adjust the target date according to the Holidays field value.
    2. If weekend dates are not allowed (e.g. the Weekends field holds a value other than Ignore) and the target date falls on a Saturday or Sunday, then adjust the target date in the same direction as 4(a) above.
    3. if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 4(a) above.
    4. Step 4 is repeated until the target date is not adjusted.

🔹 Data.Capitalize[].LastDay

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field is used to resolve ambiguitiess in subsequent event dates when the Date date falls on the last day of a month with fewer than 31 days.

Set this field's value to true if the intent was to make subsequent events occur on the last day of the month. A value of false indicates that subsequent event dates will fall on the day number specified by the Date.

As an example, if the calling application specifies a Date of "2010-02-28", then subsequent payment dates for a monthly payment frequency will be:

  • on the 28th of each subsequent month if "LastDay" : false.
  • on the last day of each subsequent month if "LastDay" : true.

🔹 Data.Capitalize[].PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for "payments per year", and as one might surmise, determines the frequency of capitalization events. If only one capitalization event occurs or the stream of capitilization events are monthly, this field may be ignored.

🔹 Data.Capitalize[].SemimonthlyDay

TypeRequiredValuesDefault
StringnoInteger in [0...31]0

When specifying a semimonthly stream, the day number on which the first capitalization event occurs is the day number for all of the following odd numbered payments. If you omit this field or specify a value of 0, then the even numbered events will be generated using the default method within the SCE.

If you wish to specify the day number on which even numbered events fall (overriding the default method used in the SCE), then set the value of this field to the desired day number. Setting the value of this field to 31 will cause all even events to fall on the last day of the month.

As an example, if you want to specify a semi-monthly capitalization stream beginning on January 1, 2019 with events that fall on the 1st and 15th of each month for 24 payments, the object should look something like this:

{
  "Capitalization" : [
    {
      "Date" : "2019-01-01",
      "Term" : "24",
      "PPY" : "24",
      "SemimonthlyDay" : "15"
   }
  ]
}

🔹 Data.Capitalize[].Term

TypeRequiredValuesDefault
StringnoInteger >01

The Term field indicates the the number of capitalization events to be made at the specified payment frequency (see PPY above). The default value is 1, and if only one capitalization event is required, this field may be omitted.

🔹 Data.Capitalize[].Weekends

TypeRequiredValuesDefault
Stringnoignore, prev, near, nextignore

If capitalization stream dates (including the specified start Date) are not allowed to fall on a Saturday or Sunday, then set the value of this field to something other than ignore. The meaning of the other three values are defined below:

  • prev - The date will be moved to the Friday before the computed weekend date.
  • near - The date will be moved to the Friday before the computed weekend date if the computed weekend date falls on a Saturday, otherwise it will be moved to the Monday after.
  • next - The date will be moved to the Monday after the computed weekend date.

Note that two other Capitalize fields can cause the computed dates to be adjusted - AllowFeb29 and Holidays. For a complete description of how these three fields work together, please see the documentation for the Holidays field.


🟦 Data.Construction

TypeRequired
Objectno

Fields: 🔸EndDate, 🔹HalfCommitment

Objects: None

If the requested loan calculation features a construction period, during which time interest only payments are made by the borrower, then the request need to include this object and set it's fields appropriately. Note that construction periods always begin on the date of the first advance.

Generally speaking, there are two methods used to disclose construction loans. The first method computes the total estimated interest due during the construction period, and treats it as an unfinanced prepaid fee. The second method discloses discrete interest only payments in the amortization schedule during the construction period.

To emulate the first method, simply include the Construction object and ensure that no payment events are set up to occur during the construction period. The construction interest will be computed and returned in the ConInterest response object with the IsPrepaid field set to true.

To emulate the second method, set up an interest only payment stream which begins during the construction period, with the final interest only payment occurring on the construction period's ending date. The interest only payments will then appear in the resulting amortization schedule, and the total construction interest will be returned in the ConInterest response object with the IsPrepaid field set to false.

🔸 Data.Construction.EndDate

TypeRequiredValuesDefault
StringyesYYYY-MM-DDn/a

The date on which the construction period terminates.

All dates must be in the form of "YYYY-MM-DD", and be 10 characters long. Hence, to end the construction period on July 4, 2021, the field would be specified as "EndDate" : "2021-07-04".

If the calling application sets up discrete interest only payments during the construction period, then the EndDate may also be specified as occurring on a given payment number (NNNN) as "EndDate" : "NNNN-00-00".

🔹 Data.Construction.HalfCommitment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

During the construction period, if estimated interest should be disclosed based upon half of the commitment amount, then set the value of this field to true. If interest is due on the entire commitment amount during the construction period, then set this value to false. Multiple advance construction loans are computed with this field set as true.


🟦 Data.EditOutput

TypeRequired
Objectno

Changes to the presentation of the output data are contained in the fields of this object.

Fields: 🔹EarlyPayoffDate, 🔹Merge, 🔹PmtDollarRound, 🔹ShowAmTable, 🔹ShowFees, 🔹ShowGrandTot, 🔹ShowSubTot, 🔹ShowTap, 🔹ShowType, 🔹TagPmts

Objects: None

🔹 Data.EditOutput.EarlyPayoffDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DD or NNNN-00-00n/a

If an early payoff date is specified and is in the format of a valid date (i.e. YYYY-MM-DD), then the loan will first be computed normally, ignoring this value. Once this first step is done, the loan will then be amortized and the early payoff date applied by removing all loan events after the early payoff date, ensuring that a final payment date falls on the specified date.

If the early payoff date is specified and is in the format of NNNN-00-00, then the early payoff date will be set to the date of the Nth payment, and the loan will be computed as described above.

One common use of this field is to generate computed regular payments based upon a longer amortization term, with a final balloon payment made on the early payoff date (commonly called a balloon loan with a long term amortization and short term call).

All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, to end an early payoff date on July 1, 2021, the field would be specified as "EarlyPayoffDate" : "2021-07-01". To specify an early payoff date that coinsides with the 60th payment, the field would be specified as "EarlyPayoffDate" : "0060-00-00".

🔹 Data.EditOutput.KeepSlush

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Rounding interest each period numerically eliminates values beyond two decimal places. This amount is referred to as slush. To keep this amount and add it to next period's unrounded interest, set the value of this field true.

🔹 Data.EditOutput.Merge

TypeRequiredValuesDefault
Stringnonone, some, default, ordereddefault

This field determines what should be done when a loan with multiple overlapping payment streams causes one or more payments to fall on the same calendar date. We strongly advise using either the none or ordered options as they are the most common and easiest to understand. The other two options (some and default) are provided for backwards compatibility, with some behaving as false and default behaving as true in versions of the SCE prior to the 2025-07 release.

Example: Two payment streams which generate payments that fall on the same date.

  "PmtStreams" : [
    { "Date" : "2025-03-01", "PmtType" : "CalcPmt", "Term" : "12"},
    { "Date" : "2025-04-01", "PmtType" : "PPY", "Term" : "4", "Term" : "4"}
  ]

The above JSON creates an array of two payment streams, with all of the quarterly interest only payments occurring on payment dates created by the first payment stream.

If the value of the Merge field is none, then payments will not be merged. That is, if multiple payments fall on the same date, then they will appear as separate payments in the amortization schedule, applied in the order listed in the request. In the sample above, this would cause the loan's amortization schedule to display two distinct payments in April, July, October, and January. Since the CalcPmt payments will be amortized first, the following PayInt payments will be payments of zero as no interest can accrue between the two payments on the same date. If the order of the PmtStream objects was reversed (with the PayInt type first and CalcPmt type second), then the PayInt payments would pay all interest due at the time, and the CalcPmt payments occurring on the same date as the PayInt payments would apply purely to principal.

If the value of this field is ordered, then payments will be merged. If multiple payments fall on the same date, then the payment associated with the last applicable payment steam listed in the request will take priority. In the sample above, this would cause the PayInt payments to take precedence over the CalcPmt payments in April, July, October, and January.

The some and default values are provided for backwards compatibility, and are no longer recommended for use.

🔹 Data.EditOutput.PmtDollarRound

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Payments are normally rounded to the penny, according to the method specified by the EditInterest.PmtRound field. If the payment should be rounded to the dollar instead of the penny, then set the value of this field to true.

Note that for some loans (such as those with longer terms or relatively small proceeds), rounding the payment up or to the nearest dollar may require a shortened loan term to prevent one or more negative payments at the end of the loan.

🔹 Data.EditOutput.ShowAmTable

TypeRequiredValuesDefault
Booleannotrue, falsetrue

To supress the entire amortization schedule from the response, set value of this field to false; otherwise, the amortization schedule will be returned.

🔹 Data.EditOutput.ShowFees

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to false, then fees will not explicitly appear in the amortizaton schedule, unless they do not occur on the date of an advance or the date of a payment. They will also not be individually listed under the Moneys object of the response.

A value of true means that all fees will be explicitly accounted for, both in the Moneys response object as child objects and in the amortization table. The Type field will have the name of the fee as its value.

🔹 Data.EditOutput.ShowGrandTot

TypeRequiredValuesDefault
Booleannotrue, falsefalse

To show the amortization schedule grand totals in the response, set this field's value to true; otherwise, the grand totals will not be returned.

🔹 Data.EditOutput.ShowSubTot

TypeRequiredValuesDefault
Booleannotrue, falsefalse

To show the amortization schedule annual subtotals in the XML output, set this field's value to true; otherwise, annual subtotals will not be returned.

🔹 Data.EditOutput.ShowTap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If not specified, the default value of this field is determined by the Country specified. If the Country is GB (United Kingdom), then the default value is true. All other country values will default this field to false.

The value of this field determines if the total amount payable response field (i.e. TAP) will be computed and disclosed. This quantity is broadly defined as the total of payments plus fees that do not enter into the amortization table in any way.

🔹 Data.EditOutput.ShowType

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Each line of the amortization schedule is characterized by a type, which describes the particular amortization event. An EditInterest event is different from a FixedPmt event, for example. Set this field to true to report the Type of each amortization event. A value of false will suppress output of the Type field in the amortization schedule.

🔹 Data.EditOutput.TagPmts

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then each PmtStream response object will include an Idx field which identifies the input payment stream object which gave rise to it. If this field is set to true, then the EditOutput.Merge field must be set to false. If both are set to true, then an error will be returned.


🟦 Data.EndBal

TypeRequiredValuesDefault
StringnoCurrency > 00

When computing a loan, the usual intention is to compute a payment which produces an ending balance of zero at the end of the repayment schedule. However, is some international markets (such as Australia / New Zealand), some loans are computed with a specified ending balance greater than zero. To support these types of loans, the EndBal field is provided.

If omitted, the desired ending balance at the end of the repayment schedule is defaulted to 0. To specify a desired ending balance greater than zero, simply specify the desired ending balance as an appropriately formatted currency value as the element's value.

For example, if the desired ending balance is $50,000.00, then you would include "EndBal" : "50000.00" in your request.

Note that if an ending balance greater than zero has been specified, then no protection products are allowed to be written with the loan, and the APR (and MAPR if requested) are not computed.

Fields: None

Objects: None


🟦 Data.Fees[]

TypeRequired
Array of Fee Objectsno

This array of Fee objects allows the calling application to specify one ore more Fee objects to be added to the loan.

Fields: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹AllowFeb29, 🔸Amount, 🔹Blended, 🔹CalcType, 🔹Date, 🔹EqualServChg, 🔹Holidays, 🔹LastDay, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name, 🔹Position, 🔹PPY, 🔹Round, 🔹RoundBasis, 🔹SemimonthlyDay, 🔹ServChgType, 🔹Term, 🔹Weekends

Objects: None

🔹 Data.Fees[].AddToFinChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be included in the computed Finance Charge (and hence, affect the APR), then set this field to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 Data.Fees[].AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this field to true. If set to false, then the fee is paid up front out of the borrower's pocket.

🔹 Data.Fees[].Adjust

TypeRequiredValuesDefault
StringnoCurrency >= 00

The optional Adjust field allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This field has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCE is as follows:

{
  "Fees" : [
    {
      "Name" : "TN Fee",
      "CalcType" : "OnAmtFin",
      "Adjust" : "-2000.00",
      "Amount" : "0.115",
      "AddToPrin" : true,
      "AddToFinChg" : false
   }
  ]
}

🔹 Data.Fees[].AllowFeb29

TypeRequiredValuesDefault
Booleannotrue, falsetrue

This field is used when generating fee dates in a fee stream (if any) beyond the specified Date date of the Fee object. If the value of this field is true, then February 29th is an allowed fee date.

On the other hand, if the value of this field is set to false and a computed date in the given fee stream is scheduled to fall on February 29th, then the scheduled fee date will be altered in one of the following manners:

  • If the number of payments per year is 1, 2, 4, 6, 12, or 24 then the scheduled fee date of February 29 will be moved back one day to February 28. This is the only date that will be adjusted.
  • If the number of payments per year is 26 or 52 then the scheduled fee date of February 29 will be moved forward one day to March 1, and all subsequent fee dates will be a multiple of 7 or 14 days from this date (depending upon the specified payment frequency).

🔸 Data.Fees[].Amount

TypeRequiredValuesDefault
StringyesCurrency > 00

How this field is interpreted depends upon the Fee.CalcType field. Please see the documentation for this field for further information.

🔹 Data.Fees[].Blended

TypeRequiredValuesDefault
Booleannotrue, falsefalse

The Blended field determines how the SCE will include the fee with a payment or advance.

A value of true in an advance tells the SCE that the amount of the advance already includes the fee. A value of false means to add the fee on top of the existing advance.

Similarly, if the Fee occurs on a payment date, then true means that the payment has the fee already included in it, whereas a value of false means the fee is to be added on top of the payment.

🔹 Data.Fees[].CalcType

TypeRequiredValuesDefault
StringnoDollar, OnProceeds, OnPrincipal, OnAmtFin, OnBalance, OnBalanceFlatDollar

This field specifies how the fee is to be computed, as described in the following table.

Fee Calc TypeDescription
DollarThe Amount field is understood as a flat dollar amount.
OnProceedsThe Amount field is understood as a percentage value, to be applied to the loan's proceeds, defined as the sum of advances. An Amount of 0.25 would represent a fee of 0.25% of the total proceeds.
OnPrincipalThe Amount field is understood as a percentage value, to be applied to the loan's principal balance. An Amount of 0.125 would represent a fee of 0.125% of the principal balance.
OnAmtFinThe Amount field is understood as a percentage value, to be applied to the loan's Regulation Z Amount Financed. An Amount of 0.33 would represent a fee of 0.33% of the amount financed.
OnBalanceThe Amount field is understood as an annual percentage value, to be applied to the current balance of the loan when the fee is assessed, and accrued using the interest accrual calendar in effect. An Amount of 12.01 would represent a fee accrued at an annual rate of 12.0% of the current balance.
OnBalanceFlatThe Amount field is understood as a flat percentage value, to be applied to the current balance of the loan when the fee is assessed. An Amount of 1.0 would represent a fee of 1.0% of the current balance.

🔹 Data.Fees[].Date

TypeRequiredValuesDefault
StringnoYYYY-MM-DD or 0000-MM-00Date of the last Advance

The date on which a fee occurs. If this object defines a stream of more than one fee, then this field defines the date on which the first fee occurs. If the date is the same as an advance or payment, the fee is loaded into the advance or payment event; otherwise, the fee is a stand-alone event. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a fee date of January 2, 2021 would be specified as "Date" : "2021-01-02".

A special format is accepted for annual fees (Fee.PPY value of 1) paid on a specific calendar month of the year. Using 0000-MM-00 as a value for Date instructs the SCE to pay the fee on the MM payment of the payment stream. For example, 0000-06-00 instructs the system to pay this fee on June Payments.

If the Date field is not specified, then it will default to the earliest specified Advance Date.

🔹 Data.Fees[].EqualServChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When a fee is set up as a service charge of type ByTerm (see Fee.ServChgType field), this field determines if all the service charge fee payments should be forced to be equal (a value of true), or if the final service charge fee payment can be different from the others due to rounding (a value of false).

🔹 Data.Fees[].Holidays

TypeRequiredValuesDefault
Stringnoignore, prev, nextignore

If fee dates (including the specified start date) are not allowed to fall on specified holidays (see the Holidays[] array for more inforation on how to specify holidays), then set the value of this field to something other than ignore. The meaning of the other two values are defined below:

  • prev - The date will be moved to the day before the holiday.
  • next - The date will be moved to the Monday after the holiday.

Note that two other Fee fields can cause the computed dates to be adjusted: AllowFeb29 and Weekends. The rules for how these three fields interact are described below in detail.

For every date required in our payment stream, the SCE goes through the following steps:

  1. Generate the next date in our date stream, called the target date.
  2. If February 29th is not allowed and if the target date is 2/29, then adjust the target date forward or backward one day based upon the date generation frequency. If the frequency is a monthly multiple, then the target date is moved backward one day to 2/28. Weekly and biweekly frequencies move the target date forward one day to 3/1.
  3. If weekend dates are not allowed (e.g. the Weekends field holds a value other than ignore) and the target date falls on a Saturday or Sunday:
    1. then adjust the target date according to the field value.
    2. if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 3(a) above.
  4. If holidays are not allowed (e.g. the Holidays field holds a value other than ignore) and the target date falls on a specified holiday:
    1. Then adjust the target date according to the Holidays field value.
    2. If weekend dates are not allowed (e.g. the Weekends field holds a value other than Ignore) and the target date falls on a Saturday or Sunday, then adjust the target date in the same direction as 4(a) above.
    3. if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 4(a) above.
    4. Step 4 is repeated until the target date is not adjusted.

🔹 Data.Fees[].LastDay

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field is used to resolve ambiguitiess in subsequent fee dates when the Date falls on the last day of a month with fewer than 31 days. If the value of the Date field is not a valid date, then the value of this field is ignored. If the value of the Term field is 1, then the value of this field is ignored.

Set this field's value to true if the intent was to make subsequent fees occur on the last day of the month. A value of false indicates that subsequent fee dates will fall on the day number specified by the Date field.

As an example, if the calling application specifies a Date of 2010-02-28, then subsequent fee dates for a monthly fee frequency will be:

  • on the 28th of each subsequent month if "LastDay" : false.
  • on the last day of each subsequent month if "LastDay" : true.

🔹 Data.Fees[].MAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this field to true.

Fees which are added to the finance charge (e.g. "AddToFinChg" : true are always considered MAPR fees, regardless of the stated value of this field.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Data.Fees[].Max

TypeRequiredValuesDefault
StringnoCurrency >= 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Min

TypeRequiredValuesDefault
StringnoCurrency >= 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.

🔹 Data.Fees[].Position

TypeRequiredValuesDefault
StringnoDefault, OnAdvance, BeforePmt, InPmt, AfterPmt, NotInPmtDefault

Fees inflence a loan depending on when they are applied.

  • OnAdvance means that the fee is included in the application of an advance.
  • BeforePmt means that when the fee occurs on the same date as a payment, the fee is calculated before the payment amortizes the loan.
  • InPmt means that the fee is included as part of the payment.
  • AfterPmt means that when the fee occurs on the same date as a payment, the payment first amortizes the loan, then the fee is calculated and applied.
  • NotInPmt means that the fee is paid on the same date as a payment but is not reflected in that payment. If the fee has "AddToFinChg" : true, it is called a "Pocket APR" fee; otherwise, it is a straight "Pocket Fee".
  • Default means different things, depending on when the fee occurs:
    • A fee on an advance is treated as if OnAdvance were selected.
    • A fee on a payment is treated as if InPmt were selected.

🔹 Data.Fees[].PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for "payments per year", and in the case of the Fee object, determines the frequency for the fee stream. If the value of the Term field is 1, then the value of this field is ignored.

🔹 Data.Fees[].Round

TypeRequiredValuesDefault
Stringnonearest, up, downnearest

The value of this field, along with the with the Fee.RoundBasis field described below, determine how the amount on which the fee is based upon is to be rounded.

For fee calculation types of OnPrincipal, OnProceeds, OnAmtFin, OnBalance, and OnBalanceFlat, the amount on which the fee is based is fairly self evident: the starting principal balance, proceeds, amount financed, or the outstanding balance at the time that the fee is assessed. Thus, if the calling application requires a fee to be computed based upon 0.35% of the principal balance rounded to the nearest $100, then the fee object would look something like this:

{
  "Fees" : [
    {
      "Name" : "Doc Stamp",
      "CalcType" : "OnPrincipal",
      "Amount" : "0.35",
      "Round" : "nearest",
      "RoundBasis" : "100.00",
      "AddToPrin" : true,
      "AddToFinChg" : false
   }
  ]
}

For the Dollar fee calculation type, the amount on which the fee is based is defined as the fee amount passed into the engine. This allows the calling application to pass in a precomputed fee amount and have the SCE round it as directed. As an example, here is the definition of a dollar fee which is rounded up to the next dollar (the value of the fee below would then be $25 after rounding):

{
  "Fees" : [
    {
      "Name" : "Doc Stamp",
      "CalcType" : "Dollar",
      "Amount" : "24.25",
      "Round" : "up",
      "RoundBasis" : "1.00",
      "AddToPrin" : true,
      "AddToFinChg" : false
   }
  ]
}

For the ServChg fee calculation type, the amount on which the fee is based is defined as the computed service charge amount, as defined by the Amount and ServChgType fields.

🔹 Data.Fees[].RoundBasis

TypeRequiredValuesDefault
StringnoNumber > 0.00.01

When rounding the amount on which the fee is based, the value of this field determines the precision to which rounding is performed. The default value of 0.01 indicates that the rounding should be done to the penny, whereas a value of 100.0 indicates that rounding should take place to the nearest hundred dollars.

🔹 Data.Fees[].SemimonthlyDay

TypeRequiredValuesDefault
StringnoInteger in [0...31]0

When specifying a semimonthly fee stream, the day number on which the first fee is added determines the day number for all of the following odd numbered payments. If you omit this field or specify a value of 0, then the even numbered fees will be generated using the default method within the SCE. If the value of the Term field is 1, then the value of this field is ignored.

If you wish to specify the day number on which even numbered fees fall (overriding the default method used in the SCE), then set the value of this field to the desired day number. Setting the value of this field to 31 will cause all even fees to fall on the last day of the month.

As an example, if you want to specify a semi-monthly $10 fee stream beginning on January 1, 2015 with fees that fall on the 1st and 15th of each month for 48 fees, the object should look something like this:

{
  "Fees" : [
    {
      "Name" : "Test Fee",
      "Date" : "2015-01-01",
      "Amount" : "10.00",
      "Term" : "48",
      "PPY" : "24",
      "SemimonthlyDay" : "15"
   }
  ]
}

🔹 Data.Fees[].ServChgType

TypeRequiredValuesDefault
StringnoNone, ByTerm, ByDaysNone

This field dictates whether or not a fee is treated as a service charge, and if so, determines how the service charge dollar amount is paid off over the term of the loan. If a fee should not be treated as a service charge, then the default value of None should be specified.

  • ByTerm means that the service charge is paid off by dividing the amount by the Term field of the same Fee object.
  • ByDays means that the service charge is paid off on payment dates. The amount of the fee is calculated as the number of days from the previous payment (or advance) divided by the total number of days in the term of the fee.

🔹 Data.Fees[].Term

TypeRequiredValuesDefault
StringnoInteger > 01

The Term field determines the the number of fees to be included at the specified frequency (see Fee.PPY above), after which the fee stream is completed. The default value is 1. If the value of the Date field is not a valid date, then the value of this field is ignored.

🔹 Data.Fees[].Weekends

TypeRequiredValuesDefault
Stringnoignore, prev, near, nextignore

If fee dates (including the specified start Date) are not allowed to fall on a Saturday or Sunday, then set the value of this field to something other than ignore. The meaning of the other three values are defined below:

  • prev - The date will be moved to the Friday before the computed weekend date.
  • near - The date will be moved to the Friday before the computed weekend date if the computed weekend date falls on a Saturday, otherwise it will be moved to the Monday after.
  • next - The date will be moved to the Monday after the computed weekend date.

Note that two other Fee fields can cause the computed dates to be adjusted - AllowFeb29 and Holidays. For a complete description of how these three fields work together, please see the documentation for the Holidays field.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value will be determined by the value of the Country field. For most countries, the default value is 2. If no country code is specified, then the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.Holidays[]

TypeRequired
Array of Stringno

If dates for PmtStream and Fee objects have requested that holidays be skipped (e.g. the Holidays field for the object in question is set to a value other than ignore, then the request must specify each holiday to be considered, with each holiday requiring at least one entry in this Holidays[] array.

The format of the Holidays[] array member must follow one of the three following descriptions:

  • YYYY-MM-DD - A holiday can be defined by sending in a valid date, where YYYY is greater than or equal to 1900, MM is a valid month, and DD is a valid day for the given year and month.
  • 0000-MM-DD - A holiday that occurs annually on the same month and day can be defined by sending in a valid month and day, with the year passed in as 0000. As an example, in the United States of America, Christmas is a Federal holiday celebrated on December 25th of each year. To pass this holiday in to the SCE, the Holidays[] array member would look like "0000-12-25".
  • 0001-MM-PD - A holiday that occurs annually in the same month on a given day of the week (D) in a given position in the month (P) can be defined by sending in a valid month, position, and day of the week, with the year passed in as 0001. The value of D can be from 0 to 6, where 0 = Sunday, 1 = Monday, ..., 6 = Saturday. The value of P can be from 1 to 6, where 1 = 1st, 2 = Second, ..., 5 = 5th, 6 = last. As an example, in the United States of America, Thanksgiving is a Federal holiday celebrated on the 4th (P=4) Thursday (D=4) of November (MM=11) every year. To pass this holiday in to the SCE, the Holiday[] array member would look like "0001-11-44".
  • 0002-NN-NN - A holiday that occurs annually, but can not be expressed using any of the above methods. Currently, the following special holidays are recognized by the SCE:
    • 00-01 - Good Friday
    • 00-02 - Easter Sunday
    • 00-03 - Easter Monday

Fields: None

Objects: None


🟦 Data.MI

TypeRequired
Objectno

The MI object determines if this loan includes one of the supported types of mortgage insurance (MI) -- PMI or FHA. This object contains fields which further specify mortgage insurance options.

NOTE: Mortgage insurance is only supported on equal, balloon, and interest only loan builder requests at this time.

Fields: 🔹CashDown, 🔹LoanAmt, 🔸PropertyValue, 🔹Type

Objects: 🟦 Periodic, 🟥 Rates[], 🟦 UpFront

🔹 Data.MI.CashDown

TypeRequiredValuesDefault
StringnoCurrency >= 00

The CashDown field represents a cash down payment made at closing. If specified and greater than zero, this amount will be deducted from the principal balance. If not specified, the cash down payment will default to zero.

🔹 Data.MI.LoanAmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

This field represents the amount by which the PMI rates are multiplied to produce a level PMI premium. If not specified, then the principal balance will be used to compute the annual premium.

🔸 Data.MI.PropertyValue

TypeRequiredValues
StringyesCurrency >= 0

This field's value represents the appraised property value, and will be used in the calculation of the loan to value ratio.

🔹 Data.MI.Type

TypeRequiredValuesDefault
Stringnofha, pmipmi

This field determines the type of mortgage insurance to include with the loan. If the value of this field is set to fha, then a different MI premium is computed every twelve months based upon the average outstanding principal balance during that same term. The MI calculation adheres strictly to the HUD regulation.

If the value of this field is set to pmi, then each defined MI rate produces a level MI premium based upon the inital loan amount.


🟦 Data.MI.Periodic

TypeRequired
Objectno

The fields of this object determine the conditions when MI is no longer included.

Fields: 🔹DropLTV, 🔹Term, 🔹WarnLTV

Objects: None

🔹 Data.MI.Periodic.DropLTV

TypeRequiredValuesDefault
StringnoNumber - >= 00

The value of this field determines the loan to value ratio at which MI should be removed, and is expressed as a percentage. For example, if you wish to automatically drop MI when the loan to value ratio first equals or falls below 78%, then you would specify "DropLTV" : "78.0".

🔹 Data.MI.Periodic.Term

TypeRequiredValuesDefault
StringnoInteger >= 00

The value of this field represents the the term (in payments) beyond which MI will be removed.

As an example, if mortgage insurance must be removed after the 180th payment, then the calling application should specify

{
  "MI" : {
    "Periodic" : { "Term" : "180"}
 }
}

🔹 Data.MI.Periodic.WarnLTV

TypeRequiredValuesDefault
StringnoNumber - >= 00

The value of this field determines the loan to value ratio at which a warning should be issued, and is expressed as a percentage of LTV (loan to value). For example,if you wish to know when the loan to value ratio first equals or falls below 80%, then you would specify "WarnLTV" : "80.0".


🟥 Data.MI.Rates[]

TypeRequired
Array of Rate Objectsyes

This array if Rate objects defines the rates used to compute MI on the loan. There must be at least one Rate object in the Rates[] array, and there can be more than one if rates are set to switch at a specified payment number.

Fields: 🔸Rate, 🔹Switch

Objects: None

🔸 Data.MI.Rates[].Rate

TypeRequiredValues
StringyesNumber>= 0.0

The value of this field specifies the cost of mortgage insurance per $100 of the loan amount. As an example, a loan computed with a MI rate of $1.50 per $100 would be specified as

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"}
    ]
 }
}

🔹 Data.MI.Rates[].Switch

TypeRequiredValuesDefault
StringnoInteger >= 00

This optional field defines the payment number beyond which the associated MI rate will apply. If not specified, the value will default to zero.

Thus, if there is only a single MI rate, one may omit this field (see example above).

Example of a MI multiple rate structure (use a rate of $1.50 for the first 10 years, with a rate of $0.20 for coverage beyond 10 years):

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"},
      { "Rate" : "0.20" , "Switch" : "120"}
    ]
 }
}

🟦 Data.MI.UpFront

TypeRequired
Objectno

This object determines if there is an up front fee for mortgage insurance, and if so, how it is computer. If this object is not present in the request, then no up front fee will be computed. Note that ZOMP (zero option monthly premium) products do not have an up front fee, which means that this object should be omitted.

Fields: 🔹Paid, 🔹Reduce, 🔹Units, 🔹Value

Objects: None

🔹 Data.MI.UpFront.Paid

TypeRequiredValuesDefault
Stringnoatclosing, bylender, financedatclosing

If the value of this field is set to financed, then the computed up front fee will be added to the principal balance and the finance charge. A value of atclosing will cause the value of the fee to be added to the finance charge alone. Finally, a value of bylender means that the up front fee is to be paid by the lender, hence the value of the fee is not added to either the principal balance nor the finance charge.

🔹 Data.MI.UpFront.Reduce

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the specified number of periodic premiums to include as an up front fee is greater than zero, then this field determines if the term of coverage for PMI will be reduced by the same amount.

🔹 Data.MI.UpFront.Units

TypeRequiredValuesDefault
Stringnomonths, points, yearsmonths

If the Units field is set to months, then UpFront.Value represents the number of periodic MI premiums to be paid at closing.

If the Units field is set to Years, then UpFront.Value represents the number of annual MI premiums to be paid at closing. Many single premium products define the up front fee as a number of years of MI to be paid up front.

Finally, if the Units field is set to Points, then UpFront.Value represents the percentage of principal to be paid up front. As of October 3, 2011, FHA loans use points.

🔹 Data.MI.UpFront.Value

TypeRequiredValuesDefault
StringnoCurrency >= 00

If part of the MI fees are to be paid up front, then value of this field must be grater than zero. How the value of this field is interpreted depends upon the Units field (see below).

The default value of zero means that no up front fee will be computed.


🟦 Data.ODI

TypeRequired
Objectno

If odd days should be treated as a prepaid finance charge or added to the first payment in a manner different from how interest is accruing (see BusinessRules.OddFirstPmt), then the request needs to define how odd days interest is computed and handled using the fields of this object.

Fields: AccrualCode 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

Objects: None

🔹 Data.ODI.AccrualCode

TypeRequiredValuesDefault
Stringno204, 205, 210, 211, 220, 221, 230, 231, 250default

The accrual code defines how the odd days interest is computed. The meaning of the allowed accrual codes is defined below.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

Accrual CodeDescription
204True360/360
205True360/365
210Actual/360
211True365/360
220Actual/365
221True365/365
230Actual/Actual
231Midnight 366
250Actual/Variable Days Per Year

🔹 Data.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application wants the odd days interest to be added to the first payment, then set the value of this field to true. A value of false indicates that the odd days interest will be treated as a prepaid finance charge.

🔹 Data.ODI.AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If any odd days interest should be treated as a financed prepaid fee, then set the value of this field to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCE and the value of AddToPrin will be set to false.

🔹 Data.ODI.AnchorDate

TypeRequiredValuesDefault
StringnoBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This field determines how to arrive at the anchor date. A value of BackUnitPeriod means that the anchor date is one unit period prior to the specified first payment date. A value of BackDaysPerPeriod means that the anchor date is the number of days per period prior to the first payment date. Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 Data.ODI.ForceUnitPeriod

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Some unit period methods will not use a strict unit period interest accrual factor in the period to the first payment. For example, code 302 will count the days to the first payment and divide by 365. For a monthly loan, setting this field to true will use a 1/12 factor instead of Days/365.

🔹 Data.ODI.NoCap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When the odd days interest is financed, setting this field to true prevents interest from being computed on interest. The default is false, which means interest will be computed on interest.

🔹 Data.ODI.UseDailyCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 Data.ODI.UseNegODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If there are negative odd days in the loan, then the value of this field determines if a negative odd days interest fee is computed. If the value of this field is false, then negative odd days fees are not allowed, the SCE will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes and odd days interest credit) when there are negative odd days in a loan.


🟦 Data.PmtStreams[]

TypeRequired
Array of PmtStream Objectsno

Payment streams are defined using the fields of this empty object, including individually defined payments.

Fields: 🔹AllowFeb29, 🔹Amount, 🔹ComputeTerm, 🔸Date, 🔹Holidays, 🔹LastDay, 🔹MinPmt, 🔹PmtType, 🔹PPY, 🔹ReplaceIdx, 🔹SemimonthlyDay, 🔹Term, 🔹Weekends

Objects: None

🔹 Data.PmtStreams[].AllowFeb29

TypeRequiredValuesDefault
Booleannotrue, falsetrue

This field is used when generating payment dates (if any) beyond the specified PmtStreams[].Date. If the value of this field is true, then February 29th is an allowed payment date.

On the other hand, if the value of this field is set to false and a computed date in the given payment stream is scheduled to fall on February 29th, then the scheduled payment date will be altered in one of the following manners:

  • If the number of payments per year is 1, 2, 4, 6, 12, or 24 then the scheduled payment date of February 29 will be moved back one day to February 28. This is the only date that will be adjusted.

  • If the number of payments per year is 26 or 52 then the scheduled payment date of February 29 will be moved forward one day to March 1, and all subsequent payment dates will be a multiple of 7 or 14 days from this date (depending upon the specified payment frequency).

🔹 Data.PmtStreams[].Amount

TypeRequiredValuesDefault
StringnoCurrency, Number + "%", or Number + "%B"0

The value of the Amount field has different meanings depending upon the PmtType selected. Please see the documentation on the PmtType field below for more information on how these two fields work together to define a payment stream.

If the PmtType field is equal to CalcPmt, then the value of this field may be specified as a flat dollar amount (e.g. "Amount" : "250.00") which represents an additional amount to be added to the computed payment (this is also know as a pickup payment), or a percentage of the computed payment (e.g. "Amount" : "200%"), which allows the calling application to specify a double payment, half payment, etc.

If the PmtType field is equal to FixedPmt, then the value of this field may be specified as a flat dollar amount (e.g. "Amount" : "250.00"), a percentage of the principal balance (e.g. "Amount" : "5.25%"), or a percentage of the outstanding balance at the time the payment is made (e.g. "Amount" : "8.125%B").

If the PmtType field is equal to PayInt or PayPrin, then the value of this field may be specified as a flat dollar amount (e.g. "Amount" : "250.00"), a percentage of the principal balance (e.g. "Amount" : "5.25%"), a percentage of the outstanding balance at the time the payment is made (e.g. "Amount" : "8.125%B"), or a percentage of the computed target payment (e.g. "Amount" : "100%C").

If the PmtType field is equal to CalcPmt, then the value of this field may be specified as a flat dollar amount (e.g. "Amount" : "500.00") which will be added to the computed payment, or a percentage of the computed payment (e.g. "Amount" : "200%"), which allows the calling application to specify a double payment, half payment, etc.

🔹 Data.PmtStreams[].ComputeTerm

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If set to true, then the ComputeTerm field is used to inform the Loan module that the calling application is requesting an equal payment "roll to term" loan calculation. In this loan scenario, the calling application specifies the interest rate, amount requested, maximum desired payment amount, and maximum loan term. The Loan module will then compute the shortest loan term to produce an equal payment amount less than or equal to the specified maximum payment.

As an example, the following partial JSON request would direct the Loan module to compute the term for an equal payment loan with an interest rate of 5.00%, an advance of $5,000, a maximum desired payment amount of $300, and a maximum allowed loan term of 60 monthly payments:

{
  "Advances" : [
    {
      "Date" : "2019-01-01",
      "Amount" : "5000.00"
   }
  ],
  "AccrualConfigs" : [
    {
      "Date" : "2019-01-01",
      "IntRate" : "5.000",
      "AccrualCode" : "301"
   }
  ],
  "PmtStreams" : [
    {
      "Date" : "2019-02-01",
      "PmtType" : "FixedPmt",
      "Amount" : "300.00",
      "Term" : "60",
      "ComputeTerm" : true
   }
  ]
}

Note that in the above partial JSON request, the PmtType must be set to FixedPmt, the value of the Amount field is set to the maximum desired payment amount, and the value of the Term field is set to the maximum term allowed.

🔸 Data.PmtStreams[].Date

TypeRequiredValues
StringyesYYYY-MM-DD, NNNN-00-00, 0000-MM-00, or YYYY-MM-00

The Date field for the PmtStream object is generally used to specify the starting date for the payment stream in question. As an example, if the payment stream should begin on Feb. 1, 2021, then the field should be specified as "Date" : "2021-02-01".

For payment frequencies that are monthly multiples, the day number specified in this field specifies the desired day number of all future payments, if this day number does not exceed the number of days in the computed month. As an example, if the first payment is scheduled to be made in February of 2022 and the desired day for all payments is the 30th, then the field would be specified as "Date" : "2022-02-30".

However, to provide power and flexibility to the calling application, the SCE will also understand Date values in the following formats:

  • NNNN-00-00 If you wish to replace a previously defined payment by specifying the payment number (N), use a value of NNNN-00-00. An field value of 0012-00-00 instructs the engine to replace the 12th payment. If the value of the Term field (T) is specified and greater than one, then the Nth through (N+T-1)th payments will be replaced.

Example: To define a stream of 12 interest only payments followed by 48 computed payments, the following JSON could be used:

{
  "PmtStreams" : [
    {
    "Date" : "2014-12-20",
    "PmtType" : "CalcPmt",
    "Term" : "60",
    "PPY" : "12"
   },
    {
    "Date" : "0001-00-00",
    "PmtType" : "PayInt",
    "Term" : "12"
   }
  ]
}
  • 0000-MM-00 If you wish to define monthly replacement payments, use a value formatted as 0000-MM-00, where MM is a two digit month number in [1...12]. A value of 0000-06-00 instructs the SCE to use the defined payment for every payment occurring in the month of June.

Example: To define a stream of 60 payments with every payment in July and August skipped, the following JSON could be used:

{
  "PmtStreams" : [
    {
    "Date" : "2014-12-20",
    "PmtType" : "CalcPmt",
    "Term" : "60",
    "PPY" : "12"
   },
    {
    "Date" : "0000-07-00",
    "PmtType" : "FixedPmt",
    "Amount" : "0"
   },
    {
    "Date" : "0000-08-00",
    "PmtType" : "FixedPmt",
    "Amount" : "0"
   }
  ]
}
  • YYYY-MM-00 If you wish to define replacement payments occurring in a specified year and month, use a value formatted as YYYY-MM-00, where MM is a two digit month number from 01 through 12, and YYYY is a four digit year. A value of 2021-08-00 instructs the SCE to use the defined payment for every payment occurring in August of 2021 (there can be more that one payment if the payment frequency is greater than monthly).

Note: if the value of the Date field is not a valid date (i.e. it is instead of one of the three formats mentioned above), then the LastDay, Term, and PPY fields will be ignored, unless otherwise noted above.*

🔹 Data.PmtStreams[].Holidays

TypeRequiredValuesDefault
Stringnoignore, prev, nextignore

If payment dates (including the specified start date) are not allowed to fall on specified holidays (see the Holidays[] array for more inforation on how to specify holidays), then set the value of this field to something other than ignore. The meaning of the other two values are defined below:

  • prev- The date will be moved to the day before the holiday.
  • next- The date will be moved to the Monday after the holiday.

Note that two other PmtStreams[] fields can cause the computed dates to be adjusted: AllowFeb29 and Weekends. The rules for how these three fields interact are described below in detail.

For every date required in our payment stream, the SCE goes through the following steps:

  1. Generate the next date in our date stream, called the target date.
  2. If February 29th is not allowed and if the target date is 2/29, then adjust the target date forward or backward one day based upon the date generation frequency. If the frequency is a monthly multiple, then the target date is moved backward one day to 2/28. Weekly and biweekly frequencies move the target date forward one day to 3/1.
  3. If weekend dates are not allowed (e.g. the Weekends field holds a value other than ignore) and the target date falls on a Saturday or Sunday:
    1. then adjust the target date according to the field value.
    2. if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 3(a) above.
  4. If holidays are not allowed (e.g. the Holidays field holds a value other than ignore) and the target date falls on a specified holiday:
    1. Then adjust the target date according to the Holidays field value.
    2. If weekend dates are not allowed (e.g. the Weekends field holds a value other than Ignore) and the target date falls on a Saturday or Sunday, then adjust the target date in the same direction as 4(a) above.
    3. if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 4(a) above.
    4. Step 4 is repeated until the target date is not adjusted.

🔹 Data.PmtStreams[].LastDay

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field is used to resolve ambiguitiess in subsequent payment dates when the Date date falls on the last day of a month with fewer than 31 days. If the value of the Date field is not a valid date, then the value of this field is ignored.

Set this field's value to true if the intent was to make subsequent payments occur on the last day of the month. A value of false indicates that subsequent payment dates will fall on the day number specified by the Date.

As an example, if the calling application specifies a Date of 2010-02-28, then subsequent payment dates for a monthly payment frequency will be:

  • on the 28th of each subsequent month if "LastDay" : false.
  • on the last day of each subsequent month if "LastDay" : true.

🔹 Data.PmtStreams[].MinPmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

If specified, this field will dictate a minimum payment. If a calculated payment falls below the specified minimum payment value, then the minimum payment value will be used instead.

When a minimum payment is used, the principal reduction of the loan will be accelerated. In some loan scenarios, this will result in an early payoff of the loan before the specified Term of the payment stream. In this situation, the final payment will always pay off the loan, and will be smaller than the specified minimum payment.

🔹 Data.PmtStreams[].PmtType

TypeRequiredValuesDefault
StringnoFixedPmt, PayInt, PayPrin, CalcPmtCalcPmt

Various types of payment streams may be requested by use of this field. Please note that the meaning of the Amount field changes according to the PmtType selected. Each payment type is detailed below.

  • FixedPmt - the Amount field represents the exact dollar amount of the payment.
  • PayInt - all interest due is to be paid, and the value of the Amount field determines the principal reduction to be applied in addition to the payment of interest. If the value of Amount is zero, then this equates to an interest only payment.
  • PayPrin - the value of Amount is treated as a pure principal reduction amount.
  • CalcPmt - calculate the payment. If the value of the Amount field is greater than zero (but not specified as a percentage), then it is treated as a pickup amount to be paid in addition to the computed payment. If the Amount is expressed as a percentage, then the payment amount will be multiplied by the desired percentage (which allows for double or triple payments, etc.)
  • PmtEsc - When computing an annual rest loan (see the BusinessRules.MYED field), the payment stream needs to specify a PmtType field value of PmtEsc to indicate an escrowed payment.

When two payments occur on the same date, they merge into one payment according to the following rules:

  • PayInt and PayInt - Add the two Amounts together, so long as one is an interest only payment, or if both types use the same method to specify the principal payment amount (e.g. both use fixed dollar amounts, or both us percentages of principal).
  • PayInt and PayPrin - If the same conditions mentioned in the previous case exist, then the Amount of the PayInt event will be increased by the PayPrin Amount. Delete the PayPrin event.
  • PayInt and CalcPmt - Replace the CalcPmt event with the PayInt event.
  • PayInt and FixedPmt - Keep both events separate.
  • CalcPmt and PayPrin - If the PayPrin Amount is specified as a fixed dollar amount, then increase the Amount of the CalcPmt by the PayPrin Amount and delete the PayPrin event.
  • CalcPmt and CalcPmt - Add the Amounts together.
  • CalcPmt and FixedPmt - Replace the CalcPmt event with the FixedPmt event.
  • FixedPmt and PayPrin - If the PayPrin Amount is specified as a fixed dollar amount, then increase the Amount of the FixedPmt by the PayPrin Amount and delete the PayPrin event.
  • FixedPmt and FixedPmt - Keep both events separate.
  • PayPrin and PayPrin - Keep both events separate.

🔹 Data.PmtStreams[].PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for "payments per year", and as one might surmise, determines the payment frequency for the payment stream. If the value of the Date field is not a valid date, then the value of this field is ignored.

🔹 Data.PmtStreams[].ReplaceIdx

TypeRequiredValuesDefault
StringnoInteger >= 0-1

The ReplaceIdx field allows applications to restrict the enforcement of a replacement payment to a specific PmtStream. If specified, the value of ReplaceIdx must be an integer >= 0. If not included in the request, then ReplaceIdx will be set internally to a value of -1, which means that this replacement payment rule will be applied to all matching payments.

If specified, the value of ReplaceIdx represents the numeric index of the PmtStreams[] object to which the replacement payment will only be applied.

Example 1:

{
  "PmtStreams" : [
    {
    "Date" : "2024-01-01",
    "PmtType" : "PayInt",
    "Term" : "36"
   },
    {
    "Date" : "2024-01-01",
    "PmtType" : "PayPrin",
    "Amount" : "1000.00",
    "Term" : "36"
   },
    {
    "Date" : "0000-01-00",
    "PmtType" : "FixedPmt",
    "ReplaceIdx" : "1"
   },
    {
    "Date" : "0000-03-00",
    "PmtType" : "FixedPmt",
    "ReplaceIdx" : "1"
   },
    {
    "Date" : "0000-04-00",
    "PmtType" : "FixedPmt",
    "ReplaceIdx" : "1"
   }
  ]
}

In the example above, the first PmtStream with a PmtType of PayInt has an index of 0, with the PayPrin payment stream having an index of 1, etc.

All three replacement payment streams (with indexes of 2, 3, and 4) indicate that they are targeting the PayPrin payment stream only by specifying "ReplaceIdx" : "1". Also note that once the replacement payments are applied to the applicable payments, those payments will no longer be considered to be a part of the original payment stream, but instead will be considered to be a part of the replacement payment stream that was applied.

Example 2:

Assume we wanted to build a repayment schedule of 24 interest only payments, followed by 36 computed equal payments. Also, assume that we wanted to skip the interest only payments made in December. Then, we could build a request in the following manner:

{
  "PmtStreams" : [
    {
    "Date" : "2024-06-01",
    "PmtType" : "CalcPmt",
    "Term" : "60"
   },
    {
    "Date" : "0001-00-00",
    "PmtType" : "PayInt",
    "Term" : "24"
   },
    {
    "Date" : "0000-12-00",
    "PmtType" : "FixedPmt",
    "ReplaceIdx" : "1"
   }
  ]
}

Above, PmtStreams[0] sets up the basic repayment schedule with 60 computed equal payments. Then, PmtStreams[1] replaces payments 1-24 with interest only payments. Finally, PmtStreams[2] replaces the December payment in the interest only period with a skipped payment.

If you are creating overlapping payment streams with payments that fall on the same day, then we recommend that you set the value of the Merge field of the EditOutput object to false. If Merge is left at its default value of true, merging of payments occurs before replacement payments are enforced, thus making targeting a given payment stream much more difficult if they are merged with a payment from a second payment stream.

🔹 Data.PmtStreams[].SemimonthlyDay

TypeRequiredValuesDefault
StringnoInteger in [0...31]0

When specifying a semimonthly payment stream, the day number on which the first payment is made determines the day number for all of the following odd numbered payments. If you omit this field or specify a value of 0, then the even numbered payments will be generated using the default method within the SCE.

If you wish to specify the day number on which even numbered payments fall (overriding the default method used in the SCE), then set the value of this field to the desired day number. Setting the value of this field to 31 will cause all even payments to fall on the last day of the month.

As an example, if you want to specify a semi-monthly payment stream beginning on January 1, 2019 with payments that fall on the 1st and 15th of each month for 24 payments, the object should look something like this:

{
  "PmtStreams" : [
    {
      "Date" : "2019-01-01",
      "Term" : "24",
      "PPY" : "24",
      "SemimonthlyDay" : "15"
   }
  ]
}

🔹 Data.PmtStreams[].Term

TypeRequiredValuesDefault
StringnoInteger > 01

The term field indicates the the number of payments to be made at the specified payment frequency (see PmtStream.PPY above), after which the payment stream is completed. The default value is 1. If the value of the PmtStream.Date field is not a valid date, then the value of this field is ignored, unless it is a replacement payment using the NNNN-00-00 date format.

🔹 Data.PmtStreams[].Weekends

TypeRequiredValuesDefault
Stringnoignore, prev, near, nextignore

If payment stream dates (including the specified start Date) are not allowed to fall on a Saturday or Sunday, then set the value of this field to something other than ignore. The meaning of the other three values are defined below:

  • prev - The date will be moved to the Friday before the computed weekend date.
  • near - The date will be moved to the Friday before the computed weekend date if the computed weekend date falls on a Saturday, otherwise it will be moved to the Monday after.
  • next - The date will be moved to the Monday after the computed weekend date.

Note that two other PmtStreams[] fields can cause the computed dates to be adjusted - AllowFeb29 and Holidays. For a complete description of how these three fields work together, please see the documentation for the Holidays field.


🟦 Data.Protection

TypeRequired
Objectno

If the calling application wishes to add any payment protection products to the loan (e.g. credit insurance or debt protection), then this object and at least one Product object in the Products[] array must be present.

Fields: 🔹Protection.DataPath, 🔹Protection.ShowDataPath

Objects: 🟦 Products[]

🔹 Data.Protection.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.Protection.ShowDataPath

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field determines if the data directory path used in the calculation of the loan will be disclosed in the response as a field of the Protection object.


🟦 Data.Protection.Products[]

TypeRequired
Array of Product Objectsno

For each distinct payment protection product that the calling application wishes to add to the loan, a Product object is required.

As an example, if a loan was requested with single decreasing life, single disability, single involuntary unemployment, and joint property insurances, then the input JSON detailing the protection requests would look similar to the following:

{
  "Protection" : {
    "Products" : [
      {
        "Code" : "LI",
        "Birthdays" : [
          "1966-04-16"
        ]
     },
      {
        "Code" : "AH",
        "Birthdays" : [
          "1966-04-16"
        ]
     },
      {
        "Code" : "IU",
        "Birthdays" : [
          "1966-04-16"
        ]
     },
      {
        "Code" : "PP",
        "Birthdays" : [
          "1966-04-16",
          "1969-11-21"
        ]
     }
    ]
 }
}

Fields: 🔹Account, 🔹Benefit, 🔸Birthdays[], 🔸Code, 🔹Coverage, 🔹Dismemberment, 🔹Financed, 🔹Method, 🔹ShowFactor, 🔹Table, 🔹Term, 🔹TermUnits, 🔹UseLevelRates

Objects: None

🔹 Data.Protection.Products[].Account

TypeRequiredValuesDefault
StringnoInteger > 01

This field specifies the account number that will be used to define the requested product. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which define the product and how it is calculated, such as the insurance rates, caps, formulas used, etc. If this field is not specified, a default value of 1 will be used.

🔹 Data.Protection.Products[].Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, or if the product itself does not have the notion of a monthly benefit (such as life and property products), then this field will be ignored.

🔸 Data.Protection.Products[].Birthdays[]

TypeRequiredValues
Array of StringyesYYYY-MM-DD

This array contains the date of birth for one or two borrowers requesting a payment protection product. The type of coverage provided (e.g. single or joint) is determined by the number of members in the array. Thus, to request single accident and health coverage, the Product object (with "Code" : "AH") requires a Birthdays[] array with a single birthday element containing the birthday of the borrower seeking coverage. Similarly, to request joint decreasing life coverage, the Product object (with "Code" : "CL") requires a Birthdays[] array with two elements, each of which contains the birthday of a borrower seeking coverage.

Since the type of coverage depends upon the number of elements present in the array, at lease one must appear and no more than two are allowed (as the only coverage options are single or joint).

All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔸 Data.Protection.Products[].Code

TypeRequiredValues
StringyesLI, AH, IU, PP

This field defines the type of payment protection product, and which setup files are references for calculation, rate, and cap purposes. In the description of each product below, "NNNN" is the Account number (see above, an account number of 1 would thus be "0001").

  • LI - The requested product is treated as decreasing credit life and will reference the clNNNN.ini setup file.
  • AH - The requested product is treated as accident and health and will reference the ahNNNN.ini setup file.
  • IU - The requested product is treated as involuntary unemployment and will reference the iuNNNN.ini setup file.
  • PP - The requested product is treated as property insurance and will reference the `ppNNNN.ini setup file.

🔹 Data.Protection.Products[].Coverage

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a coverage amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum coverage amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified coverage amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Products[].Dismemberment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer life protection products with optional dismemberment coverage, and if the optional dismemberment coverage is desired, then set this field's value to true. Otherwise, use the default value of false.

🔹 Data.Protection.Products[].Financed

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Single premium protection products are typically financed (added to the principal balance). If you wish to have the premiums paid up front at loan cloasing, then set the value of this field to false.

🔹 Data.Protection.Products[].Method

TypeRequiredValuesDefault
StringnoDefault, Gross, Net, Level, MOB, TrueMOB, CunaSP, OrdinaryLifeDefault

Some accounts are configured to offer different types of credit life products (usually gross and net). In these accounts, this field allows the calling application to specify which method to use for a given loan. If no method is present in the request, then the default method will be used.

🔹 Data.Protection.Products[].ShowFactor

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to true, then the Product.Cost response object (member of the Products[] array) will include a Factor field which is useful to J. L. Sherman and Associates when debugging protection calculations.

🔹 Data.Protection.Products[].Table

TypeRequiredValuesDefault
StringnoInteger > 01

When requesting the accident and health product (e.g. the Code field is set to AH), if the specified account has been set up with multiple disability or debt cancellation plans, then this field determines which plan number will be used. The value of the Table field must be an integer in [1...20]. If no table number is specified, the first table will be used.

If the requested product Code is not AH, then this field is ignored.

🔹 Data.Protection.Products[].Term`

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Products[].TermUnits

TypeRequiredValuesDefault
StringnoPmts, MonthsPmts

The specified numeric coverage term (see Term field, above) will be interpreted as a number of payments or months, depending upon the value of this field.

🔹 Data.Protection.Products[].UseLevelRates

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer single premium credit life using level rates instead of the normal decreasing rates, and if you wish to use level rates instead of decreasing, then set this field's value to true. Otherwise, use the default value of false.


🟦 Data.TILARESPA2015

TypeRequiredValuesDefault
Boolean or Objectnosee belowfalse

If the value of this field is true, then the SCE will include data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015. If the field is omitted or set to false, then the TILA RESPA outputs will not be generated.

The TILARESPA2015 field may also be passed in as an object, with "TILARESPA2015" : {} equivalent to "TILARESPA2015" : true.

Fields: 🔹MaxPnIDetails, 🔹MinPnIDetails

Objects: None

🔹 Data.TILARESPA2015.MaxPnIDetails

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the loan is an ARM and has a specified a maximum lifetime interest rate (see ARM.Limits.Ceiling), and if the calling application requires the principal and interest breakdown for each MaxPnI payment returned in the amortization schedule, then set the value of this field to true.

Doing so will return MaxInt and MaxPrin fields of the AmLine object associated with each MinPnI payment. object associated with each MaxPnI payment.

🔹 Data.TILARESPA2015.MinPnIDetails

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the loan is an ARM and has specified a minimum lifetime interest rate (see ARM.Limits.Floor), and if the calling application requires the principal and interest breakdown for each MinPnI payment returned in the amortization schedule, then set the value of this field to true.

Doing so will return MinInt and MinPrin fields of the AmLine object associated with each MinPnI payment.


Loan Module - Response

The Data object for a response from the Loan module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data🔹Country, 🔹CurrencyDP
|- 🟥 Errors[]
|- 🟥 Warnings[]
|- 🟥 Notes[]
|- 🟦 FedBox🔸AmtFin, 🔸FinChg, 🔸TotPmts
|- |- 🟦 TAP🔸Value, 🔹PrepaidNF, 🔹Pocket, 🔹PocketAPR
|- |- 🟥 APR🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type
|- |- 🟦 MAPR🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded
|- 🟦 TILARESPA2015🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP
|- |- 🟥 LoanCosts[]🔹Name, 🔹In5Years, 🔸Value
|- |- 🟥 In5Years🔸PaidTotal, 🔸PaidPrincipal
|- |- 🟥 MaxPnIPmt🔸Date, 🔸Amount
|- |- 🟥 MinRate🔸Rate, 🔸Idx
|- |- 🟥 MaxRate🔸Rate, 🔸Idx
|- |- 🟥 ProjectedPaymentsTable[]🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax
|- 🟦 Moneys🔸Proceeds, 🔸Principal, 🔹Interest, 🔹FinFees, 🔹Prepaid, 🔹OthNonAprFees, 🔹ServiceChg, 🔹PocketFees, 🔹MAPRFees, 🔹BalAdjTot, 🔹MinIntChgAdj, 🔹MinFinChgAdj, 🔹MortIns
|- |- 🟦 ODI🔸Count, 🔹Months, 🔹DailyCost, 🔹AddToPmt, 🔸Fee
|- |- 🟦 Advances[]🔸Date, 🔸Amount
|- |- 🟦 Fees[]🔹Name, 🔸Fee
|- |- 🟦 ConInterest🔸IsPrepaid, 🔸Amount
|- 🟥 Accrual🔸Methods[], 🔹YieldPPY, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity
|- 🟥 PmtStreams[]🔹Idx, 🔸Term, 🔸Pmt, 🔹IsSplitRate, 🔹Rate, 🔸Begin, 🔹PPY
|- 🟦 MI🔹UpFront
|- |- 🟥 Rates[]🔸Rate, 🔸PremPerYear, 🔸PremPerPeriod
|- |- 🟦 Periodic🔸LTV,🔸IndexToWarn,🔸IndexToDrop
|- 🟦 Protection🔸LoanType, 🔹Path
|- |- 🟥 Products[]🔸Code, 🔸Result, 🔸Abbrev, 🔸Name, 🔹IsDP, 🔹Table, 🔹Formula, 🔹RateType, 🔹DropCode, 🔹DropReason
|- |- |- 🟦 Notes[]🔸Code, 🔸Note
|- |- |- 🟦 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Rate, 🔹Factor
|- |- |- 🟦 Coverage🔸Amount, 🔸Code, 🔸Note
|- |- |- 🟦 Benefit🔸BenMon, 🔸BenPer, 🔸Code, 🔸Note
|- |- |- 🟦 Borrowers[]🔸Birthday, 🔸Pmts, 🔸Months, 🔹AmMonths, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Maturity, 🔸Code, 🔸Note
|- |- |- 🟦 Caps🔹Coverage, 🔹Benefit, 🔹BenPer, 🔹Term, 🔹TermPer, 🔹InceptAge, 🔹AttainAge
|-🟦 AmTable🔹AvgBal, 🔹Months, 🔹Weeks, 🔹OddDays
|- |- 🟦 GrandTotals🔸PmtTot, 🔸IntTot, 🔸PrinTot
|- |- 🟦 SubTotals[]🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub
|- |- 🟦 AmLines[]🔸Idx, 🔹Type, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹FeeTot, 🔹ProtUnpaid, 🔹PmtEsc, 🔹MI, 🔹UnpaidInt, 🔸EndBal, 🔹MinPnI, 🔹MinInt, 🔹MinPrin, 🔹MaxPnI, 🔹MaxInt, 🔹MaxPrin

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔹Country, 🔹CurrencyDP

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Notes[], 🟦 FedBox, 🟦 TILARESPA2015, 🟦 Moneys, 🟥 Accrual, 🟥 PmtStreams[], 🟦 Protection, 🟦 AmTable

🔹 Data.Country

TypeRequiredValueDefault
StringnoStringn/a

If the request specified a two-character or three-digit Country code, then this field will be present and will contain the full name of the country associated with the specified code. Please see the Countries Appendix for the list of supported countries and their associated codes.

🔹 Data.CurrencyDP

TypeRequiredValueDefault
Stringno0, 22

If the number of decimal places allowed for currency values used in the request is a value other than 2, then this field will be present and will inform the application parsing the output of the correct value. If this field is not present, then the number of decimal places allowed for currency values used in the request is 2.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an Array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an Array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Loan",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
 }
}
{
  "Result" : 200,
  "Module" : "Loan",
  "Data" : {
    "Errors" : [
      "Data.Advances[] (Array) not found.",
      "Data.AccrualConfigs[] (Array) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
 }
}

🟥 Data.Notes[]

TypeRequired
Array of Stringyes

The Notes[] field contains an Array of Strings which present important calculation comments to more fully explain the loan calculation results that may either not be apparant in the inputs or have overriden input assumptions. These notes are thoroughly detailed in the Calculation Notes Appendix.


🟦 Data.FedBox

TypeRequired
Objectno

This object groups together all fields which contain important numerical information, as defined in the Truth-In-Lending laws (Regulation Z). This object will not be present if BusinessRules.AmortizeOnly is set to true in the request.

Fields: 🔸AmtFin, 🔸FinChg, 🔸TotPmts

Objects: 🟦 TAP, 🟥 APR, 🟦 MAPR

🔸 Data.FedBox.AmtFin

TypeRequiredValue
StringyesCurrency > 0.0

The Regulation Z Amount Financed, which is defined as the amount of credit provided to the borrower or on their behalf.

🔸 Data.FedBox.FinChg

TypeRequiredValue
StringyesCurrency > 0.0

This element contains the Regulation Z Finance Charge, described as the dollar amount the credit extension will cost the borrower.

🔸 Data.FedBox.TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

The amount which the borrower will have paid when the borrower has made all scheduled payments.


🟦 Data.FedBox.TAP

TypeRequired
Objectno

The TAP (total amount payable) object is only returned with the response if the value of the EditOutput.ShowTap request field is true.

Fields: 🔸Value, 🔹PrepaidNF, 🔹Pocket, 🔹TAP.PocketAPR

Objects: None

🔸 Data.FedBox.TAP.Value

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field represents the total amount payable, and is computed as the sum of: (i) the total of payments, (ii) all non-financed APR affecting fees, (iii) all out-of-pocket non-APR affecting fees, and (iv) all out-of-pocket APR affecting fees.

🔹 Data.FedBox.TAP.PrepaidNF

TypeRequiredValueDefault
StringnoCurrency > 0.00

The value of this field is the sum of all non-financed APR prepaid fees (APR affecting fees paid on the same date as an advance). This field will only be present if the value is greater than zero.

🔹 Data.FedBox.TAP.Pocket

TypeRequiredValueDefault
StringnoCurrency > 0.00

The value of this field is the sum of all out-of-pocket non-APR affecting fees. This field will only be present if the value is greater than zero.

🔹 Data.FedBox.TAP.PocketAPR

TypeRequiredValueDefault
StringnoCurrency > 0.00

The value of this field is the sum of all out-of-pocket APR affecting fees not paid on an advance. This field will only be present if the value is greater than zero.


🟥 Data.FedBox.APR

TypeRequired
Objectyes

The APR object contains fields which return the value and APR method used.

Fields: 🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type

Objects: None

🔸 Data.FedBox.APR.Value

TypeRequiredValue
StringyesNumber

The computed APR, which is the cost of the extension of credit expressed as a yearly rate.

🔹 Data.FedBox.APR.Max

TypeRequiredValueDefault
StringnoNumbern/a

This field holds the maximum APR as specified in the input request (see Apr.Max). If not specified, this field (and the associated MaxExceeded field) will not be present in the response. The value of this field should be displayed as a percentage. As an example, for "Max" : "24.000", you would disclose a maximum APR of 24%.

🔹 Data.FedBox.APR.MaxExceeded

TypeRequiredValueDefault
Booleannotrue, falsen/a

The value of this field indicates whether or not the current loan exceeds the specified maximum APR. As an example, if the maximum APR has been set to 24% and the APR for the returned loan was 25.512%, the APR object would be:

{
  "APR" : {
    "Value" : "25.512",
    "Max" : "24.000",
    "MaxExceeded" : true,
    "Type" : "Actuarial"
 }
}

🔸 Data.FedBox.APR.Type

TypeRequiredValue
StringyesText

This field returns the APR method used to compute the reported APR.


🟦 Data.FedBox.MAPR

TypeRequired
Objectno

The MAPR (military APR) object is only returned with the response if the value of the Apr.UseMAPR request field is true.

Fields: 🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded

Objects: None

🔸 Data.FedBox.MAPR.Value

TypeRequiredValue
StringyesNumber

The computed military APR.

🔸 Data.FedBox.MAPR.Advance

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the equivalent of the Amount Financed for the Military APR. Specifically, it is the principal balance less any MAPR fees, debt protection, etc.

🔸 Data.FedBox.MAPR.Max

TypeRequiredValue
StringyesNumber

This field holds the maximum Military APR as specified in the input XML (see Apr.MAPR_Max). If not specified, a default value of 36% is assumed. The value of this field should be displayed as a percentage. As an example, for "Max" : "36.000", you would disclose a maximum Military APR of 36%.

🔸 Data.FedBox.MAPR.MaxExceeded

TypeRequiredValue
Booleanyestrue, false

The value of this field indicates whether or not the current loan exceeds the maximum allowed Military APR. As an example, if the maximum APR has been set to 36% and the Military APR for the returned loan was 37.125%, the MAPR object would be:

{
  "MAPR" : {
    "Value" : "37.125",
    "Advance" : "1350.00",
    "Max" : "36.000",
    "MaxExceeded" : true
 }
}


🟦 Data.TILARESPA2015

TypeRequired
Objectno

This object contains fields which are of interest to fulfilling the 2015 TILA RESPA rule. It will only be present if the TILARESPA2015 field in the request is set to true. If the business rule, AmortizeOnly, is set to True, this object will not be present.

Fields: 🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP

Objects: 🟥 LoanCosts[], 🟥 In5Years, 🟥 MaxPnIPmt, 🟥 MinRate, 🟥 MaxRate, 🟥 ProjectedPaymentsTable[]

🔸 Data.TILARESPA2015.TotalLoanCost

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field is the sum of all borrower paid loan costs. Since all LoanCost values are rounded dollar amounts, the value of this element will also be a rounded dollar amount.

🔸 Data.TILARESPA2015.CD_TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the sum of the total of payments, all borrower paid loan costs, and any odd days interest that is prepaid at loan closing. This value should be disclosed on the Closing Disclosure form in the Total of Payments field.

🔸 Data.TILARESPA2015.TIP

TypeRequiredValue
StringyesNumber

The total interest percentage, rounded to three or fewer decimal places - as required.


🟥 Data.TILARESPA2015.LoanCosts[]

TypeRequired
Array of LoanCost objectsyes

For every object in the Fees[] array present in the request which has its IsLoanCost field set to true (and hence, is a borrower paid loan cost) and whose amount is greater than zero (except odd days interest fee types, as explained in the previous documentation of the Fee and object), there will be a corresponding LoanCost object.

Fields: 🔹Name, 🔹In5Years, 🔸Value

Objects: None

🔹 Data.TILARESPA2015.LoanCosts[].Name

TypeRequiredValueDefault
StringnoTextn/a

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔹 Data.TILARESPA2015.LoanCosts[].In5Years

TypeRequiredValueDefault
StringnoCurrency >= 0Same as Value

If the entire amount of the fee is different from the amount collected over the first five years (for example, a service charge), then this field will be present and disclose the portion of this loan coast that is accrued during the first five years.

🔸 Data.TILARESPA2015.LoanCosts[].Value

TypeRequiredValue
StringyesCurrency >= 0

The value of this field is the numerical value of the fee, rounded to the nearest dollar.


🟥 Data.TILARESPA2015.In5Years

TypeRequired
Objectyes

This object contains all important values required for the new "In 5 Years" section of the disclosure.

Fields: 🔸PaidTotal, 🔸PaidPrincipal

Objects: None

🔸 Data.TILARESPA2015.In5Years.PaidTotal

TypeRequiredValue
StringyesCurrency >= 0

This field holds the sum of all "principal, interest, mortgage insurance, and borrower paid loan costs scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.

🔸 Data.TILARESPA2015.In5Years.PaidPrincipal

TypeRequiredValue
StringyesCurrency >= 0

This field holds "the principal scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.


🟥 Data.TILARESPA2015.MaxPnIPmt

TypeRequired
Objectyes

The fields of this object hold the maximum sceduled principal and interest payment during the term of the loan, as well as the date on which that payment is made.

Fields 🔸Date, 🔸Amount

Objects: None

🔸 Data.TILARESPA2015.MaxPnIPmt.Date

TypeRequiredValue
DateyesYYYY-MM-DD

The value of this field returns the date on which the maximum scheduled principal and interest payment is made. If the maximum scheduled payment occurs more than once, then the date returned is that of the first instance.

🔸 Data.TILARESPA2015.MaxPnIPmt.Amount

TypeRequiredValue
StringyesCurrency >= 0

The maximum sceduled principal and interest payment during the term of the loan.


🟥 Data.TILARESPA2015.MinRate

TypeRequired
Objectyes

The fields of this object hold information regarding the minimum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MinRate.Rate

TypeRequiredValue
StringyesNumber

The value of the minimum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MinRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the minimum rate is first applicable.


🟥 Data.TILARESPA2015.MaxRate

TypeRequired
Objectyes

The fields of this object hold information regarding the maximum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MaxRate.Rate

TypeRequiredValue
StringyesNumber

The value of the maximum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MaxRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the maximum rate is first applicable.


🟥 Data.TILARESPA2015.ProjectedPaymentsTable[]

TypeRequired
Array of PPCol objectsyes

Fields: 🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax

Objects: None

This field returns an Array of projected payment table columns (PPCol), with each array member detailing a single column. Per the regulation, there will be a minimum of one column and a maximum of four columns, depending upon the parameters of the loan.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Num

TypeRequiredValue
StringyesInteger in [1...4]

The value of this field identifies the number of the column to which the following fields apply. The value will be from 1 to 4.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Title

TypeRequiredValue
StringyesText

The value of this field is the title for the column. Most of the time, it will be in the form of Years X - Y, or Year X, or Final Payment in the case of a final balloon payment.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearStart

TypeRequiredValue
StringyesInteger

The beginning year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearEnd

TypeRequiredValue
StringyesInteger

The ending year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMin

TypeRequiredValue
StringyesCurrency > 0

The minimum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMax

TypeRequiredValue
StringyesCurrency > 0

The maximum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].IntOnly

TypeRequiredValue
Stringyesnone, some, all

If none of the payments associated with this column are interest only payments, then the value of this field will be none. A value of some means that some of the payments (but not all) associated with this columnt are interest only. Finally, a value of all indicates that all payments associated with this columnt are interest only.

Note that for the purposes of this field, a scheduled payment is considered an interest only payment if the payment amount pays off all interest due at the time of the payment, with no reduction in the principal balance.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Balloon

TypeRequiredValue
Booleanyestrue, false

If any of the payments associated with this column are balloon payments (e.g. isolated payments that are more than twice the value of a regular periodic payment), then the value of this field will be true.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].MIPmt

TypeRequiredValue
StringyesCurrency > 0

The value of this field holds the mortgage insurance premium associated with this column, rounded to the nearest dollar. If no mortgage insurance is present or coverage has been dropped, a value of zero will be present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMin

TypeRequiredValue
StringyesCurrency > 0

This field returns the minimum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMax

TypeRequiredValue
StringyesCurrency > 0

This field returns the maximum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.


🟦 Data.Moneys

TypeRequired
Objectno

This element groups together those other major cash result amounts not disclosed under the FedBox object, such as the principal balance, interest charge, and fee amounts. This object will not be present if BusinessRules.AmortizeOnly is set to true in the request.

Fields: 🔸Proceeds, 🔸Principal, 🔸Interest, 🔹FinFees, 🔹Prepaid, 🔹OthNonAprFees, 🔹ServiceChg, 🔹PocketFees, 🔹MAPRFees, 🔹BalAdjTot, 🔹MinIntChgAdj, 🔹MinFinChgAdj, 🔹MortIns

Objects: 🟦 ODI, 🟦 Advances[], 🟦 Fees[], 🟦 ConInterest

🔸 Data.Moneys.Proceeds

TypeRequiredValue
StringyesCurrency > 0

This field represents the sum of all Advance amounts.

🔸 Data.Moneys.Principal

TypeRequiredValue
StringyesCurrency > 0

The principal balance is the amount on which interest is accrued. The principal balance consists of all advances requested by the borrower, as well as any fees and/or protection products which are financed.

🔸 Data.Moneys.Interest

TypeRequiredValue
StringyesCurrency > 0

This value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments. This field may be less than zero if the interest rate is less than zero. If the business rule, AmortizeOnly, is set to True, this field will not be present.

🔹 Data.Moneys.FinFees

TypeRequiredValueDefault
StringnoCurrency >= 00

This field contains the sum of all fees having AddToPrin set to true and occuring on the date of an advance. If this value is zero, the field will not appear in the response.

🔹 Data.Moneys.Prepaid

TypeRequiredValueDefault
StringnoCurrency >= 00

This field represents all prepaid finance charges and contains the sum of all fees occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will not be found in the response.

🔹 Data.Moneys.OthNonAprFees

TypeRequiredValueDefault
StringnoCurrency >= 00

This field contains the sum of all fees having AddToPrin set to true not occuring on the date of an advance. If this value is zero, the field will not be present in the response.

🔹 Data.Moneys.ServiceChg

TypeRequiredValueDefault
StringnoCurrency >= 00

This field represents all service charge fees and contains the sum of all fees not occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will be omitted from the response.

🔹 Data.Moneys.PocketFees

TypeRequiredValueDefault
StringnoCurrency >= 00

This field holds the sum of all fees which are neither financed, nor added to the finance charge. In essence, they are paid out of the borrower's pocket. If no out of pocket fees were requested, then this field will not show up in the response.

🔹 Data.Moneys.MAPRFees

TypeRequiredValueDefault
StringnoCurrency >= 00

This field holds the sum of all fees which are Military APR fees (including protection products), and will only appear if the Military APR has been requested.

🔹 Data.Moneys.BalAdjTot

TypeRequiredValueDefault
StringnoCurrency >= 00

This field holds the sum of all balance adjustments occuring during the course of a loan. This field holds the sum of all actual dollar adjustment amounts, not Target amounts.

🔹 Data.Moneys.MinIntChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 00

When a minimumm interest charge is assigned as a BusinessRule using the BusinessRules.MinIntChg field, the adjustment required to achieve that objective is shown in this field.

🔹 Data.Moneys.MinFinChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 00

When a minimum finance charge is assigned as a BusinessRule using the BusinessRules.MinFinChg field, the adjustment required to achieve that objective is shown in this field.

🔹 Data.Moneys.MortIns

TypeRequiredValueDefault
StringnoCurrency >= 00

This field holds the total mortgage insurance fee, if not single premium. If mortgage insurance is not requested, or if it is requested but is not treated as single premium, then this field will not be included in the response.


🟦 Data.Moneys.ODI

TypeRequired
Objectno

This object, if present, contains information regarding odd days interest. If no odd days interest was requested, then this object will not be present in the response.

Fields: 🔸Count, 🔹Months, 🔹DailyCost, 🔹AddToPmt, 🔸Fee

Objects: None

🔸 Data.Moneys.ODI.Count

TypeRequiredValue
StringyesInteger

Discloses the number of odd days computed by the SCE for the requested loan.

🔹 Data.Moneys.ODI.Months

TypeRequiredValueDefault
StringnoIntegern/a

This field holds the number of odd months computed by the SCE for the requested loan when using odd days accrual method 250. If the odd days accrual method is a value other than 250, then this field will not be present in the ODI object of the response.

🔹 Data.Moneys.ODI.DailyCost

TypeRequiredValueDefault
StringnoCurrencyn/a

If the odd days interest fee is computed using a rounded daily cost, then the value of this field will hold that value. If the odd days interest is not computed using a rounded daily cost, then this field will not be present in the response.

🔹 Data.Moneys.ODI.AddToPmt

TypeRequiredValueDefault
Booleannotrue, falsen/a

If the odd days interest has been added to the first payment, then this field will be present in the response with a value of true. If the odd days interest has been treated as a prepaid finance charge, then this field will not be present and a default value of false should be assumed.

🔸 Data.Moneys.ODI.Fee

TypeRequiredValue
StringyesCurrency

Discloses the total amount odd days interest charge.


🟦 Data.Moneys.Advances[]

TypeRequired
Array of Advance objectsno

If the requested loan computed any advance amounts (see the Advance.Compute field for more information), then for each Advance in the loan there will be an Advance object in this array containing the date of the advance and the computed advance amount.

If all of the loan's advances were specified and not computed, then this array will not be included in the response.

Fields: 🔸Date, 🔸Amount

Objects: None

🔸 Data.Moneys.Advances[].Date

TypeRequiredValue
StringyesYYYY-MM-DD

The date on which the advance is made.

🔸 Data.Moneys.Advances[].Amount

TypeRequiredValue
StringyesCurrency

Discloses the computed advance amount.


🟦 Data.Moneys.Fees[]

TypeRequired
Array of Fee objectsno

If the requested loan computed any requested fees with the loan, and if EditOutput.ShowFees is set to true, then for each Fee in the loan request there will be a Fee object in this array containing the name of the fee and the computed fee amount.

If there were no fees requested with the loan, or if EditOutput.ShowFees is set to false, then this array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.Fees[].Name

TypeRequiredValue
StringnoText

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.Fees[].Fee

TypeRequiredValue
StringyesCurrency

Discloses the computed fee amount.


🟦 Data.Moneys.ConInterest

TypeRequired
Objectno

This object holds the total estimated interest accrued during the construction period, and how the construction interest is treated in the disclosure. If no construction period was specified, then this object will not be present in the output.

Fields: 🔸IsPrepaid, 🔸Amount

Objects: None

🔸 Data.Moneys.ConInterest.IsPrepaid

TypeRequiredValue
Booleanyestrue, false

If the construction interest is disclosed as interest only payments in the amortization schedule, then the value of this field will be set to false. Otherwise, the value of this field will be set to true.

🔸 Data.Moneys.ConInterest.Amount

TypeRequiredValue
StringyesCurrency

Discloses the total amount of estimated interest accrued during the construction period.


🟥 Data.Accrual

TypeRequired
Objectyes

This object groups together interest accrual information, such as the accrual method(s) used, days to the first payment and the loan's maturity date.

Fields: 🔸Methods[], 🔹YieldPPY, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity

Objects: None

🔸 Data.Accrual.Methods[]

TypeRequiredValue
Array of Stringyesdescription of accrual method(s) used

Each array member contains a textual description of the interest accrual method used to compute the loan (e.g. "Unit Period 365 Simple").

🔹 Data.Accrual.YieldPPY

TypeRequiredValueDefault
StringnoInteger >= 0n/a

If BusinessRules.YieldPPY in the loan's request is set to a value other than 0, then this field will be returned in the response with the same value passed into the request.

🔸 Data.Accrual.Days1Pmt

TypeRequiredValue
StringnoInteger >= 0

This field contains the number of days between the date of the first advance and the date of first payment, computed by one of three methods as specified in by Accrual.DayCount.

🔸 Data.Accrual.DayCount

TypeRequiredValue
StringyesTrue360, True365, Actual

This field specifies the method used to compute the number of days from the date of the first advance until the first payment date. Actual means that the actual number of days between these two dates are used, whereas the True360 and True365 methods use a 360/365 day calendar, respectively.

🔸 Data.Accrual.Maturity

TypeRequiredValue
StringyesYYYY-MM-DD

Holds the maturity date of the loan, which is the date on which the last payment is scheduled. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟥 Data.PmtStreams[]

TypeRequired
Objectyes

The PmtStreams[] array is made up of one or more PmtStream objects (there will always be at least one of these elements, and there may be more than one depending upon the loan type). The PmtStream objects describe the scheduled stream of payments for the computed loan. Instead of disclosing each and every payment individually (which can be done using the AmTable object), the payment stream groups together consecutive equal payments at the same interest rate to produce output along the lines of:

{
  "PmtStreams" : [
    {
      "Term" : "11",
      "Pmt" : "87.90",
      "Rate" : "10.000",
      "Begin" : "2019-02-01",
      "PPY" : "12"
   },
    {
      "Term" : "1",
      "Pmt" : "87.85",
      "Rate" : "10.000",
      "Begin" : "2020-01-01"
   }
  ]
}

Each object describes a single stream of equal payments at the same interest rate, using the following fields to define the important properties of each payment stream.

Fields: 🔹Idx, 🔸Term, 🔸Pmt, 🔹IsSplitRate, 🔹Rate, 🔸Begin, 🔹PPY,

Objects: None

🔹 Data.PmtStreams[].Idx

TypeRequiredValue
StringnoInteger

If the value of EditOutput.TagPmts is set to true in the loan request, then this field will appear for each PmtStreams[] object. The value of this field identifies which PmtStreams[] array member of the loan request gave rise to it.

If the value of this field is -1, then perfect amortization was enforced (e.g. the BusinessRules.AmError field of is set to AdjPmt).

If the value of this field is -2, then an early payoff event was triggered, which is caused by (i) specifying the EditOutput.EarlyPayoffDate field, or (ii) using whole dollar rounding which can shorten the specified term of the loan, or (iii) specifying a fixed or minimum payment amount which also may shorten the specified term of the loan.

🔸 Data.PmtStreams[].Term

TypeRequiredValue
StringyesInteger

The Term field holds the number of payments that make up the given payment stream.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValue
StringyesCurrency

The Pmt field holds the computed payment amount for this payment stream.

🔹 Data.PmtStreams[].IsSplitRate

TypeRequiredValueDefault
Booleannotrue, falsefalse

If this payment stream accrued interest using split-rate tiers, then this field will be present and set to true. Otherwise, this field will not be returned and has an assumed default value of false.

🔹 Data.PmtStreams[].Rate

TypeRequiredValueDefault
StringnoNumbersee below

Contains the interest rate used for the duration of this payment stream. If this payment stream accrued interest using split-rate tiers, then this field will not be returned.

🔸 Data.PmtStreams[].Begin

TypeRequiredValue
StringyesYYYY-MM-DD

This field identifies the date on which the first payment for this given payment stream is scheduled to be made. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔹 Data.PmtStreams[].PPY

TypeRequiredValue
StringnoInteger

If the value of the Term field is greater than one, then the periodic payment frequency for this payment stream is also disclosed.


🟦 Data.MI

TypeRequired
Objectno

If mortgage insurance is present on the requested loan, then this object and all required child field objects (documented below) will be included in the response.

Fields: 🔹UpFront

Objects: 🟥 Rates[], 🟦 Periodic

🔹 Data.MI.UpFront

TypeRequiredValue
StringnoCurrency

The value of this field represents the up front fee paid for mortgage insurance. If there is no up front fee, then this field will not be present in the response.


🟥 Data.MI.Rates[]

TypeRequired
Array of Rate objectsyes

Fields of each rate object disclose the rate, premium per year, and premium per period.

Fields: 🔸Rate, 🔸PremPerYear, 🔸PremPerPeriod

Objects: None

🔸 Data.MI.Rates[].Rate

TypeRequiredValue
StringyesNumber

The percentage rate used in the mortgage insurance calculation.

🔸 Data.MI.Rates[].PremPerYear

TypeRequiredValue
StringyesCurrency

The annual mortgage insurance premium amount.

🔸 Data.MI.Rates[].PremPerPeriod

TypeRequiredValue
StringyesCurrency

The periodic mortgage insurance premium amount.


🟦 Data.MI.Periodic

TypeRequired
Objectno

Fields of this object provide the loan to value ratio, as well as the payment indexes when the principal balance falls below the WarnLTV and DropLTV percentage values specified in the request. This element is only present if a corresponding Periodic field is found in the request.

Fields: 🔸LTV, 🔸IndexToWarn, 🔸IndexToDrop

Objects: None

🔸 Data.MI.Periodic.LTV

TypeRequiredValue
StringyesNumber

The loan to value ratio of the computed loan, expressed as a percentage.

🔸 Data.MI.Periodic.IndexToWarn

TypeRequiredValue
StringyesInteger

The value of this field indicates the payment index on which the remaining principal balance to home value ratio drops below the specified WarnLTV percentage.

🔸 Data.MI.Periodic.IndexToDrop

TypeRequiredValue
StringyesInteger

The value of this field indicates the payment index on which the remaining principal balance to home value ratio drops below the specified DropLTV percentage. Mortgage insurance coverage stops after this payment.


🟦 Data.Protection

TypeRequired
Objectno

If protection products are requested, then this object will be present in the response, along with the Products[] array which contains details on each requested protection product.

Fields: 🔸LoanType, 🔹Path

Objects: 🟥 Products[]

🔸 Data.Protection.LoanType

TypeRequiredValue
StringyesEqual, SinglePay, Balloon, IntOnly, PrinPlus, SkipsIrregs, HighlyIrregular

Protection products are often limited to certain types of loan repayment schedules, such as regular equal and balloon payment loans. Also, different formulas and various other settings may be used for different loan repayment types.

The value of this field returns the type of loan repayment schedule that the SCE determines after analyzing on the computed loan. Please see the samples provided with this documentation which illustrates how to create JSON requests which will fall under these loan repayment classifications.

🔹 Data.Protection.Path

TypeRequiredValueDefault
StringnoTextn/a

This optional field will hold the value of the data path used by the SCE to find the required setup files for protection calculations. This field will only be present if the Protection.ShowDataPath field of the request is set to true.


🟥 Data.Protection.Products[]

TypeRequired
Array of Product objectsyes

For each distinct payment protection product that the calling application requested with a loan, a Product object will be returned.

Fields: 🔸Code, 🔸Result, 🔸Abbrev, 🔸Name, 🔹IsDP, 🔹Table, 🔹Formula, 🔹RateType, 🔹DropCode, 🔹DropReason

Objects: 🟦 Notes[], 🟦 Cost, 🟦 Coverage, 🟦 Benefit, 🟦 Borrowers[], 🟦 Caps

🔸 Data.Protection.Products[].Code

TypeRequiredValue
StringyesLI, LL, AH, IU, PP

This field defines the type of payment protection product that this element, and all child fields, refers to. It mirrors the Product.Code field in the loan request, with the addition of the LL code which indicates a level credit life product.

🔸 Data.Protection.Products[].Result

TypeRequiredValue
StringyesFull, Partial, Drop

The value of this field informs the calling application if the requested coverage has been fully provided, partially provided (i.e. one or more coverage caps have been exceeded and partial coverage has been extended), or completely dropped. If coverage has been dropped, then the Products[] object will not have any child objects (e.g. Product.Notes, Product.Cost, etc.).

🔸 Data.Protection.Products[].Abbrev

TypeRequiredValue
StringyesText

This field holds the protection product's abbreviation, as configured in the appropraite setup file.

🔸 Data.Protection.Products[].Name

TypeRequiredValue
StringyesText

This field holds the protection product's name, as configured in the appropraite setup file.

🔹 Data.Protection.Products[].IsDP

TypeRequiredValueDefault
Booleannotrue, falsefalse

This field indicates if the product has been set up as debt protection. If this field is not present, then the default value of false should be used (which indicates that the product has been set up as insurance instead).

🔹 Data.Protection.Products[].Table

TypeRequiredValueDefault
StringnoIntegern/a

The Table field will only be present when a product is offered with differing tables of rates. If present, the value of this field is the table number used in the calculation.

🔹 Data.Protection.Products[].Formula

TypeRequiredValueDefault
StringnoTextn/a

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team. Please see this table of formula codes to see each formula code and description.

🔹 Data.Protection.Products[].RateType

TypeRequiredValueDefault
StringnoFixed, VariableFixed

This field will only be present in the output if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.

🔹 Data.Protection.Products[].DropCode

TypeRequiredValueDefault
StringnoIntegern/a

If the requested protection was dropped by the SCE for any reason, then the value of this field will be greater than zero. In this case, no child objects of Products[] object will be present.

A value of zero indicates that the requested product was included with the loan, and as such, the child objects of Products[] which describe the coverage details, should be parsed.

Please see the table of drop codes for a complete list of all drop codes and and their associated description.

🔹 Data.Protection.Products[].DropReason

TypeRequiredValueDefault
StringnoTextn/a

If the requested protection product was successfully included in the loan, then the value of this field will be Valid Calculation and corresponds to a DropCode value of 0.

If the requested protection was dropped by the SCE for any reason (and hence, DropCode is > 0), then this field will provide a brief description of why the protection was dropped.

Please see the table of drop codes for a complete list of all drop codes and and their associated description.


🟦 Data.Protection.Products[].Notes[]

TypeRequired
Array of Note objectsno

The Notes array may appear in the response to further clarify the product calculation methodology. Each note is associated with a numeric code and text return value. Please see the documentation for the Note object below.

Fields: 🔸Code, 🔸Note

Objects: None

🔸 Data.Protection.Products[].Notes[].Code

TypeRequiredValue
StringyesInteger

The unique integer identifying the protection product Note in question. This Code may be useful if the calling application would like to override the default description or check for a given Note's Code.

Please see the table of protection product notes for all codes and their associated descriptions.

🔸 Data.Protection.Products[].Notes[].Note

TypeRequiredValue
StringyesText

A text description of the Note. Please see the table of protection product notes for all codes and their associated descriptions.


🟦 Data.Protection.Products[].Cost

TypeRequired
Objectno

This object's fields detail the cost of the protection product in total, per payment, and per day. It also provides the rate used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Rate, 🔹Factor

Objects: None

🔸 Data.Protection.Products[].Cost.Premium

TypeRequiredValue
StringyesCurrency

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Products[].Cost.PerPmt

TypeRequiredValue
StringyesCurrency

The cost of coverage expressed as an amoun per payment.

🔸 Data.Protection.Products[].Cost.PerDay

TypeRequiredValue
StringyesCurrency

The cost of coverage expressed as an amoun per day.

🔸 Data.Protection.Products[].Cost.Rate

TypeRequiredValue
StringyesNumber

The rate used to compute the premium for the requested protection product.

🔹 Data.Protection.Products[].Cost.Factor

TypeRequiredValue
StringnoNumber

The rate factor used to compute the premium for the requested protection product. Note that this field is only present if the Product.ShowFactor field of the associated protection product true.


🟦 Data.Protection.Products[].Coverage

TypeRequired
Objectno

The aggregate coverage amount, code, and note are provided in the fields of this object:

Fields: 🔸Amount, 🔸Code, 🔸Note

Objects: None

🔸 Data.Protection.Products[].Coverage.Amount

TypeRequiredValue
StringyesCurrency

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Products[].Coverage.Code

TypeRequiredValue
StringyesInteger

If the requested protection was capped by the SCE for any reason, then the value of this field will be greater than zero. A value of zero indicates that the requested product was included with the loan for the full coverage amount of the loan.

🔸 Data.Protection.Products[].Coverage.Note

TypeRequiredValue
StringyesText

This field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Products[].Benefit

TypeRequired
Objectno

Disability and involuntary unemployment provide coverage based upon a computed benefit amount. This object collects the monthly and periodic benefit amounts, as well as the benefit coverage code and note.

Fields: 🔸BenMon, 🔸BenPer, 🔸Code, 🔸Note

Objects: None

🔸 Data.Protection.Products[].Benefit.BenMon

TypeRequiredValue
StringyesCurrency

The computed monthly benefit amount.

🔸 Data.Protection.Products[].Benefit.BenPer

TypeRequiredValue
StringyesCurrency

The computed periodic benefit amount.

🔸 Data.Protection.Products[].Benefit.Code

TypeRequiredValue
StringyesInteger

If the benefit for the requested protection was capped by the SCE for any reason, then the value of this field will be greater than zero. A value of zero indicates that the requested product was included with the loan for the full benefit amount of the loan.

🔸 Data.Protection.Products[].Benefit.Note

TypeRequiredValue
StringyesText

This field will describe the type of benefit coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.

🟦 Data.Protection.Products[].Borrowers[]

TypeRequired
Array of Borrower objectsno

This array provides the calling application with data about the term of coverage for the specified borrower(s), for the requested product.

Fields: 🔸Birthday, 🔸Pmts, 🔸Months, 🔹AmMonths, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Maturity, 🔸Code, 🔸Note

Objects: None

🔸 Data.Protection.Products[].Borrowers[].Birthday

TypeRequiredValue
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 Data.Protection.Products[].Borrowers[].Pmts

TypeRequiredValue
StringyesInteger

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Products[].Borrowers[].Months

TypeRequiredValue
StringyesInteger

The term of coverage expressed as a number of months.

🔹 Data.Protection.Products[].Borrowers[].AmMonths

TypeRequiredValueDefault
StringnoIntegern/a

This field is only be returned when the protection product is configured to use TruStage's single premium formula #5, and contains the computed amortization term used in the premium computation.

🔸 Data.Protection.Products[].Borrowers[].AgeAtIssue

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Products[].Borrowers[].AgeAtMaturity

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Products[].Borrowers[].Maturity

TypeRequiredValue
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Products[].Borrowers[].Code

TypeRequiredValue
StringyesInteger

If the requested protection was truncated by the SCE for any reason, then the value of this field will be greater than zero. A value of zero indicates that the requested product was included with the loan for the full term of the loan.

🔸 Data.Protection.Products[].Borrowers[].Note

TypeRequiredValue
StringyesText

This field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Products[].Caps

TypeRequired
Objectno

This object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product.

Fields: 🔹Coverage, 🔹Benefit, 🔹BenPer, 🔹Term, 🔹TermPer, 🔹InceptAge, 🔹AttainAge

Objects: None

🔹 Data.Protection.Products[].Caps.Coverage

TypeRequiredValueDefault
StringnoCurrencyn/a

Contains the maximum aggregate coverage amount, expressed in dollars. If no cap is present or applicable, then this field will not be present.

🔹 Data.Protection.Products[].Caps.Benefit

TypeRequiredValueDefault
StringnoCurrencyn/a

Contains the maximum monthly benefit amount. If no cap is present or applicable, then this field will not be present.

🔹 Data.Protection.Products[].Caps.BenPer

TypeRequiredValueDefault
StringnoCurrencyn/a

Contains the maximum periodic benefit amount. If no cap is present or applicable, or if the payment frequency of the requested loan is monthly, then this field will not be present.

🔹 Data.Protection.Products[].Caps.Term

TypeRequiredValueDefault
StringnoIntegern/a

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then this field will not be present.

🔹 Data.Protection.Products[].Caps.TermPer

TypeRequiredValueDefault
StringnoIntegern/a

Contains the maximum coverage term, expressed as a number of payments. If no cap is present or applicable, or if the payment frequency of the requested loan is monthly, then this field will not be present.

🔹 Data.Protection.Products[].Caps.InceptAge

TypeRequiredValueDefault
StringnoIntegern/a

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then this field will not be present.

🔹 Data.Protection.Products[].Caps.AttainAge

TypeRequiredValueDefault
StringnoIntegern/a

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then then this field will not be present.


🟦 Data.AmTable

TypeRequired
Objectno

This object contains fields which summarize and describe the loan's amortization schedule. If EditOutput.ShowAmTable is set to false, then this object will not be found in the response.

Fields: 🔹AvgBal, 🔹Months, 🔹Weeks, 🔹OddDays

Objects: 🟦 GrandTotals, 🟦 SubTotals[], 🟦 AmLines[]

🔹 Data.AmTable.AvgBal

TypeRequiredValueDefault
StringnoCurrencyn/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the average balance of the loan used in the Canadian APR calculation.

🔹 Data.AmTable.Months

TypeRequiredValueDefault
StringnoIntegern/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of months in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.Weeks

TypeRequiredValueDefault
StringnoIntegern/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of weeks in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.OddDays

TypeRequiredValueDefault
StringnoIntegern/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the number of odd days in the term of the loan used in the Canadian APR calculation. Odd days are computed by moving backwards from the maturity date the number of disclosed months or weeks, and then counting the additional number of days required to land on the loan date.


🟦 Data.AmTable.GrandTotals

TypeRequired
Objectno

This object describes the total amounts of various categories throughout the life of the loan. As an example, the total amount paid to interest and principal, as well as the total of payments are all contained in fields of this object.

Fields: 🔸PmtTot, 🔸IntTot, 🔸PrinTot

Objects: None

🔸 Data.AmTable.GrandTotals.PmtTot

TypeRequiredValue
StringyesCurrency

The total of payments scheduled for the computed loan.

🔸 Data.AmTable.GrandTotals.IntTot

TypeRequiredValue
StringyesCurrency

The total amount paid to interest over the life of the loan, assuming all payments are made as scheduled.

🔸 Data.AmTable.GrandTotals.PrinTot

TypeRequiredValue
StringyesCurrency

This field contains the total amount paid to principal during the loan term, assuming all payments are made as scheduled.


🟦 Data.AmTable.SubTotals[]

TypeRequired
Array of SubTotal objectsno

Describes the total amounts of various categories paid during a given calendar year. For each year in which the computed loan has scheduled payments, there will be a SubTotal object in the array.


Fields: 🔸Year 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub

Objects: None

🔸 Data.AmTable.SubTotals[].Year

TypeRequiredValue
StringyesInteger

The calendar year for which the subtotal data is applicable.

🔸 Data.AmTable.SubTotals[].Start

TypeRequiredValue
StringyesInteger

This field defines the index of the first AmLine event in the AmLines[] array which falls in the specified calendar year.

🔸 Data.AmTable.SubTotals[].Events

TypeRequiredValue
StringyesInteger

This field defines the number of amortization events which belong to this calendar year.

🔸 Data.AmTable.SubTotals[].PmtSub

TypeRequiredValue
StringyesCurrency

Contains the total of payments scheduled for the calendar year.

🔸 Data.AmTable.SubTotals[].IntSub

TypeRequiredValue
StringyesCurrency

Holds the total amount paid to interest over the calendar year, assuming all payments are made as scheduled.

🔸 Data.AmTable.SubTotals[].PrinSub

TypeRequiredValue
StringyesCurrency

Contains the total amount paid to principal during the calendar year, assuming all payments are made as scheduled.


🟦 Data.AmTable.AmLines[]

TypeRequired
Array of AmLine objectsno

There is one AmLine object for each amortization event which occurs during the life of a loan. Most of the time, each event will describe a payment, and detail how that payment is applied (to interest, principal, loan protection products, etc.). Some events, such as capitalizing interest, will not have payments but will show how the loan amortizes.

Fields: 🔸Idx, 🔹Type, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹FeeTot, 🔹ProtUnpaid, 🔹PmtEsc, 🔹MI, 🔹UnpaidInt, 🔸EndBal, 🔹MinPnI, 🔹MinInt, 🔹MinPrin, 🔹MaxPnI, 🔹MaxInt, 🔹MaxPrin

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValue
StringyesInteger

The index of the amortization event, which is either the payment number, or zero. A value of zero designates an event that is either not a payment or is a skipped payment.

🔹 Data.AmTable.AmLines[].Type

TypeRequiredValueDefault
StringnoTextn/a

The type of event is recorded in this field, such as Advance or FixedPmt. If any fees are included in the loan, then the value of this field for those fee events will be the Name of the fee, as specified in the request.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValue
StringyesYYYY-MM-DD

The date on which the amortization event is scheduled to occur. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 Data.AmTable.AmLines[].BegBal

TypeRequiredValue
StringyesCurrency

The principal balance before the amortization event occurs.

🔸 Data.AmTable.AmLines[].Pmt

TypeRequiredValue
StringyesCurrency

The payment amount for this event.

🔸 Data.AmTable.AmLines[].Int

TypeRequiredValue
StringyesCurrency

The amount of interest paid at this event.

🔸 Data.AmTable.AmLines[].Prin

TypeRequiredValue
StringyesCurrency

The amount of principal paid at this event.

🔹 Data.AmTable.AmLines[].FeeTot

TypeRequiredValue
StringnoCurrency

The total of all fees paid at this event.

🔹 Data.AmTable.AmLines[].ProtUnpaid

TypeRequiredValue
StringnoCurrency

If the loan includes escrowed True MOB protection products, and if a payment is not sufficient to pay the accrued fees, then any unpaid protection fees will be carried forward in this field to be paid off as soon as possible in a future payment.

🔹 Data.AmTable.AmLines[].PmtEsc

TypeRequiredValue
StringnoCurrency

If the computed loan is an annual rest mortgage, then the sum of escrowed payments for each amortization event will appear in this field. If the computed loan is not an annual rest mortgage, then this field will not be found in the response.

🔹 Data.AmTable.AmLines[].MI

TypeRequiredValue
StringnoCurrency

The amount of mortgage insurance paid at this event.

🔹 Data.AmTable.AmLines[].UnpaidInt

TypeRequiredValue
StringnoNumber

Any interest not paid after this event is logged in this field.

If EditOutput.KeepSlush is set to true in the request, then the unpaid interest will always be displayed to four (4) decimal places.

If EditOutput.KeepSlush is set to false, then if the interest accrued has not yet been rounded, then the unpaid interest will be displayed to four (4) decimal placed. If rounded, then the unpaid interest is displayed to two (2) decimal places.

🔸 Data.AmTable.AmLines[].EndBal

TypeRequiredValue
StringyesCurrency

The principal balance amount, after the amortization event has taken place.

🔹 Data.AmTable.AmLines[].MinPnI

TypeRequiredValueDefault
StringnoCurrencyn/a

If the Loan is an ARM loan which specified a minimum lifetime interest rate (see ARM.Limits.Floor), and if TILA RESPA data has been requested (using the TILARESPA2015 field), then this field will be present in each AmLine object that represents a payment. The value of this field represents the minimum principal and interest payment possible, should the index + margin rate trend towards the minimum lifetime rate after the teaser term has expired.

🔹 Data.AmTable.AmLines[].MinInt

TypeRequiredValueDefault
StringnoCurrencyn/a

The value of this field represents the amount of the MinPnI payment which has been used to pay interest. This field will only be present if the MinPnI field is present and if the request set TILARESPA2015.MinPnIDetails to true.

🔹 Data.AmTable.AmLines[].MinPrin

TypeRequiredValueDefault
StringnoCurrencyn/a

The value of this field represents the amount of the MinPnI payment which has been used to pay down the principal balance. This field will only be present if the MinPnI field is present and if the request set TILARESPA2015.MinPnIDetails to true.

🔹 Data.AmTable.AmLines[].MaxPnI

TypeRequiredValueDefault
StringnoCurrencyn/a

If the Loan is an ARM loan which specified a maximum lifetime interest rate (see ARM.Limits.Ceiling), and if TILA RESPA data has been requested (using the TILARESPA2015 field field), then this field will be present in each AmLine object that represents a payment. The value of this field represents the maximum principal and interest payment possible, should the index + margin rate trend towards the maximum lifetime rate after the teaser term has expired.

🔹 Data.AmTable.AmLines[].MaxInt

TypeRequiredValueDefault
StringnoCurrencyn/a

The value of this field represents the amount of the MaxPnI payment which has been used to pay interest. This field will only be present if the MaxPnI field is present and if the request set TILARESPA2015.MaxPnIDetails to true.

🔹 Data.AmTable.AmLines[].MaxPrin

TypeRequiredValueDefault
StringnoCurrencyn/a

The value of this field represents the amount of the MaxPnI payment which has been used to pay down the principal balance. This field will only be present if the MaxPnI field is present and if the request set TILARESPA2015.MaxPnIDetails to true.


Equal Payment Loans

Equal payment loans are the most common type of loan calculated, and are usually the main focus of a lending institution. The four basic variables involved in an equal payment loan are: proceeds, rate, term and payment.

Most of the time, a user will want to specify the proceeds, rate and term, and then have the SCE compute the resulting payment. However, there are times when a specific payment is desired and the user may wish to compute either the proceeds or term. The SCE supports these rollback calculations, and each is documented in this chapter.

Sample Request

The following example is a request for an equal payment loan with proceeds of $10,000, interest will accrue at a 4.5% rate using an actual day / 365 U. S. Rule accrual method (accrual code 320), with a financed and APR affecting document preparation fee of $25 included. There will be 12 monthly equal principal and interest payments.

{
  "Module" : "EqualPmt",
  "Data" : {
    "LoanDate" : "2022-08-22",
    "PmtDate" : "2022-10-01",
    "IntRate" : "4.500",
    "Proceeds" : "10000.00",
    "Term" : "12",
    "Fees" : [
      {
        "Name" : "Doc Prep Fee",
        "AddToFinChg" : true,
        "AddToPrin" : true,
        "CalcType" : "Dollar",
        "Entry" : "25.00"
      }
    ],
    "Settings" : {
      "AccrualCode" : "320"
    }
  }
}

Note that in the above request, the Payment field is not specified. This instructs the SCE to compute the payment given the IntRate, Proceeds, and Term. The following loan is identical to the one above, except that we are specifying a desired payment (Payment) and computing the proceeds (note that the Proceeds) field is omitted:

{
  "Module" : "EqualPmt",
  "Data" : {
    "LoanDate" : "2022-08-22",
    "PmtDate" : "2022-10-01",
    "IntRate" : "4.500",
    "Term" : "12",
    "Payment" : "856.93",
    "Fees" : [
      {
        "Name" : "Doc Prep Fee",
        "AddToFinChg" : true,
        "AddToPrin" : true,
        "CalcType" : "Dollar",
        "Entry" : "25.00"
      }
    ],
    "Settings" : {
      "AccrualCode" : "320"
    }
  }
}

Finally, to compute the Term for a given Proceeds, Rate, and Payment we would use a request similar to the following:

{
  "Module" : "EqualPmt",
  "Data" : {
    "LoanDate" : "2022-08-22",
    "PmtDate" : "2022-10-01",
    "IntRate" : "4.500",
    "Proceeds" : "10000.00",
    "Payment" : "856.93",
    "Fees" : [
      {
        "Name" : "Doc Prep Fee",
        "AddToFinChg" : true,
        "AddToPrin" : true,
        "CalcType" : "Dollar",
        "Entry" : "25.00"
      }
    ],
    "Settings" : {
      "AccrualCode" : "320"
    }
  }
}

Sample Response

The following example is the response returned from the SCE for the first request provided above.

{
  "Result" : 200,
  "Module" : "EqualPmt",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Results" : {
      "Payment" : "856.92"
    },
    "FedBox" : {
      "AmtFin" : "10000.00",
      "FinChg" : "283.04",
      "TotPmts" : "10283.04",
      "APR" : {
        "Value" : "4.929",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Principal" : "10025.00",
      "Interest" : "258.04",
      "FinFees" : "25.00",
      "FinChgFees" : "25.00",
      "Fees" : [
        {
          "Name" : "Doc Prep Fee",
          "Fee" : "25.00"
        }
      ]
    },
    "Accrual" : {
      "Method" : "Actual/365 US Rule",
      "Days1Pmt" : "40",
      "DayCount" : "Actual",
      "Maturity" : "2023-09-01"
    },
    "PmtStreams" : [
      {
        "Term" : "12",
        "Pmt" : "856.92",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      }
    ],
    "AmTable" : {
      "GrandTotals" : {
        "PmtTot" : "10283.04",
        "IntTot" : "258.07",
        "PrinTot" : "10024.97"
      },
      "SubTotals" : [
        {
          "Year" : "2022",
          "Start" : "1",
          "Events" : "3",
          "PmtSub" : "2570.76",
          "IntSub" : "115.72",
          "PrinSub" : "2455.04"
        },
        {
          "Year" : "2023",
          "Start" : "4",
          "Events" : "9",
          "PmtSub" : "7712.28",
          "IntSub" : "142.35",
          "PrinSub" : "7569.93"
        }
      ],
      "AmLines" : [
        {
          "Idx" : "1",
          "Date" : "2022-10-01",
          "BegBal" : "10025.00",
          "Pmt" : "856.92",
          "Int" : "49.44",
          "Prin" : "807.48",
          "EndBal" : "9217.52"
        },
        ...,
        {
          "Idx" : "12",
          "Date" : "2023-09-01",
          "BegBal" : "853.69",
          "Pmt" : "856.92",
          "Int" : "3.26",
          "Prin" : "853.66",
          "EndBal" : "0.03"
        }
      ]
    }
  }
}

Equal Payment Loan Module - Request

The fields of the Data object supported by a EqualPmt module request are defined in alphabetical order below:

ObjectFields
🟥 Data🔹Country, 🔸IntRate, 🔹IntStartDate, 🔸LoanDate, 🔹Payment, 🔸PmtDate, 🔹PPY, 🔹Proceeds, 🔹Term, 🔹TotalDown
|- 🟦 Apr🔹MAPR_Max, 🔹Method, 🔹UseMAPR
|- 🟦 Construction🔹HalfCommitment, 🔹PPY, 🔸Rate, 🔸Term
|- 🟦 Fees[]🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost,🔹MAPR, 🔹Max, 🔹Min, 🔹Name
|- 🟦 Format🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator
|- 🟦 MI🔹CashDown, 🔹LoanAmt, 🔸PropertyValue, 🔹Type
|- |- 🟦 Periodic🔹DropLTV, 🔹Term, 🔹WarnLTV
|- |- 🟥 Rates[]🔸Rate, 🔹Switch
|- |- 🟦 UpFront🔹Paid, 🔹Reduce, 🔹Units, 🔹Value
|- 🟦 ODI🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI
|- 🟦 Protection🔹Birthday1, 🔹Birthday2, 🔹Financed, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps
|- |- 🟦 Disability🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table
|- |- 🟦 Life🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates
|- |- 🟦 Property🔹Coverage, 🔹Covers
|- |- 🟦 Unemployment🔹Benefit, 🔹Covers, 🔹CovTerm
|- 🟦 ServiceCharges[]🔹CalcType, 🔸Entry, 🔹Exact, 🔹IsLoanCost, 🔹Name, 🔹Round
|- 🟦 Settings🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Country, 🔸IntRate, 🔹IntStartDate, 🔸LoanDate, 🔹Payment, 🔸PmtDate, 🔹PPY, 🔹Proceeds, 🔹Term, 🔹TotalDown

Objects: 🟦 Apr, 🟦 Construction, 🟦 Fees[], 🟦 Format, 🟦 MI, 🟦 ODI, 🟦 Protection, 🟦 ServiceCharges[], 🟦 Settings

The fields of the Data object supported by an Equal Pmt module request are defined in alphabetical order below:

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

This field allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see the Countries Appendix for the list of supported countries and their associated codes.

Specifying the Country will also set the default value for the APR.Method and Format.CurrencyDecimals fields, as appropriate for the country specified.

🔸 Data.IntRate

TypeRequiredValues
StringyesNumber in [-99.999...600]

Determine the interest rate used for the loan. The interest rate should be expressed as a percentage. For example, a loan computed with a rate of 5.125% would be specified as "IntRate" : "5.125".

🔹 Data.IntStartDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDsame value as LoanDate

This field contains the date on which interest begins to accrue on the loan's principal balance. If this field is not specified, then the interest start date is set equal the loan date. Also note that the interest start date must be equal to the loan date when computing a construction loan.

The interest start date (when specified) must be on or after the loan date, as well as on or before the first payment date.

🔸 Data.LoanDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field holds the date on which the loan amount is disbursed and interest begins to accrue. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.Payment

TypeRequiredValuesDefault
StringnoCurrency > 0n/a

The payment specified indicates the the desired periodic payment the borrower is requesting.

If you wish to compute the Payment by specifying the IntRate, Proceeds, and Term, then omit thie field from the request.

🔸 Data.PmtDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field specifies the first (and for single payment notes, only) payment date in the loan's repayment schedule. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for payments per year, and determines the payment frequency for the requested loan. The default value of 12 will result in a loan with 12 payments per year. If you require a loan with a payment frequency other than monthly, specify it using this field.

🔹 Data.Proceeds

TypeRequiredValuesDefault
StringnoCurrency > 0n/a

The proceeds specified indicate the amount of money the borrower is requesting, and does not include financed fees, financed insurances, etc.

If you wish to compute the Proceeds by specifying the IntRate, Term, and Payment, then omit thie field from the request.

🔹 Data.TotalDown

TypeRequiredValues
StringnoCurrency > 0

This optional field represents the total down payment that the borrower has applied to reduce the requested proceeds. It may consist of a cash down payment, net trade-in value, or rebate. You only need to specify a total down payment if the loan needs to disclose a total sale price. Typical examples of these loan types are auto and boat loans.

🔹 Data.Term

TypeRequiredValues
StringnoInteger > 1

The Term field indicates the the number of payments to be made at the specified payment frequency (see the PPY field above), after which the loan is scheduled to be paid off.

If you wish to compute the Term by specifying the IntRate, Proceeds, and Payment, then omit thie field from the request.


🟦 Data.Apr

TypeRequired
Objectno

Settings related to the computed effective rate returned by the SCE (most commonly, the Regulation Z APR in the United States of America) are contained in the fields of this object.

Fields: 🔹MAPR_Max, 🔹Method, 🔹UseMAPR

Objects: None

🔹 Data.Apr.MAPR_Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]36.0

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this field.

🔹 Data.Apr.Method

TypeRequiredValuesDefault
Stringnodefault, actuarial, eu, ca, xirr, xirr360, irrdefault

This field allows the calling application to specify an APR calculation method which will override the default value found in the setup file for the given Account. If this field is set to a valid value, then the specified method will be used to compute the APR for this loan calculation.

If the Country field has been set by the calling application and this field is not set, then the APR method used will be determined by the specified country. For the United States of America, the default APR method is actuarial. For a country in the European Union, the default value is eu (European Union APR). For Canada, the default APR method is ca (Canadian APR).

The xirr value implements the internal rate of return method as implemented in Microsoft\textregistered Excel via the XIRR() function, and is based on an actual day calendar with a 365 day divisor.

The xirr360 value implements the internal rate of return method based upon a unit period calendar with a 360 day divisor.

The irr value implements a common spreadsheet internal rate of return method which assumes strict regular periods. Deviating from a strict regular periodicity may produce unreliable results.

If this field is not specified and the Country field is not specified, then the value of default will be used which informs the SCE to use the APR method defined in the setup file for the specified Account.

🔹 Data.Apr.UseMAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will compute the Military APR in addition to the Regulation Z APR. The MAPR object will be included in the loan response.


🟦 Data.Construction

TypeRequired
Objectno

The Construction object determines if this loan is a construction to permanent loan request. If you wish to compute a construction loan without an attached permanent loan, you will need to use either the Construction or Loan modules.

Fields: 🔹HalfCommitment, 🔹PPY, 🔸Rate, 🔸Term

Objects: None

🔹 Data.Construction.HalfCommitment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

During the term of the construction loan, the estimated interest for disclosure purposes may be either computed on the full or half commitment amounts. By setting this field to true, interest will be estimated using half of the initial commitment amount (i.e. the principal balance). The default value of false will cause interest to be estimated using the entire initial commitment amount.

🔹 Data.Construction.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

The PPY field allows the calling application to specify the payment frequency during the construction period. The default value of 12 will result in a construction loan with 12 payments per year. If you require a payment frequency during the construction period other than monthly, then specify it using this field. Note that the permanent loan's payment frequency may differ from the construction period's payment frequency.

🔸 Data.Construction.Rate

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]n/a

This field determines the rate applied to the appropriate commitment amount during the term of the construction loan.

🔸 Data.Construction.Term

TypeRequiredValuesDefault
StringyesInteger > 0n/a

The term of the construction loan (in payments) is specified using this field. Please note that the term may not exceed five years.


🟦 Data.Fees[]

TypeRequired
Array of Fee Objectsno

This array of Fee objects allows the calling application to specify one ore more Fee objects to be included with the loan.

Fields: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name

Objects: None

🔹 Data.Fees[].AddToFinChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be included in the computed Finance Charge (and hence, affect the APR), then set this field to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 Data.Fees[].AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this field to true. If set to false, then the fee is paid up front out of the borrower's pocket.

🔹 Data.Fees[].Adjust

TypeRequiredValuesDefault
StringnoCurrency0

The optional Adjust field allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This field has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCE is as follows:

{
  "Fees" : [
    {
      "Name" : "TN Fee",
      "CalcType" : "OnAmtFin",
      "Adjust" : "-2000.00",
      "Entry" : "0.115",
      "AddToPrin" : true,
      "AddToFinChg" : false
    }
  ]
}

🔹 Data.Fees[].CalcType

TypeRequiredValuesDefault
StringnoDollar, OnProceeds, OnPrincipal, OnAmtFinDollar

This field specifies how the fee is to be computed, as described in the following table.

Fee Calc TypeDescription
DollarThe Entry field is understood as a flat dollar amount.
OnProceedsThe Entry field is understood as a percentage value, to be applied to the loan's proceeds, defined as the sum of advances. An Entry of 0.25 would represent a fee of 0.25% of the total proceeds.
OnPrincipalThe Entry field is understood as a percentage value, to be applied to the loan's principal balance. An Entry of 0.125 would represent a fee of 0.125% of the principal balance.
OnAmtFinThe Entry field is understood as a percentage value, to be applied to the loan's Regulation Z Amount Financed. An Entry of 0.33 would represent a fee of 0.33% of the amount financed.

🔹 Data.Fees[].Entry

TypeRequiredValuesDefault
StringnoNumber >= 00

How this field is interpreted depends upon the Fee.CalcType field. Please see the documentation for this field for further information.

🔹 Data.Fees[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which fees need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.Fees[].MAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this field to true.

Fees which are added to the finance charge (e.g. "AddToFinChg" : true) are always considered MAPR fees, regardless of the stated value of this field.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Data.Fees[].Max

TypeRequiredValuesDefault
StringnoCurrency > 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Min

TypeRequiredValuesDefault
StringnoCurrency > 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value will be determined by the value of the Country field. For most countries, the default value is 2. If no country code is specified, then the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.MI

TypeRequired
Objectno

The MI object determines if this loan includes one of the supported types of mortgage insurance (MI): PMI or FHA. This object contains fields which further specify mortgage insurance options.

Fields: 🔹CashDown 🔹LoanAmt, 🔸PropertyValue, 🔹Type

Objects: 🟦 Periodic, 🟥 Rates[], 🟦 UpFront

🔹 Data.MI.CashDown

TypeRequiredValuesDefault
StringnoCurrency >= 00

The CashDown field represents a cash down payment made at closing. If specified and greater than zero, this amount will be deducted from the principal balance. If not specified, the cash down payment will default to zero.

🔹 Data.MI.LoanAmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

This field represents the amount by which the PMI rates are multiplied to produce a level PMI premium. If not specified, then the principal balance will be used to compute the annual premium.

🔸 Data.MI.PropertyValue

TypeRequiredValues
StringyesCurrency >= 0

This field's value represents the appraised property value, and will be used in the calculation of the loan to value ratio.

🔹 Data.MI.Type

TypeRequiredValuesDefault
Stringnofha, pmipmi

This field determines the type of mortgage insurance to include with the loan. If the value of this field is set to fha, then a different MI premium is computed every twelve months based upon the average outstanding principal balance during that same term. The MI calculation adheres strictly to the HUD regulation.

If the value of this field is set to pmi, then each defined MI rate produces a level MI premium based upon the inital loan amount.


🟦 Data.MI.Periodic

TypeRequired
Objectno

The fields of this object determine the conditions when MI is no longer included.

Fields: 🔹DropLTV, 🔹Term, 🔹WarnLTV

Objects: None

🔹 Data.MI.Periodic.DropLTV

TypeRequiredValuesDefault
StringnoNumber >= 00

The value of this field determines the loan to value ratio at which MI should be removed, and is expressed as a percentage. For example, if you wish to automatically drop MI when the loan to value ratio first equals or falls below 78%, then you would specify "DropLTV" : "78.0".

🔹 Data.MI.Periodic.Term

TypeRequiredValuesDefault
StringnoInteger >= 00

The value of this field represents the the term (in payments) beyond which MI will be removed.

As an example, if mortgage insurance must be removed after the 180th payment, then the calling application should specify

{
  "MI" : {
    "Periodic" : { "Term" : "180"}
 }
}

🔹 Data.MI.Periodic.WarnLTV

TypeRequiredValuesDefault
StringnoNumber >= 00

The value of this field determines the loan to value ratio at which a warning should be issued, and is expressed as a percentage of LTV (loan to value). For example,if you wish to know when the loan to value ratio first equals or falls below 80%, then you would specify "WarnLTV" : "80.0".


🟥 Data.MI.Rates[]

TypeRequired
Array of Rate Objectsyes

This array if Rate objects defines the rates used to compute MI on the loan. There must be at least one Rate object in the Rates[] array, and there can be more than one if rates are set to switch at a specified payment number.

Fields: 🔸Rate, 🔹Switch

Objects: None

🔸 Data.MI.Rates[].Rate

TypeRequiredValues
StringyesNumber>= 0.0

The value of this field specifies the cost of mortgage insurance per $100 of the loan amount. As an example, a loan computed with a MI rate of $1.50 per $100 would be specified as

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"}
    ]
 }
}

🔹 Data.MI.Rates[].Switch

TypeRequiredValuesDefault
StringnoInteger >= 00

This optional field defines the payment number beyond which the associated MI rate will apply. If not specified, the value will default to zero.

Thus, if there is only a single MI rate, one may omit this field (see example above).

Example of a MI multiple rate structure (use a rate of $1.50 for the first 10 years, with a rate of $0.20 for coverage beyond 10 years):

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"},
      { "Rate" : "0.20" , "Switch" : "120"}
    ]
 }
}

🟦 Data.MI.UpFront

TypeRequired
Objectno

This object determines if there is an up front fee for mortgage insurance, and if so, how it is computer. If this object is not present in the request, then no up front fee will be computed. Note that ZOMP (zero option monthly premium) products do not have an up front fee, which means that this object should be omitted.

Fields: 🔹Paid, 🔹Reduce, 🔹Units, 🔹Value

Objects: None

🔹 Data.MI.UpFront.Paid

TypeRequiredValuesDefault
Stringnoatclosing, bylender, financedatclosing

If the value of this field is set to financed, then the computed up front fee will be added to the principal balance and the finance charge. A value of atclosing will cause the value of the fee to be added to the finance charge alone. Finally, a value of bylender means that the up front fee is to be paid by the lender, hence the value of the fee is not added to either the principal balance nor the finance charge.

🔹 Data.MI.UpFront.Reduce

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the specified number of periodic premiums to include as an up front fee is greater than zero, then this field determines if the term of coverage for PMI will be reduced by the same amount.

🔹 Data.MI.UpFront.Units

TypeRequiredValuesDefault
Stringnomonths, points, yearsmonths

If the Units field is set to months, then UpFront.Value represents the number of periodic MI premiums to be paid at closing.

If the Units field is set to Years, then UpFront.Value represents the number of annual MI premiums to be paid at closing. Many single premium products define the up front fee as a number of years of MI to be paid up front.

Finally, if the Units field is set to Points, then UpFront.Value represents the percentage of principal to be paid up front. As of October 3, 2011, FHA loans use points.

🔹 Data.MI.UpFront.Value

TypeRequiredValuesDefault
StringnoCurrency >= 00

If part of the MI fees are to be paid up front, then value of this field must be grater than zero. How the value of this field is interpreted depends upon the Units field (see below).

The default value of zero means that no up front fee will be computed.


🟦 Data.ODI

TypeRequired
Objectno

If odd days should be treated as a prepaid finance charge or added to the first payment in a manner different from how interest is accruing, then the request needs to define how odd days interest is computed and handled using the fields of this object.

Fields: 🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

Objects: None

🔹 Data.ODI.AccrualCode

TypeRequiredValuesDefault
Stringno204, 205, 210, 211, 220, 221, 230, 231, 250default

The accrual code defines how the odd days interest is computed. The meaning of the allowed accrual codes is defined below.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

Accrual CodeDescription
204True360/360
205True360/365
210Actual/360
211True365/360
220Actual/365
221True365/365
230Actual/Actual
231Midnight 366
250Actual/Variable Days Per Year

🔹 Data.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application wants the odd days interest to be added to the first payment, then set the value of this field to true. A value of false indicates that the odd days interest will be treated as a prepaid finance charge.

🔹 Data.ODI.AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If any odd days interest should be treated as a financed prepaid fee, then set the value of this field to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCE and the value of AddToPrin will be set to false.

🔹 Data.ODI.AnchorDate

TypeRequiredValuesDefault
StringnoBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This field determines how to arrive at the anchor date. A value of BackUnitPeriod means that the anchor date is one unit period prior to the specified first payment date. A value of BackDaysPerPeriod means that the anchor date is the number of days per period prior to the first payment date. Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 Data.ODI.ForceUnitPeriod

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Some unit period methods will not use a strict unit period interest accrual factor in the period to the first payment. For example, code 302 will count the days to the first payment and divide by 365. For a monthly loan, setting this field to true will use a 1/12 factor instead of Days/365.

🔹 Data.ODI.NoCap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When the odd days interest is financed, setting this field to true prevents interest from being computed on interest. The default is false, which means interest will be computed on interest.

🔹 Data.ODI.UseDailyCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 Data.ODI.UseNegODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If there are negative odd days in the loan, then the value of this field determines if a negative odd days interest fee is computed. If the value of this field is false, then negative odd days fees are not allowed, the SCE will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes and odd days interest credit) when there are negative odd days in a loan.


🟦 Data.Protection

TypeRequired
Objectno

The Protection object is used by the calling application to request one or more payment protection products (e.g. life, disability, involuntary unemployment, or personal property) be included in the loan calculation. Each of these products is requested by including its own child object, along with the borrower birthdays.

Fields: 🔹Birthday1, 🔹Birthday2, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps

Objects: 🟦 Disability, 🟦 Life, 🟦 Property, 🟦 Unemployment

🔹 Data.Protection.Birthday1

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the secondary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday2" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower2 or both.

🔹 Data.Protection.Birthday2

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the primary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday1" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower1 or both.

🔹 Data.Protection.Financed

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the computed premiums for single premium debt protection products should be financed along with the proceeds, then this field should be set to true (which is the default value if not specified). A value of false indicates that the computed premiums will not be financed with the proceeds, and hence will be paid out of pocket by the borrower. Note that this applies to single premium insurance products only!

🔹 Data.Protection.LineOfCredit

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this is an account using TruStage's MOB insurance, and if this loan is a line of credit where product term caps should be ignored, then set this field to true. Otherwise, omit this field or set it to false.

🔹 Data.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then any computed payment protection premium or fee will be considered a mandatory fee which will be included as a part of the Finance Charge, and hence affect the disclosed APR.

If the Mandatory field is set to false, then the loan will treat any premiums / fees as normal.

🔹 Data.Protection.ShowBorrowerInfo

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have data returned for each specified borrower instead of a single Term object, then set the value of this field to true. Otherwise, omit this field or set it to false. See the Borrower and Term objects defined in the response section for more information.

🔹 Data.Protection.ShowCaps

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have cap information (e.g. maximum terms, coverage amounts, ages, etc.) returned for each product offered, set the value of this field to true. Otherwise, omit this field or set it to false. See the Caps object defined in the response section for more information.


🟦 Data.Protection.Disability

TypeRequired
Objectno

The Disability object determines what type of disability coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table

Objects: None

🔹 Data.Protection.Disability.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Disability.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Disability object altogether or specify a value of none.

🔹 Data.Protection.Disability.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Disability.Table

TypeRequiredValuesDefault
StringnoInteger in [0...19]0

If the specified account has been set up with multiple disability or debt cancellation plans, then this field determines which plan number will be used. If no table number is specified, the first table (table zero) will be used.


🟦 Data.Protection.Life

TypeRequired
Objectno

The Life object determines what type of life coverage is requested for the loan.

Fields: 🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates

Objects: None

🔹 Data.Protection.Life.CovAmount

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a coverage amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum coverage amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified coverage amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Life.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Life object altogether or specify a value of none.

🔹 Data.Protection.Life.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Life.Dismemberment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer life protection products with optional dismemberment coverage, and if the optional dismemberment coverage is desired, then set this field's value to true. Otherwise, use the default value of false.

🔹 Data.Protection.Life.Method

TypeRequiredValuesDefault
StringnoDefault, Gross, NetDefault

Some accounts are configured to offer different types of credit life products (usually gross and net). In these accounts, this field allows the calling application to specify which method to use for a given loan. If no method is present in the request, then the default method will be used.

🔹 Data.Protection.Life.UseLevelRates

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer single premium credit life using level rates instead of the normal decreasing rates, and if you wish to use level rates instead of decreasing, then set this field's value to true. Otherwise, use the default value of false.


🟦 Data.Protection.Property

TypeRequired
Objectno

The Property object determines what type of property coverage is requested for the loan.

Fields: 🔹Coverage, 🔹Covers

Objects: None

🔹 Data.Protection.Property.Coverage

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Property.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. A value of borrower1 represents single coverage on the primary borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Property object altogether or specify a value of none.


🟦 Data.Protection.Unemployment

TypeRequired
Objectno

The Unemployment object determines what type of unemployment coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm

Objects: None

🔹 Data.Protection.Unemployment.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Unemployment.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Unemployment object altogether or specify a value of none.

🔹 Data.Protection.Unemployment.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.


🟦 Data.ServiceCharges[]

TypeRequired
Array of ServiceCharge Objectsno

This array of ServiceCharge objects allows the calling application to specify one ore more Service Charge objects to be included with the loan.

Fields: 🔹CalcType, 🔸Entry, 🔹Exact, 🔹IsLoanCost, 🔹Name, 🔹Round

Objects: None

🔹 Data.ServiceCharges[].CalcType

TypeRequiredValuesDefault
StringnoLumpSum, PeriodicLumpSum

A service charge of type LumpSum allows the calling application to specify an amount that will be spread out evenly over the loan's payment stream. On the other hand, a Periodic service charge is the amount which will be added to each payment.

🔸 Data.ServiceCharges[].Entry

TypeRequiredValuesDefault
StringyesFloating >= 0n/a

How this field is interpreted depends upon the ServiceCharge.CalcType field. It is the numeric amount defining either the lump sum or periodically paid service charge.

🔹 Data.ServiceCharges[].Exact

TypeRequiredValuesDefault
Booleannotrue, falsefalse

The Exact field is only considered when the service charge is of type LumpSum. When the calculated periodic amount is rounded, it will most often times produce a total service charge amount that differs from what was specified.

If the Exact field is set to true, then the final periodic amount will be adjusted so that the sum of all periodic amounts is exactly equal to the entered amount (and will result in an odd final payment). A value of false indicates that the final periodic amount will not be adjusted.

🔹 Data.ServiceCharges[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which service charges need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.ServiceCharges[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the service charge in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.

🔹 Data.ServiceCharges[].Round

TypeRequiredValuesDefault
Stringnonearest, up, downnearest

This field is only considered when the service charge is of type LumpSum. It determines how the calculated periodic amount is rounded.


🟦 Data.Settings

TypeRequired
Objectno

The Settings object allows the calling application to alter the default loan calculation options.

Fields: 🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

Objects: None

🔹 Data.Settings.Account

TypeRequiredValuesDefault
StringnoInteger in [1..9999]1

The Account field specifies the numeric setup file account number that will be used to compute the requested loan. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which may affect the loan calculation, such as the accrual method, insurance methods / rates / caps, etc.

🔹 Data.Settings.AccrualCode

TypeRequiredValuesDefault
Stringnosee tabledefault

The method of interest accrual is defined by this field. A value of default informs the SCE to use the interest accrual method defined in the setup file for the specified Account. All other valid accrual codes are described in the table below.

🔹 Data.Settings.ConMethod

TypeRequiredValuesDefault
Stringnodefault, simple, interestonlydefault

When computing a construction loan, there are two supported methods for computing interest during the constrcution period:

If the value of this field is simple, then the estimated construction interets will be computed and disclosed as a lup-sum prepaid fee (see the Moneys.ConstructInterest response field).

If the value of this field is interestonly, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

A value of default instructs the SCE to use the construction method specified in the setup file for the given account.

🔹 Data.Settings.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.Settings.Lastday

TypeRequiredValuesDefault
Booleannotrue, falseas configured in setup file

If present, this field overrides the Last Day setting in the setup files, which only applies to loans computed with an actual day accrual calendar where the first payment date falls at the end of a month with fewer than 31 days. As an example, if the first payment date is on April 30, should the following payment dates be made on the 30th of each month, or on the last day of the month?

If no value is specified for this field, then the setup file setting will be used. If true is specified, then conditions triggering a last day situation will result in payments which fall at the end of the month. A value of false indicates that when dictated, subsequent payment dates will not be moved to the last day of the month.

🔹 Data.Settings.OddFinal

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Following the last payment of an amortization schedule, the ending balance is unlikely to be zero due to the rounding of the payment. In order to assure perfect amortization, lenders will use an odd final payment to perfectly amortize the loan.

Set OddFinal to true to ensure perfect amortization with a payment that pays off the loan.

🔹 Data.Settings.PmtDollarRound

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Payments are normally rounded to the penny, according to the method specified by in the setup file, or vy theSettings.PmtRound field. If the payment should be rounded to the dollar instead of the penny, then set the value of this field to true.

Note that for some loans (such as those with longer terms or relatively small proceeds), rounding the payment up or to the nearest dollar may require a shortened loan term to prevent one or more negative payments at the end of the loan.

🔹 Data.Settings.PmtRound

TypeRequiredValuesDefault
Stringnodefault, nearest, up, down, bestdefault

How are calculated payments to be rounded at and beyond this event? best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen. default means that the setting should be configured as specified in the setup file.

🔹 Data.Settings.ShowAmTable

TypeRequiredValuesDefault
Booleannotrue, falsetrue

To supress the entire amortization schedule from the response, set value of this field to false; otherwise, the amortization schedule will be returned with the response.

🔹 Data.Settings.TILARESPA2015

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will include data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015. If the field is omitted or set to false, then the TILA RESPA outputs will not be generated.

Note that this field is supported for equal payment loans, balloon payment loans, single payment notes, interest only loans, fixed principal plus interest loans, skips, pickups and irregulars, and ARMs.

🔹 Data.Settings.YieldPPY

TypeRequiredValuesDefault
Stringno0, 2, 4, 6, 120

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than `0', this field determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this field with a value other than zero, the calling application must include an odd days prepaid fee in the request.


Equal Payment Loan Module - Response

The Data object for a response from the EqualPmt module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data🔹Country
|- 🟥 Errors[]
|- 🟥 Warnings[]
|- 🟦 Results🔹Proceeds, 🔸Payment, 🔹Final, 🔹Term
|- 🟦 FedBox🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice
|- |- 🟥 APR🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type
|- |- 🟦 MAPR🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded
|- 🟦 TILARESPA2015🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP
|- |- 🟥 LoanCosts[]🔹Name, 🔹In5Years, 🔸Value
|- |- 🟥 In5Years🔸PaidTotal, 🔸PaidPrincipal
|- |- 🟥 MaxPnIPmt🔸Date, 🔸Amount
|- |- 🟥 MinRate🔸Rate, 🔸Idx
|- |- 🟥 MaxRate🔸Rate, 🔸Idx
|- |- 🟥 ProjectedPaymentsTable[]🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax
|- 🟦 Moneys🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹PMI_Fee, 🔹MinIntChgAdj, 🔹MinFinChgAdj
|- |- 🟦 ODI🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost
|- |- 🟦 Fees[]🔹Name, 🔸Fee
|- |- 🟦 ServiceCharges[]🔹Name, 🔸Fee
|- |- 🟦 Protection🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory
|- 🟦 Accrual🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity
|- 🟦 PMI🔸Rate, 🔸LTV, 🔸PremiumPerYear, 🔸PremiumPerPeriod, 🔹IndexToWarn, 🔹IndexToRemove
|- 🟦 PmtStreams[]🔸Term, 🔸Pmt, 🔹Rate, 🔸Begin
|- 🟦 Protection
|- |- 🟦 Life🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟦 Level🔸Result, 🔸Formula
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Disability🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Unemployment🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Property🔸Result, 🔸Formula
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- 🟦 AmTable🔹Months, 🔹Weeks, 🔹OddDays
|- |- 🟦 GrandTotals🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot, 🔹PMITot, 🔹SCTot
|- |- 🟦 SubTotals[]🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub, 🔹PMISub, 🔹SCSub
|- |- 🟥 AmLines[]🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹PMI, 🔹SC, 🔹UnpaidInt, 🔸EndBal

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔹Country

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Results, 🟦 FedBox, 🟦 TILARESPA2015, 🟦 Moneys, 🟦 Accrual, 🟦 PMI, 🟦 PmtStreams[], 🟦 Protection, 🟦 AmTable

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

If the request specified a two-character or three-digit Country code, then this field will be present and will contain the full name of the country associated with the specified code. Please see the Countries Appendix for the list of supported countries and their associated codes.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "EqualPmt",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?",
    "IntRate" : "4.50",
    "Proceeds" : "5000.00",
    "Term" : "12"
  }
}
{
  "Result" : 200,
  "Module" : "EqualPmt",
  "Data" : {
    "Errors" : [
      "Data.LoanDate (StringDate) not found.",
      "Data.PmtDate (StringDate) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

🟦 Data.Results

TypeRequired
Objectno

This field(s) of this object represent the most important numerical results for the loan request.

Fields: 🔹Proceeds, 🔸Payment, 🔹Final, 🔹Term

Objects: None

🔹 Data.Results.Proceeds

TypeRequiredValuesDefault
StringnoCurrencyn/a

If the EqualPmt request indicated that the Proceeds be computed (by specifying the IntRate, Term, and Payment), then the computed proceeds will be disclosed in this field.

If the EqualPmt request was to compute the Payment or Term, then this field will not be included in the response.

🔸 Data.Results.Payment

TypeRequiredValues
StringyesCurrency

The regular payment for the equal payment loan.

🔹 Data.Results.Final

TypeRequiredValues
StringnoCurrency

If the equal payment loan features an odd final payment (see Settings.OddFinal) which amortizes the loan to zero, then this field will be present.

🔹 Data.Results.Term

TypeRequiredValuesDefault
StringnoIntegern/a

If the EqualPmt request indicated that the Term be computed (by specifying the IntRate, Proceeds, and Payment), then the computed Term will be disclosed in this field. Note that the value of this field represents the largest loan term to produce a payment less than or equal to the specified payment.

If the EqualPmt request was to compute the Payment or Proceeds, then this field will not be included in the response.


🟦 Data.FedBox

TypeRequired
Objectno

This object groups together all fields which contain important numerical information, as defined in the Truth-In-Lending laws (Regulation Z).

Fields: 🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice

Objects: 🟥 APR, 🟦 MAPR

🔸 Data.FedBox.AmtFin

TypeRequiredValue
StringyesCurrency > 0.0

The Regulation Z Amount Financed, which is defined as the amount of credit provided to the borrower or on their behalf.

🔸 Data.FedBox.FinChg

TypeRequiredValue
StringyesCurrency

This element contains the Regulation Z Finance Charge, described as the dollar amount the credit extension will cost the borrower.

🔸 Data.FedBox.TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

The amount which the borrower will have paid when the borrower has made all scheduled payments.

🔹 Data.FedBox.TotalSalePrice

TypeRequiredValue
StringyesCurrency > 0.0

The sum of the total of payments plus the total down payment. Please note that if no TotalDown field was included in the request, then this element will not be present.


🟥 Data.FedBox.APR

TypeRequired
Objectyes

The APR object contains fields which return the value and APR method used.

Fields: 🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type

Objects: None

🔸 Data.FedBox.APR.Value

TypeRequiredValue
StringyesNumber

The computed APR, which is the cost of the extension of credit expressed as a yearly rate.

🔹 Data.FedBox.APR.Max

TypeRequiredValueDefault
StringnoNumbern/a

This field returns the maximum APR as configured in the account's setup files. If no maximum APR has been specified, then this field will not be present in the response. The value of this field should be displayed as a percentage.

🔹 Data.FedBox.APR.MaxExceeded

TypeRequiredValueDefault
Booleannotrue, falsen/a

If a maximum APR is configured in the account's setup files, then the value of this field indicates whether or not the current loan exceeds the maximum APR. If no maximum APR has been specified, then this field will not be present in the response.

🔸 Data.FedBox.APR.Type

TypeRequiredValue
StringyesText

This field returns the APR method used to compute the reported APR.


🟦 Data.FedBox.MAPR

TypeRequired
Objectno

The MAPR (military APR) object is only returned with the response if the value of the Apr.UseMAPR request field is true.

Fields: 🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded

Objects: None

🔸 Data.FedBox.MAPR.Value

TypeRequiredValue
StringyesNumber

The computed military APR.

🔸 Data.FedBox.MAPR.Advance

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the equivalent of the Amount Financed for the Military APR. Specifically, it is the principal balance less any MAPR fees, debt protection, etc.

🔸 Data.FedBox.MAPR.Max

TypeRequiredValue
StringyesNumber

This field holds the maximum Military APR as specified in the input XML (see Apr.MAPR_Max). If not specified, a default value of 36% is assumed. The value of this field should be displayed as a percentage. As an example, for "Max" :"36.000", you would disclose a maximum Military APR of 36%.

🔸 Data.FedBox.MAPR.MaxExceeded

TypeRequiredValue
Booleanyestrue, false

The value of this field indicates whether or not the current loan exceeds the maximum allowed Military APR. As an example, if the maximum APR has been set to 36% and the Military APR for the returned loan was 37.125%, the MAPR object would be:

{
  "MAPR" : {
    "Value" : "37.125",
    "Advance" : "1350.00",
    "Max" : "36.000",
    "MaxExceeded" : true
 }
}


🟦 Data.TILARESPA2015

TypeRequired
Objectno

This object contains fields which are of interest to fulfilling the 2015 TILA RESPA rule. It will only be present if the Settings.TILARESPA2015 field in the request is set to true.

Fields: 🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP

Objects: 🟥 LoanCosts[], 🟥 In5Years, 🟥 MaxPnIPmt, 🟥 MinRate, 🟥 MaxRate, 🟥 ProjectedPaymentsTable[]

🔸 Data.TILARESPA2015.TotalLoanCost

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field is the sum of all borrower paid loan costs. Since all LoanCost values are rounded dollar amounts, the value of this element will also be a rounded dollar amount.

🔸 Data.TILARESPA2015.CD_TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the sum of the total of payments, all borrower paid loan costs, and any odd days interest that is prepaid at loan closing. This value should be disclosed on the Closing Disclosure form in the Total of Payments field.

🔸 Data.TILARESPA2015.TIP

TypeRequiredValue
StringyesNumber

The total interest percentage, rounded to three or fewer decimal places - as required.


🟥 Data.TILARESPA2015.LoanCosts[]

TypeRequired
Array of LoanCost Objectsyes

For every object in the Fees[] array present in the request which has its IsLoanCost field set to true (and hence, is a borrower paid loan cost) and whose amount is greater than zero (except odd days interest fee types, as explained in the previous documentation of the Fee and object), there will be a corresponding LoanCost object.

Fields: 🔹Name, 🔹In5Years, 🔸Value

Objects: None

🔹 Data.TILARESPA2015.LoanCosts[].Name

TypeRequiredValueDefault
StringnoTextn/a

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔹 Data.TILARESPA2015.LoanCosts[].In5Years

TypeRequiredValueDefault
StringnoCurrency >= 0Same as Value

If the entire amount of the fee is different from the amount collected over the first five years (for example, a service charge), then this field will be present and disclose the portion of this loan coast that is accrued during the first five years.

🔸 Data.TILARESPA2015.LoanCosts[].Value

TypeRequiredValue
StringyesCurrency >= 0

The value of this field is the numerical value of the fee, rounded to the nearest dollar.


🟥 Data.TILARESPA2015.In5Years

TypeRequired
Objectyes

This object contains all important values required for the new "In 5 Years" section of the disclosure.

Fields: 🔸PaidTotal, 🔸PaidPrincipal

Objects: None

🔸 Data.TILARESPA2015.In5Years.PaidTotal

TypeRequiredValue
StringyesCurrency >= 0

This field holds the sum of all "principal, interest, mortgage insurance, and borrower paid loan costs scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.

🔸 Data.TILARESPA2015.In5Years.PaidPrincipal

TypeRequiredValue
StringyesCurrency >= 0

This field holds "the principal scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.


🟥 Data.TILARESPA2015.MaxPnIPmt

TypeRequired
Objectyes

The fields of this object hold the maximum sceduled principal and interest payment during the term of the loan, as well as the date on which that payment is made.

Fields: 🔸Date, 🔸Amount

Objects: None

🔸 Data.TILARESPA2015.MaxPnIPmt.Date

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field returns the date on which the maximum scheduled principal and interest payment is made. If the maximum scheduled payment occurs more than once, then the date returned is that of the first instance.

🔸 Data.TILARESPA2015.MaxPnIPmt.Amount

TypeRequiredValue
StringyesCurrency >= 0

The maximum sceduled principal and interest payment during the term of the loan.


🟥 Data.TILARESPA2015.MinRate

TypeRequired
Objectyes

The fields of this object hold information regarding the minimum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MinRate.Rate

TypeRequiredValue
StringyesNumber

The value of the minimum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MinRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the minimum rate is first applicable.


🟥 Data.TILARESPA2015.MaxRate

TypeRequired
Objectyes

The fields of this object hold information regarding the maximum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MaxRate.Rate

TypeRequiredValue
StringyesNumber

The value of the maximum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MaxRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the maximum rate is first applicable.


🟥 Data.TILARESPA2015.ProjectedPaymentsTable[]

TypeRequired
Array of PPCol Objectsyes

Fields: 🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax

Objects: None

This field returns an Array of projected payment table columns (PPCol), with each array member detailing a single column. Per the regulation, there will be a minimum of one column and a maximum of four columns, depending upon the parameters of the loan.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Num

TypeRequiredValue
StringyesInteger in [1...4]

The value of this field identifies the number of the column to which the following fields apply. The value will be from 1 to 4.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Title

TypeRequiredValue
StringyesText

The value of this field is the title for the column. Most of the time, it will be in the form of Years X - Y, or Year X, or Final Payment in the case of a final balloon payment.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearStart

TypeRequiredValue
StringyesInteger

The beginning year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearEnd

TypeRequiredValue
StringyesInteger

The ending year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMin

TypeRequiredValue
StringyesCurrency > 0

The minimum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMax

TypeRequiredValue
StringyesCurrency > 0

The maximum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].IntOnly

TypeRequiredValue
Stringyesnone, some, all

If none of the payments associated with this column are interest only payments, then the value of this field will be none. A value of some means that some of the payments (but not all) associated with this columnt are interest only. Finally, a value of all indicates that all payments associated with this columnt are interest only.

Note that for the purposes of this field, a scheduled payment is considered an interest only payment if the payment amount pays off all interest due at the time of the payment, with no reduction in the principal balance.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Balloon

TypeRequiredValue
Booleanyestrue, false

If any of the payments associated with this column are balloon payments (e.g. isolated payments that are more than twice the value of a regular periodic payment), then the value of this field will be true.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].MIPmt

TypeRequiredValue
StringyesCurrency > 0

The value of this field holds the mortgage insurance premium associated with this column, rounded to the nearest dollar. If no mortgage insurance is present or coverage has been dropped, a value of zero will be present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMin

TypeRequiredValue
StringyesCurrency > 0

This field returns the minimum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMax

TypeRequiredValue
StringyesCurrency > 0

This field returns the maximum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.


🟦 Data.Moneys

TypeRequired
Objectno

This element groups together those other major cash result amounts not disclosed under the FedBox object, such as the principal balance, interest charge, and fee amounts.

Fields: 🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹PMI_Fee, 🔹MinIntChgAdj, 🔹MinFinChgAdj

Objects: 🟦 ODI, 🟦 Fees[], 🟦 ServiceCharges[], 🟦 Protection

🔸 Data.Moneys.Principal

TypeRequiredValue
StringyesCurrency >= 0

The principal balance is the amount on which interest is accrued. The principal balance consists of all advances requested by the borrower, as well as any fees and/or protection products which are financed.

🔸 Data.Moneys.Interest

TypeRequiredValue
StringyesCurrency

This value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments.

🔹 Data.Moneys.ConstructInterest

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If the requested loan is a construction loan with a permanent loan attached and the account specified is set up to compute construction loans via the "Simple" method, then this field will contain the construction interest for the requested loan.

Note that if a permanent loan is attached to a construction loan and the account is set up to use the "LaserPro" method, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

If the requested loan is a construction loan without a permanent loan attached, then the construction interest will be disclosed in the Moneys.Interest field.

If the requested loan was not a construction loan, or if construction loans have not been set up for the given account, then this field will not appear in the response.

🔹 Data.Moneys.FinFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field contains the sum of all fees having AddToPrin set to true and occuring on the date of an advance. If this value is zero, the field will not appear in the response.

🔹 Data.Moneys.Prepaid

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field represents all prepaid finance charges and contains the sum of all fees occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will not be found in the response.

🔹 Data.Moneys.PocketFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are neither financed, nor added to the finance charge. In essence, they are paid out of the borrower's pocket. If no out of pocket fees were requested, then this field will not show up in the response.

🔹 Data.Moneys.MAPRFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are Military APR fees (including protection products), and will only appear if the Military APR has been requested.

🔹 Data.Moneys.PMI_Fee

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If PMI has been requested on the loan, and if a number of UpFront payments have been specified, then this field will return the total PMI fee for all up front payments.

🔹 Data.Moneys.MinIntChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum interest charge is configured in the account's setup files and the final payment was adjusted to meet this minimum interest charge, then this field will be returned in the response and will contain the value of the minimum interest charge adjustment.

🔹 Data.Moneys.MinFinChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum finance charge is configured in the account's setup files and the final payment was adjusted to meet this minimum finance charge, then this field will be returned in the response and will contain the value of the minimum finance charge adjustment.


🟦 Data.Moneys.ODI

TypeRequired
Objectno

This object, if present, contains information regarding odd days interest. If no odd days interest was requested, then this object will not be present in the response.

Fields: 🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost

Objects: None

🔹 Data.Moneys.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsen/a

If the odd days interest has been added to the first payment, then this field will be present in the response with a value of true. If the odd days interest has been treated as a prepaid finance charge, then this field will not be present and a default value of false should be assumed.

🔸 Data.Moneys.ODI.Count

TypeRequiredValues
StringyesInteger >= 0

Discloses the number of odd days computed by the SCE for the requested loan.

🔸 Data.Moneys.ODI.Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total amount odd days interest charge.

🔹 Data.Moneys.ODI.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field holds the number of odd months computed by the SCE for the requested loan when using odd days accrual method 250. If the odd days accrual method is a value other than 250, then this field will not be present in the ODI object of the response.

🔹 Data.Moneys.ODI.DailyCost

TypeRequiredValueDefault
StringnoCurrency >= 0.0n/a

If the odd days interest fee is computed using a rounded daily cost, then the value of this field will hold that value. If the odd days interest is not computed using a rounded daily cost, then this field will not be present in the response.


🟦 Data.Moneys.Fees[]

TypeRequired
Array of Fee Objectsno

If the requested loan included fees, then for each fee in the loan there will be a Fee object in this array containing the name of the fee and the computed fee amount.

If there were no fees requested with the loan, then the Moneys.Fees[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.Fees[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed fee amount.


🟦 Data.Moneys.ServiceCharges[]

TypeRequired
Array of ServiceCharge Objectsno

If the requested loan included service charges, then for each service charge in the loan there will be a ServiceCharge object in this array containing the name of the service charge and the computed service charge amount.

If there were no service charges requested with the loan, then the Moneys.ServiceCharges[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.ServiceCharges[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the service charge, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.ServiceCharges[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed service charge amount.


🟦 Data.Moneys.Protection

TypeRequired
Objectno

This object returns summary information on all payment protection products computed with the loan. If no protection products were included with the loan, then this object will be omitted from the response.

Fields: 🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory

Objects: None

🔸 Data.Moneys.Protection.Cost

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total cost of all protection plans included with the computed loan. For the individual plan costs, see the Protection field described below.

🔸 Data.Moneys.Protection.PerPmt

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per payment.

🔸 Data.Moneys.Protection.PerDay

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per day.

🔸 Data.Moneys.Protection.Category

TypeRequiredValues
StringyesNone, SP, MOB, TrueMOB, PaidSP

Te value of this field specifies the category under which the computed loan protection falls. The categories are described below:

CategoryDescription
NoneNo loan protection products were computed with this loan.
SPFinanced single premium coverage.
MOBMonthly outstanding balance coverage.
TrueMOBTruStage's monthly outstanding balance method.
PaidSPNon-financed single premium coverage.

🔹 Data.Moneys.Protection.IsDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field indicates if the specified account's protection is set up as debt protection. If this field is not present, then the default value of false should be used (which indicates that the account's protection is set up as insurance instead).

🔹 Data.Moneys.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field should only appear in the response if the value of the is true. If this field does not appear in the output, then the value should default to false.

If the value of the Mandatory field is true, then the total premium / fee amount for all insurance / debt protection products has been treated as a part of the Finance Charge, and hence will affect the effective APR.


🟦 Data.Accrual

TypeRequired
Objectno

This object groups together interest accrual information, such as the accrual method(s) used, days to the first payment and the loan's maturity date.

Fields: 🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity

Objects: None

🔸 Data.Accrual.Method

TypeRequiredValues
StringyesText

The Method field contains a textual description of the interest accrual method used to compute the loan (e.g. "Unit Period 365 Simple".)

🔸 Data.Accrual.Days1Pmt

TypeRequiredValues
StringyesInteger >= 0

This field contains the number of days between the date of the first advance and the date of first payment, computed by one of two methods as specified in by Accrual.DayCount (below).

🔸 Data.Accrual.DayCount

TypeRequiredValues
StringyesTrue360, Actual

This field specifies the method used to compute the number of days from the date of the first advance until the first payment date. Actual means that the actual number of days between these two dates are used, whereas the True360 method use a 360 day calendar.

🔸 Data.Accrual.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

Holds the maturity date of the loan, which is the date on which the last payment is scheduled. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.PMI

TypeRequired
Objectno

The PMI object will only appear if PMI has been computed with the loan. Please note that the PMI premiums are not reflected in the amount reported in the Results.Payment field, the PmtStreams[] array, the FedBox.TotPmts field, nor the Pmt field of the AmTable.AmLines[] array.

Fields: 🔸Rate, 🔸LTV, 🔸PremiumPerYear, 🔸PremiumPerPeriod, 🔹IndexToWarn, 🔹IndexToRemove

Objects: None

🔸 Data.PMI.Rate

TypeRequiredValues
Stringyes% >= 0

The percentage rate used in the PMI calculation.

🔸 Data.PMI.LTV

TypeRequiredValues
Stringyes% >= 0

The loan to value ratio of the computed loan, expressed as a percentage.

🔸 Data.PMI.PremiumPerYear

TypeRequiredValues
StringyesCurrency >= 0

The annual PMI premium amount.

🔸 Data.PMI.PremiumPerPeriod

TypeRequiredValues
StringyesCurrency >= 0

The periodic PMI premium amount.

🔹 Data.PMI.IndexToWarn

TypeRequiredValuesDefault
StringnoInteger > 0n/a

This field only appears if the WarnLTV PMI input field is specified, and indicates that the payment index on which the remaining principal balance to home value ratio drops below the specified percentage.

🔹 Data.PMI.IndexToRemove

TypeRequiredValuesDefault
StringnoInteger > 0n/a

This field only appears if the DropLTV PMI input field is specified, and indicates that the payment index on which the remaining principal balance to home value ratio drops below the specified percentage. PMI coverage stops after this payment.


🟦 Data.PmtStreams[]

TypeRequired
Objectno

The PmtStreams[] array is made up of one or more PmtStream objects (there will always be at least one of these elements, and there may be more than one depending upon the loan type). The PmtStream objects describe the scheduled stream of payments for the computed loan. Instead of disclosing each and every payment individually (which can be done with the AmTable object), the payment stream groups together consecutive equal payments at the same interest rate to produce output along the lines of:

{
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "50.13",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "10",
        "Pmt" : "37.59",
        "Rate" : "4.500",
        "Begin" : "2022-11-01"
      },
      {
        "Term" : "1",
        "Pmt" : "10062.59",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ]
}

Each object describes a single stream of equal payments at the same interest rate, using the following fields to define the important properties of each payment stream.

Fields: 🔸Term, 🔸Pmt, 🔸Rate, 🔸Begin

Objects: Note

🔸 Data.PmtStreams[].Term

TypeRequiredValues
StringyesInteger >= 0

The Term field holds the number of payments that make up the given payment stream.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValues
StringyesCurrency > 0

The Pmt field holds the computed payment amount for this payment stream.

🔹 Data.PmtStreams[].Rate

TypeRequiredValues
StringyesNumber

Contains the interest rate used for the duration of this payment stream. If this payment stream accrued interest using split-rate tiers, then this field will not be returned.

🔸 Data.PmtStreams[].Begin

TypeRequiredValues
StringyesYYYY-MM-DD

This field identifies the date on which the first payment for this given payment stream is scheduled to be made. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.Protection

TypeRequired
Objectno

If protection products are requested, then this object will be present in the response, along with a field for each requested protection product.

Fields : None

Objects: 🟦 Life, 🟦 Level, 🟦 Disability, 🟦 Unemployment, 🟦 Property


🟦 Data.Protection.Life

TypeRequired
Objectno

If life protection was requested with the loan and decreasing life was configured for this loan type, then the Life object will be present in the response to return information on decreasing life coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Life.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Life.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Life.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Life.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Life.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Life.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Life.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Life.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Life.Cost.Premium2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary life product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Life.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Life.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Life.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Life.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Life.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Life.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Life.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Term

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Level

TypeRequired
Objectno

If level protection was requested with the loan and decreasing level was configured for this loan type, then the Life object will be present in the response to return information on decreasing level coverage.

Fields: 🔸Result, 🔸Formula,

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Level.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Level.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🟦 Data.Protection.Level.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Level.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Level.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Level.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Level.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Level.Cost.Premium2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary Level product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Level.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Level.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Level.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Level.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Level.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Level.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Level.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Disability

TypeRequired
Objectno

If disability protection was requested with the loan and decreasing disability was configured for this loan type, then the Life object will be present in the response to return information on decreasing disability coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Disability.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Disability.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Disability.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Disability.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Disability.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Disability.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Disability.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Disability.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Disability.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Disability.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Disability.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Disability.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Disability.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Disability.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Disability.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower2

TypeRequired
Objectno

The borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Disability.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Unemployment

TypeRequired
Objectno

If unemployment protection was requested with the loan and decreasing unemployment was configured for this loan type, then the Life object will be present in the response to return information on decreasing unemployment coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Unemployment.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Unemployment.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Unemployment.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Unemployment.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Unemployment.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Unemployment.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Unemployment.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Unemployment.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Unemployment.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Unemployment.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Unemployment.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Unemployment.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Unemployment.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Unemployment.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Unemployment.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Unemployment.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Unemployment.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Unemployment.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Unemployment.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Unemployment.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Unemployment.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Unemployment.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Unemployment.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Unemployment.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Unemployment.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Unemployment.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Unemployment.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Property

TypeRequired
Objectno

If property protection was requested with the loan and decreasing property was configured for this loan type, then the Property object will be present in the response to return information on decreasing property coverage.

Fields: 🔸Result, 🔸Formula,

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Property.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Property.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.


🟦 Data.Protection.Property.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Property.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Property.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Property.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Property.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Property.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Property.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Property.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Property.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Property.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Property.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Property.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Property.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Property.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Property.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Property.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Property.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Property.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Property.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Property.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Property.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Property.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Property.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Property.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Property.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Property.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Property.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Property.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Property.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Property.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Property.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Property.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Property.Caps.Term

TypeRequiredValues
StringyesInteger

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Property.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Property.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.AmTable

TypeRequired
Objectno

This object contains fields which summarize and describe the loan's amortization schedule. If Settings.ShowAmTable is set to false, then this object will not be found in the response.

Fields: 🔹Months, 🔹Weeks, 🔹OddDays

Objects: 🟦 GrandTotals, 🟦 SubTotals[], 🟥 AmLines[]

🔹 Data.AmTable.AvgBal

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the average balance of the loan used in the Canadian APR calculation.

🔹 Data.AmTable.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of months in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.Weeks

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of weeks in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.OddDays

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the number of odd days in the term of the loan used in the Canadian APR calculation. Odd days are computed by moving backwards from the maturity date the number of disclosed months or weeks, and then counting the additional number of days required to land on the loan date.

🟦 Data.AmTable.GrandTotals

TypeRequired
Objectno

This object describes the total amounts of various categories throughout the life of the loan. As an example, the total amount paid to interest and principal, as well as the total of payments are all contained in fields of this object.

Fields: 🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot, 🔹PMITot, 🔹SCTot

Objects: None


🔸 Data.AmTable.GrandTotals.PmtTot

TypeRequiredValues
StringyesCurrency

The total of payments scheduled for the computed loan.

🔸 Data.AmTable.GrandTotals.IntTot

TypeRequiredValues
StringyesCurrency

The total amount paid to interest over the life of the loan, assuming all payments are made as scheduled.

🔸 Data.AmTable.GrandTotals.PrinTot

TypeRequiredValues
StringyesCurrency

This field contains the total amount paid to principal during the loan term, assuming all payments are made as scheduled.

🔹 Data.AmTable.GrandTotals.CLTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLTot field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life over the duration of the loan.

🔹 Data.AmTable.GrandTotals.AHTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHTot field will only appear on loans with certain types of disability or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.IUTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUTot field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.PMITot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The PMITot field will only appear on loans with PMI insurance where the PMI premiums were requested in the amortization schedule. It contains the total PMI amount paid (not including any up front periodic PMI premiums)for PMI over the duration of the loan.

🔹 Data.AmTable.GrandTotals.SCTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The SCTot field will only appear on loans with service charges. It contains the total service charge amount paid over the duration of the loan.


🟦 Data.AmTable.SubTotals[]

TypeRequired
Array of SubTotal Objectsno

Describes the total amounts of various categories paid during a given calendar year. For each year in which the computed loan has scheduled payments, there will be a SubTotal object in the array.

Fields: 🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub, 🔹PMISub, 🔹SCSub

Objects: None

🔸 Data.AmTable.SubTotals[].Year

TypeRequiredValues
StringyesInteger >= 0

The calendar year for which the subtotal data is applicable.

🔸 Data.AmTable.SubTotals[].Start

TypeRequiredValues
StringyesInteger >= 0

This field defines the first amortization event which falls in the specified calendar year. To find the AmLines[] object which corresponds to this value, match the Idx field of the AmLine object.

🔸 Data.AmTable.SubTotals[].Events

TypeRequiredValues
StringyesInteger >= 0

This field defines the number of amortization events which belong to this calendar year.

🔸 Data.AmTable.SubTotals[].PmtSub

TypeRequiredValues
StringyesCurrency

Contains the total of payments scheduled for the calendar year.

🔸 Data.AmTable.SubTotals[].IntSub

TypeRequiredValues
StringyesCurrency

Holds the total amount paid to interest over the calendar year, assuming all payments are made as scheduled.

🔸 Data.AmTable.SubTotals[].PrinSub

TypeRequiredValues
StringyesCurrency

Contains the total amount paid to principal during the calendar year, assuming all payments are made as scheduled.

🔹 Data.AmTable.SubTotals[].CLSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLSub field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life during the year.

🔹 Data.AmTable.SubTotals[].AHSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHSub field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection during the year.

🔹 Data.AmTable.SubTotals[].IUSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUSub field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for involuntary unemployment during the year.

🔹 Data.AmTable.SubTotals[].PMISub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The PMISub field will only appear on loans with PMI insurance where the PMI premiums were requested in the amortization schedule. It contains the total PMI amount paid (not including any up front periodic PMI premiums) for PMI during the year.

🔹 Data.AmTable.SubTotals[].SCSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The SCSub field will only appear on loans with service charges. It contains the total of service charges paid during the year.


🟥 Data.AmTable.AmLines[]

TypeRequired
Array of AmLine Objectsyes

There is one AmLine object for each amortization event which occurs during the life of a loan. Most of the time, each event will describe a payment, and detail how that payment is applied (to interest, principal, loan protection products, etc.). Some events, such as capitalizing interest, will not have payments but will show how the loan amortizes.

Fields: 🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹PMI, 🔹SC, 🔹UnpaidInt, 🔸EndBal

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValues
StringyesInteger >= 0

The index of the amortization event, which is either the payment number, or zero. A value of zero designates an event that is either not a payment or is a skipped payment.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The date on which the amortization event is scheduled to occur. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 AmData.AmTable.AmLines[]ine.BegBal

TypeRequiredValues
StringyesCurrency >= 0

The principal balance before the amortization event occurs.

🔸 Data.AmTable.AmLines[].Pmt

TypeRequiredValues
StringyesCurrency

The payment amount for this event.

🔸 Data.AmTable.AmLines[].Int

TypeRequiredValues
StringyesCurrency

The amount of interest paid at this event.

🔸 Data.AmTable.AmLines[].Prin

TypeRequiredValues
StringyesCurrency

The amount of principal paid at this event.

🔹 Data.AmTable.AmLines[].CL

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CL field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for life coverage.

🔹 Data.AmTable.AmLines[].AH

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AH field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for disability / debt protection coverage.

🔹 Data.AmTable.AmLines[].IU

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IU field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for this coverage.

🔹 Data.AmTable.AmLines[].PMI

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field contains the PMI premium for this payment, and will only show up if PMI has been computed for this payment and if PMI premiums should be displayed in the amortization schedule.

🔹 Data.AmTable.AmLines[].SC

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field contains the total service charge for this payment, and will only be present if one or more service charges were requested with the loan.

🔹 Data.AmTable.AmLines[].UnpaidInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear on an amortization line when interest has been accrued, but has not yet been paid or added to the principal balance. If the interest accrued has not yet been rounded, then the unpaid interest will be displayed to four (4) decimal placed. If rounded, then the unpaid interest is displayed to two (2) decimal places.

🔸 Data.AmTable.AmLines[].EndBal

TypeRequiredValues
StringyesCurrency

The principal balance amount, after the amortization event has taken place.


Balloon Loans

Balloon payment loans are loans which have an irregular final payment, with all other payments in the payment stream being equal. There are three general ways to compute a balloon loan: specify the regular payment, specify the final payment, or specify an amortization term greater than the balloon loan term.

Specifying the regular or final payment is self-explanatory. However, specifying an amortization term requires a bit more explanation. Each type of balloon loan is described below with an example of each.

Sample Request

The following example is a request for a balloon payment loan loan with a specified regular payment of $297.84, proceeds of $10,000, 12 monthly payments, with interest accruing on an actual day / 365 U. S. Rule basis at a rate of 4.5%.

{
  "Module" : "Balloon",
  "Data" : {
    "LoanDate" : "2022-08-22",
    "PmtDate" : "2022-10-01",
    "IntRate" : "4.500",
    "Proceeds" : "10000.00",
    "Term" : "12",
    "RegPmt" : "297.84",
    "Settings" : {
      "AccrualCode" : "320"
    }
  }
}

Note that in the above request, the RegPmt field is specified. This instructs the SCE to perform a balloon with specified regular payment calculation. The following loan is identical to the one above, except that we are specifying a desired final payment (FinalPmt) instead of a regular payment:

{
  "Module" : "Balloon",
  "Data" : {
    "LoanDate" : "2022-08-22",
    "PmtDate" : "2022-10-01",
    "IntRate" : "4.500",
    "Proceeds" : "10000.00",
    "Term" : "12",
    "FinalPmt" : "7121.15",
    "Settings" : {
      "AccrualCode" : "320"
    }
  }
}

Instead of specifying a regular or final payment and computing the other, you may request a regular payment computed that is equivalent to that of a longer term equal payment loan, with the final payment computed to amortize the balloon loan at the shorter term. These are often called specified amortization term balloons, or Canadian roll-over balloon loans. The following is a sample request for a balloon payment loan calculation, where the amortization term (AmortTerm) is specified:

{
  "Module" : "Balloon",
  "Data" : {
    "LoanDate" : "2022-08-22",
    "PmtDate" : "2022-10-01",
    "IntRate" : "4.500",
    "Proceeds" : "10000.00",
    "Term" : "12",
    "AmortTerm" : "36",
    "Settings" : {
      "AccrualCode" : "320"
    }
  }
}

Sample Response

{
  "Result" : 200,
  "Module" : "Balloon",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Results" : {
      "Payment" : "297.84",
      "Final" : "7121.15"
    },
    "FedBox" : {
      "AmtFin" : "10000.00",
      "FinChg" : "397.39",
      "TotPmts" : "10397.39",
      "APR" : {
        "Value" : "4.495",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Principal" : "10000.00",
      "Interest" : "397.39"
    },
    "Accrual" : {
      "Method" : "Actual/365 US Rule",
      "Days1Pmt" : "40",
      "DayCount" : "Actual",
      "Maturity" : "2023-09-01"
    },
    "PmtStreams" : [
      {
        "Term" : "11",
        "Pmt" : "297.84",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "1",
        "Pmt" : "7121.15",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ],
    "AmTable" : {
      "GrandTotals" : {
        "PmtTot" : "10397.39",
        "IntTot" : "397.39",
        "PrinTot" : "10000.00"
      },
      "SubTotals" : [
        {
          "Year" : "2022",
          "Start" : "1",
          "Events" : "3",
          "PmtSub" : "893.52",
          "IntSub" : "121.69",
          "PrinSub" : "771.83"
        },
        {
          "Year" : "2023",
          "Start" : "4",
          "Events" : "9",
          "PmtSub" : "9503.87",
          "IntSub" : "275.70",
          "PrinSub" : "9228.17"
        }
      ],
      "AmLines" : [
        {
          "Idx" : "1",
          "Date" : "2022-10-01",
          "BegBal" : "10000.00",
          "Pmt" : "297.84",
          "Int" : "49.32",
          "Prin" : "248.52",
          "EndBal" : "9751.48"
        },
        ...,
        {
          "Idx" : "12",
          "Date" : "2023-09-01",
          "BegBal" : "7094.04",
          "Pmt" : "7121.15",
          "Int" : "27.11",
          "Prin" : "7094.04",
          "EndBal" : "0.00"
        }
      ]
    }
  }
}

Balloon Loan Module - Request

The fields of the Data object supported by a Balloon module request are defined in alphabetical order below:

ObjectFields
🟥 Data🔹AmortTerm,🔹Country,🔹FinalPmt, 🔸IntRate, 🔹IntStartDate, 🔸LoanDate, 🔸PmtDate, 🔹PPY, 🔸Proceeds, 🔸Term, 🔹TotalDown
|- 🟦 Apr🔹MAPR_Max, 🔹Method, 🔹UseMAPR
|- 🟦 Construction🔹HalfCommitment, 🔹PPY, 🔸Rate, 🔸Term
|- 🟦 Fees[]🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost,🔹MAPR, 🔹Max, 🔹Min, 🔹Name
|- 🟦 Format🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator
|- 🟦 MI🔹CashDown, 🔹LoanAmt, 🔸PropertyValue, 🔹Type
|- |- 🟦 Periodic🔹DropLTV, 🔹Term, 🔹WarnLTV
|- |- 🟥 Rates[]🔸Rate, 🔹Switch
|- |- 🟦 UpFront🔹Paid, 🔹Reduce, 🔹Units, 🔹Value
|- 🟦 ODI🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI
|- 🟦 Protection🔹Birthday1, 🔹Birthday2, 🔹Financed, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps
|- |- 🟦 Disability🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table
|- |- 🟦 Life🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates
|- |- 🟦 Property🔹Coverage, 🔹Covers
|- |- 🟦 Unemployment🔹Benefit, 🔹Covers, 🔹CovTerm
|- 🟦 ServiceCharges[]🔹CalcType, 🔸Entry, 🔹Exact, 🔹IsLoanCost, 🔹Name, 🔹Round
|- 🟦 Settings🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹AmortTerm, 🔹Country, 🔹FinalPmt, 🔸IntRate, 🔹IntStartDate, 🔸LoanDate, 🔸PmtDate, 🔹PPY, 🔸Proceeds, 🔹RegPmt, 🔸Term, 🔹TotalDown

Objects: 🟦 Apr, 🟦 Construction, 🟦 Fees[], 🟦 Format, 🟦 MI, 🟦 ODI, 🟦 Protection, 🟦 ServiceCharges[], 🟦 Settings

The fields of the Data object supported by the Balloon module request are defined in alphabetical order below:

🔹 Data.AmortTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

To compute a balloon loan with a specified amortization term, this field must be present in the request and contain a value greater than zero. If this field is omitted or holds a value of zero, then it will be ignored. Note that one of the balloon loan fields which dictate how a balloon loan is to be computed (i.e. AmortTerm, RegPmt, or FinalPmt) must contain a value greater than zero. If none of the fields holds a value greater than zero, or if more than one holds a value greater than zero, then the SCE will return with an error message indicating the problem.

The value of the AmortTerm field contains the desired amortization term (specified as the number of payments) to be used to compute the regular payment. The amortization term must be greater than the balloon loan term (e.g. Term), or else the balloon loan will not be able to be computed. In the sample above, we are requesting that the regular payment be computed as if the loan was an equal payment loan with a term of 36 payments, with the final payment computed to amortize the balloon loan after 12 months.

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

This field allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see the Countries Appendix for the list of supported countries and their associated codes.

Specifying the Country will also set the default value for the APR.Method and Format.CurrencyDecimals fields, as appropriate for the country specified.

🔹 Data.FinalPmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

To compute a balloon loan with a specified final payment, this field must be present in the request and contain a value greater than zero. If this field is omitted or holds a value of zero, then it will be ignored. Note that one of the balloon loan fields which dictate how a balloon loan is to be computed (i.e. AmortTerm, RegPmt, or FinalPmt) must contain a value greater than zero. If none of the fields holds a value greater than zero, or if more than one holds a value greater than zero, then the SCE will return with an error message indicating the problem.

The value of the FinalPmt field contains the desired final payment amount, which will be used to compute a regular payment. In the sample at the start of this chapter, we are requesting a balloon loan with a specified final payment of $7121.15 and the regular payment computed to amortize the balloon loan after 12 months.

🔸 Data.IntRate

TypeRequiredValues
StringyesNumber in [-99.999...600]

Determine the interest rate used for the loan. The interest rate should be expressed as a percentage. For example, a loan computed with a rate of 5.125% would be specified as "IntRate" : "5.125".

🔹 Data.IntStartDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDsame value as LoanDate

This field contains the date on which interest begins to accrue on the loan's principal balance. If this field is not specified, then the interest start date is set equal the loan date. Also note that the interest start date must be equal to the loan date when computing a construction loan.

The interest start date (when specified) must be on or after the loan date, as well as on or before the first payment date.

🔸 Data.LoanDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field holds the date on which the loan amount is disbursed and interest begins to accrue. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔸 Data.PmtDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field specifies the first (and for single payment notes, only) payment date in the loan's repayment schedule. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for payments per year, and determines the payment frequency for the requested loan. The default value of 12 will result in a loan with 12 payments per year. If you require a loan with a payment frequency other than monthly, specify it using this field.

🔸 Data.Proceeds

TypeRequiredValues
StringyesCurrency > 0

The proceeds specified indicate the amount of money the borrower is requesting, and does not include financed fees, financed insurances, etc.

🔹 Data.RegPmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

To compute a balloon loan with a specified regular payment, this field must be present in the request and contain a value greater than zero. If this field is omitted or holds a value of zero, then it will be ignored. Note that one of the balloon loan fields which dictate how a balloon loan is to be computed (i.e. AmortTerm, RegPmt, or FinalPmt) must contain a value greater than zero. If none of the fields holds a value greater than zero, or if more than one holds a value greater than zero, then the SCE will return with an error message indicating the problem.

The value of the RegPmt field contains the desired regular payment amount, which will be used to compute a final balloon payment. In the sample at the start of this chapter, we are requesting a balloon loan with a specified regular payment of $297.84 and the final payment computed to amortize the balloon loan after 12 months.

🔹 Data.TotalDown

TypeRequiredValuesDefault
StringnoCurrency > 00

This optional field represents the total down payment that the borrower has applied to reduce the requested proceeds. It may consist of a cash down payment, net trade-in value, or rebate. You only need to specify a total down payment if the loan needs to disclose a total sale price. Typical examples of these loan types are auto and boat loans.

🔸 Data.Term

TypeRequiredValues
StringyesInteger > 1

The Term field indicates the the number of payments to be made at the specified payment frequency (see the PPY field above), after which the loan is scheduled to be paid off.


🟦 Data.Apr

TypeRequired
Objectno

Settings related to the computed effective rate returned by the SCE (most commonly, the Regulation Z APR in the United States of America) are contained in the fields of this object.

Fields: 🔹MAPR_Max, 🔹Method, 🔹UseMAPR

Objects: None

🔹 Data.Apr.MAPR_Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]36.0

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this field.

🔹 Data.Apr.Method

TypeRequiredValuesDefault
Stringnodefault, actuarial, eu, ca, xirr, xirr360, irrdefault

This field allows the calling application to specify an APR calculation method which will override the default value found in the setup file for the given Account. If this field is set to a valid value, then the specified method will be used to compute the APR for this loan calculation.

If the Country field has been set by the calling application and this field is not set, then the APR method used will be determined by the specified country. For the United States of America, the default APR method is actuarial. For a country in the European Union, the default value is eu (European Union APR). For Canada, the default APR method is ca (Canadian APR).

The xirr value implements the internal rate of return method as implemented in Microsoft\textregistered Excel via the XIRR() function, and is based on an actual day calendar with a 365 day divisor.

The xirr360 value implements the internal rate of return method based upon a unit period calendar with a 360 day divisor.

The irr value implements a common spreadsheet internal rate of return method which assumes strict regular periods. Deviating from a strict regular periodicity may produce unreliable results.

If this field is not specified and the Country field is not specified, then the value of default will be used which informs the SCE to use the APR method defined in the setup file for the specified Account.

🔹 Data.Apr.UseMAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will compute the Military APR in addition to the Regulation Z APR. The MAPR object will be included in the loan response.


🟦 Data.Construction

TypeRequired
Objectno

The Construction object determines if this loan is a construction to permanent loan request. If you wish to compute a construction loan without an attached permanent loan, you will need to use either the Construction or Loan modules.

Fields: 🔹HalfCommitment, 🔹PPY, 🔸Rate, 🔸Term

Objects: None

🔹 Data.Construction.HalfCommitment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

During the term of the construction loan, the estimated interest for disclosure purposes may be either computed on the full or half commitment amounts. By setting this field to true, interest will be estimated using half of the initial commitment amount (i.e. the principal balance). The default value of false will cause interest to be estimated using the entire initial commitment amount.

🔹 Data.Construction.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

The PPY field allows the calling application to specify the payment frequency during the construction period. The default value of 12 will result in a construction loan with 12 payments per year. If you require a payment frequency during the construction period other than monthly, then specify it using this field. Note that the permanent loan's payment frequency may differ from the construction period's payment frequency.

🔸 Data.Construction.Rate

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]n/a

This field determines the rate applied to the appropriate commitment amount during the term of the construction loan.

🔸 Data.Construction.Term

TypeRequiredValuesDefault
StringyesInteger > 0n/a

The term of the construction loan (in payments) is specified using this field. Please note that the term may not exceed five years.


🟦 Data.Fees[]

TypeRequired
Array of Fee Objectsno

This array of Fee objects allows the calling application to specify one ore more Fee objects to be included with the loan.

Fields: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name

Objects: None

🔹 Data.Fees[].AddToFinChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be included in the computed Finance Charge (and hence, affect the APR), then set this field to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 Data.Fees[].AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this field to true. If set to false, then the fee is paid up front out of the borrower's pocket.

🔹 Data.Fees[].Adjust

TypeRequiredValuesDefault
StringnoCurrency0

The optional Adjust field allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This field has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCE is as follows:

{
  "Fees" : [
    {
      "Name" : "TN Fee",
      "CalcType" : "OnAmtFin",
      "Adjust" : "-2000.00",
      "Entry" : "0.115",
      "AddToPrin" : true,
      "AddToFinChg" : false
    }
  ]
}

🔹 Data.Fees[].CalcType

TypeRequiredValuesDefault
StringnoDollar, OnProceeds, OnPrincipal, OnAmtFinDollar

This field specifies how the fee is to be computed, as described in the following table.

Fee Calc TypeDescription
DollarThe Entry field is understood as a flat dollar amount.
OnProceedsThe Entry field is understood as a percentage value, to be applied to the loan's proceeds, defined as the sum of advances. An Entry of 0.25 would represent a fee of 0.25% of the total proceeds.
OnPrincipalThe Entry field is understood as a percentage value, to be applied to the loan's principal balance. An Entry of 0.125 would represent a fee of 0.125% of the principal balance.
OnAmtFinThe Entry field is understood as a percentage value, to be applied to the loan's Regulation Z Amount Financed. An Entry of 0.33 would represent a fee of 0.33% of the amount financed.

🔹 Data.Fees[].Entry

TypeRequiredValuesDefault
StringnoNumber >= 00

How this field is interpreted depends upon the Fee.CalcType field. Please see the documentation for this field for further information.

🔹 Data.Fees[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which fees need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.Fees[].MAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this field to true.

Fees which are added to the finance charge (e.g. "AddToFinChg" : true) are always considered MAPR fees, regardless of the stated value of this field.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Data.Fees[].Max

TypeRequiredValuesDefault
StringnoCurrency > 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Min

TypeRequiredValuesDefault
StringnoCurrency > 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value will be determined by the value of the Country field. For most countries, the default value is 2. If no country code is specified, then the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.MI

TypeRequired
Objectno

The MI object determines if this loan includes one of the supported types of mortgage insurance (MI): PMI or FHA. This object contains fields which further specify mortgage insurance options.

Fields: 🔹CashDown 🔹LoanAmt, 🔸PropertyValue, 🔹Type

Objects: 🟦 Periodic, 🟥 Rates[], 🟦 UpFront

🔹 Data.MI.CashDown

TypeRequiredValuesDefault
StringnoCurrency >= 00

The CashDown field represents a cash down payment made at closing. If specified and greater than zero, this amount will be deducted from the principal balance. If not specified, the cash down payment will default to zero.

🔹 Data.MI.LoanAmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

This field represents the amount by which the PMI rates are multiplied to produce a level PMI premium. If not specified, then the principal balance will be used to compute the annual premium.

🔸 Data.MI.PropertyValue

TypeRequiredValues
StringyesCurrency >= 0

This field's value represents the appraised property value, and will be used in the calculation of the loan to value ratio.

🔹 Data.MI.Type

TypeRequiredValuesDefault
Stringnofha, pmipmi

This field determines the type of mortgage insurance to include with the loan. If the value of this field is set to fha, then a different MI premium is computed every twelve months based upon the average outstanding principal balance during that same term. The MI calculation adheres strictly to the HUD regulation.

If the value of this field is set to pmi, then each defined MI rate produces a level MI premium based upon the inital loan amount.


🟦 Data.MI.Periodic

TypeRequired
Objectno

The fields of this object determine the conditions when MI is no longer included.

Fields: 🔹DropLTV, 🔹Term, 🔹WarnLTV

Objects: None

🔹 Data.MI.Periodic.DropLTV

TypeRequiredValuesDefault
StringnoNumber >= 00

The value of this field determines the loan to value ratio at which MI should be removed, and is expressed as a percentage. For example, if you wish to automatically drop MI when the loan to value ratio first equals or falls below 78%, then you would specify "DropLTV" : "78.0".

🔹 Data.MI.Periodic.Term

TypeRequiredValuesDefault
StringnoInteger >= 00

The value of this field represents the the term (in payments) beyond which MI will be removed.

As an example, if mortgage insurance must be removed after the 180th payment, then the calling application should specify

{
  "MI" : {
    "Periodic" : { "Term" : "180"}
  }
}

🔹 Data.MI.Periodic.WarnLTV

TypeRequiredValuesDefault
StringnoNumber >= 00

The value of this field determines the loan to value ratio at which a warning should be issued, and is expressed as a percentage of LTV (loan to value). For example,if you wish to know when the loan to value ratio first equals or falls below 80%, then you would specify "WarnLTV" : "80.0".


🟥 Data.MI.Rates[]

TypeRequired
Array of Rate Objectsyes

This array if Rate objects defines the rates used to compute MI on the loan. There must be at least one Rate object in the Rates[] array, and there can be more than one if rates are set to switch at a specified payment number.

Fields: 🔸Rate, 🔹Switch

Objects: None

🔸 Data.MI.Rates[].Rate

TypeRequiredValues
StringyesNumber>= 0.0

The value of this field specifies the cost of mortgage insurance per $100 of the loan amount. As an example, a loan computed with a MI rate of $1.50 per $100 would be specified as

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"}
    ]
 }
}

🔹 Data.MI.Rates[].Switch

TypeRequiredValuesDefault
StringnoInteger >= 00

This optional field defines the payment number beyond which the associated MI rate will apply. If not specified, the value will default to zero.

Thus, if there is only a single MI rate, one may omit this field (see example above).

Example of a MI multiple rate structure (use a rate of $1.50 for the first 10 years, with a rate of $0.20 for coverage beyond 10 years):

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"},
      { "Rate" : "0.20" , "Switch" : "120"}
    ]
  }
}

🟦 Data.MI.UpFront

TypeRequired
Objectno

This object determines if there is an up front fee for mortgage insurance, and if so, how it is computer. If this object is not present in the request, then no up front fee will be computed. Note that ZOMP (zero option monthly premium) products do not have an up front fee, which means that this object should be omitted.

Fields: 🔹Paid, 🔹Reduce, 🔹Units, 🔹Value

Objects: None

🔹 Data.MI.UpFront.Paid

TypeRequiredValuesDefault
Stringnoatclosing, bylender, financedatclosing

If the value of this field is set to financed, then the computed up front fee will be added to the principal balance and the finance charge. A value of atclosing will cause the value of the fee to be added to the finance charge alone. Finally, a value of bylender means that the up front fee is to be paid by the lender, hence the value of the fee is not added to either the principal balance nor the finance charge.

🔹 Data.MI.UpFront.Reduce

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the specified number of periodic premiums to include as an up front fee is greater than zero, then this field determines if the term of coverage for PMI will be reduced by the same amount.

🔹 Data.MI.UpFront.Units

TypeRequiredValuesDefault
Stringnomonths, points, yearsmonths

If the Units field is set to months, then UpFront.Value represents the number of periodic MI premiums to be paid at closing.

If the Units field is set to Years, then UpFront.Value represents the number of annual MI premiums to be paid at closing. Many single premium products define the up front fee as a number of years of MI to be paid up front.

Finally, if the Units field is set to Points, then UpFront.Value represents the percentage of principal to be paid up front. As of October 3, 2011, FHA loans use points.

🔹 Data.MI.UpFront.Value

TypeRequiredValuesDefault
StringnoCurrency >= 00

If part of the MI fees are to be paid up front, then value of this field must be grater than zero. How the value of this field is interpreted depends upon the Units field (see below).

The default value of zero means that no up front fee will be computed.


🟦 Data.ODI

TypeRequired
Objectno

If odd days should be treated as a prepaid finance charge or added to the first payment in a manner different from how interest is accruing, then the request needs to define how odd days interest is computed and handled using the fields of this object.

Fields: 🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

Objects: None

🔹 Data.ODI.AccrualCode

TypeRequiredValuesDefault
Stringno204, 205, 210, 211, 220, 221, 230, 231, 250default

The accrual code defines how the odd days interest is computed. The meaning of the allowed accrual codes is defined below.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

Accrual CodeDescription
204True360/360
205True360/365
210Actual/360
211True365/360
220Actual/365
221True365/365
230Actual/Actual
231Midnight 366
250Actual/Variable Days Per Year

🔹 Data.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application wants the odd days interest to be added to the first payment, then set the value of this field to true. A value of false indicates that the odd days interest will be treated as a prepaid finance charge.

🔹 Data.ODI.AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If any odd days interest should be treated as a financed prepaid fee, then set the value of this field to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCE and the value of AddToPrin will be set to false.

🔹 Data.ODI.AnchorDate

TypeRequiredValuesDefault
StringnoBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This field determines how to arrive at the anchor date. A value of BackUnitPeriod means that the anchor date is one unit period prior to the specified first payment date. A value of BackDaysPerPeriod means that the anchor date is the number of days per period prior to the first payment date. Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 Data.ODI.ForceUnitPeriod

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Some unit period methods will not use a strict unit period interest accrual factor in the period to the first payment. For example, code 302 will count the days to the first payment and divide by 365. For a monthly loan, setting this field to true will use a 1/12 factor instead of Days/365.

🔹 Data.ODI.NoCap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When the odd days interest is financed, setting this field to true prevents interest from being computed on interest. The default is false, which means interest will be computed on interest.

🔹 Data.ODI.UseDailyCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 Data.ODI.UseNegODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If there are negative odd days in the loan, then the value of this field determines if a negative odd days interest fee is computed. If the value of this field is false, then negative odd days fees are not allowed, the SCE will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes and odd days interest credit) when there are negative odd days in a loan.


🟦 Data.Protection

TypeRequired
Objectno

The Protection object is used by the calling application to request one or more payment protection products (e.g. life, disability, involuntary unemployment, or personal property) be included in the loan calculation. Each of these products is requested by including its own child object, along with the borrower birthdays.

Fields: 🔹Birthday1, 🔹Birthday2, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps

Objects: 🟦 Disability, 🟦 Life, 🟦 Property, 🟦 Unemployment

🔹 Data.Protection.Birthday1

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the secondary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday2" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower2 or both.

🔹 Data.Protection.Birthday2

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the primary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday1" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower1 or both.

🔹 Data.Protection.Financed

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the computed premiums for single premium debt protection products should be financed along with the proceeds, then this field should be set to true (which is the default value if not specified). A value of false indicates that the computed premiums will not be financed with the proceeds, and hence will be paid out of pocket by the borrower. Note that this applies to single premium insurance products only!

🔹 Data.Protection.LineOfCredit

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this is an account using TruStage's MOB insurance, and if this loan is a line of credit where product term caps should be ignored, then set this field to true. Otherwise, omit this field or set it to false.

🔹 Data.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then any computed payment protection premium or fee will be considered a mandatory fee which will be included as a part of the Finance Charge, and hence affect the disclosed APR.

If the Mandatory field is set to false, then the loan will treat any premiums / fees as normal.

🔹 Data.Protection.ShowBorrowerInfo

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have data returned for each specified borrower instead of a single Term object, then set the value of this field to true. Otherwise, omit this field or set it to false. See the Borrower and Term objects defined in the response section for more information.

🔹 Data.Protection.ShowCaps

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have cap information (e.g. maximum terms, coverage amounts, ages, etc.) returned for each product offered, set the value of this field to true. Otherwise, omit this field or set it to false. See the Caps object defined in the response section for more information.


🟦 Data.Protection.Disability

TypeRequired
Objectno

The Disability object determines what type of disability coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table

Objects: None

🔹 Data.Protection.Disability.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Disability.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Disability object altogether or specify a value of none.

🔹 Data.Protection.Disability.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Disability.Table

TypeRequiredValuesDefault
StringnoInteger in [0...19]0

If the specified account has been set up with multiple disability or debt cancellation plans, then this field determines which plan number will be used. If no table number is specified, the first table (table zero) will be used.


🟦 Data.Protection.Life

TypeRequired
Objectno

The Life object determines what type of life coverage is requested for the loan.

Fields: 🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates

Objects: None

🔹 Data.Protection.Life.CovAmount

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a coverage amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum coverage amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified coverage amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Life.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Life object altogether or specify a value of none.

🔹 Data.Protection.Life.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Life.Dismemberment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer life protection products with optional dismemberment coverage, and if the optional dismemberment coverage is desired, then set this field's value to true. Otherwise, use the default value of false.

🔹 Data.Protection.Life.Method

TypeRequiredValuesDefault
StringnoDefault, Gross, NetDefault

Some accounts are configured to offer different types of credit life products (usually gross and net). In these accounts, this field allows the calling application to specify which method to use for a given loan. If no method is present in the request, then the default method will be used.

🔹 Data.Protection.Life.UseLevelRates

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer single premium credit life using level rates instead of the normal decreasing rates, and if you wish to use level rates instead of decreasing, then set this field's value to true. Otherwise, use the default value of false.


🟦 Data.Protection.Property

TypeRequired
Objectno

The Property object determines what type of property coverage is requested for the loan.

Fields: 🔹Coverage, 🔹Covers

Objects: None

🔹 Data.Protection.Property.Coverage

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Property.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. A value of borrower1 represents single coverage on the primary borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Property object altogether or specify a value of none.


🟦 Data.Protection.Unemployment

TypeRequired
Objectno

The Unemployment object determines what type of unemployment coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm

Objects: None

🔹 Data.Protection.Unemployment.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Unemployment.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Unemployment object altogether or specify a value of none.

🔹 Data.Protection.Unemployment.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.


🟦 Data.ServiceCharges[]

TypeRequired
Array of ServiceCharge Objectsno

This array of ServiceCharge objects allows the calling application to specify one ore more Service Charge objects to be included with the loan.

Fields: 🔹CalcType, 🔸Entry, 🔹Exact, 🔹IsLoanCost, 🔹Name, 🔹Round

Objects: None

🔹 Data.ServiceCharges[].CalcType

TypeRequiredValuesDefault
StringnoLumpSum, PeriodicLumpSum

A service charge of type LumpSum allows the calling application to specify an amount that will be spread out evenly over the loan's payment stream. On the other hand, a Periodic service charge is the amount which will be added to each payment.

🔸 Data.ServiceCharges[].Entry

TypeRequiredValuesDefault
StringyesFloating >= 0n/a

How this field is interpreted depends upon the ServiceCharge.CalcType field. It is the numeric amount defining either the lump sum or periodically paid service charge.

🔹 Data.ServiceCharges[].Exact

TypeRequiredValuesDefault
Booleannotrue, falsefalse

The Exact field is only considered when the service charge is of type LumpSum. When the calculated periodic amount is rounded, it will most often times produce a total service charge amount that differs from what was specified.

If the Exact field is set to true, then the final periodic amount will be adjusted so that the sum of all periodic amounts is exactly equal to the entered amount (and will result in an odd final payment). A value of false indicates that the final periodic amount will not be adjusted.

🔹 Data.ServiceCharges[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which service charges need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.ServiceCharges[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the service charge in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.

🔹 Data.ServiceCharges[].Round

TypeRequiredValuesDefault
Stringnonearest, up, downnearest

This field is only considered when the service charge is of type LumpSum. It determines how the calculated periodic amount is rounded.


🟦 Data.Settings

TypeRequired
Objectno

The Settings object allows the calling application to alter the default loan calculation options.

Fields: 🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

Objects: None

🔹 Data.Settings.Account

TypeRequiredValuesDefault
StringnoInteger in [1..9999]1

The Account field specifies the numeric setup file account number that will be used to compute the requested loan. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which may affect the loan calculation, such as the accrual method, insurance methods / rates / caps, etc.

🔹 Data.Settings.AccrualCode

TypeRequiredValuesDefault
Stringnosee tabledefault

The method of interest accrual is defined by this field. A value of default informs the SCE to use the interest accrual method defined in the setup file for the specified Account. All other valid accrual codes are described in the table below.

🔹 Data.Settings.ConMethod

TypeRequiredValuesDefault
Stringnodefault, simple, interestonlydefault

When computing a construction loan, there are two supported methods for computing interest during the constrcution period:

If the value of this field is simple, then the estimated construction interets will be computed and disclosed as a lup-sum prepaid fee (see the Moneys.ConstructInterest response field).

If the value of this field is interestonly, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

A value of default instructs the SCE to use the construction method specified in the setup file for the given account.

🔹 Data.Settings.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.Settings.Lastday

TypeRequiredValuesDefault
Booleannotrue, falseas configured in setup file

If present, this field overrides the Last Day setting in the setup files, which only applies to loans computed with an actual day accrual calendar where the first payment date falls at the end of a month with fewer than 31 days. As an example, if the first payment date is on April 30, should the following payment dates be made on the 30th of each month, or on the last day of the month?

If no value is specified for this field, then the setup file setting will be used. If true is specified, then conditions triggering a last day situation will result in payments which fall at the end of the month. A value of false indicates that when dictated, subsequent payment dates will not be moved to the last day of the month.

🔹 Data.Settings.OddFinal

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Following the last payment of an amortization schedule, the ending balance is unlikely to be zero due to the rounding of the payment. In order to assure perfect amortization, lenders will use an odd final payment to perfectly amortize the loan.

Set OddFinal to true to ensure perfect amortization with a payment that pays off the loan.

🔹 Data.Settings.PmtDollarRound

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Payments are normally rounded to the penny, according to the method specified by in the setup file, or vy theSettings.PmtRound field. If the payment should be rounded to the dollar instead of the penny, then set the value of this field to true.

Note that for some loans (such as those with longer terms or relatively small proceeds), rounding the payment up or to the nearest dollar may require a shortened loan term to prevent one or more negative payments at the end of the loan.

🔹 Data.Settings.PmtRound

TypeRequiredValuesDefault
Stringnodefault, nearest, up, down, bestdefault

How are calculated payments to be rounded at and beyond this event? best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen. default means that the setting should be configured as specified in the setup file.

🔹 Data.Settings.ShowAmTable

TypeRequiredValuesDefault
Booleannotrue, falsetrue

To supress the entire amortization schedule from the response, set value of this field to false; otherwise, the amortization schedule will be returned with the response.

🔹 Data.Settings.TILARESPA2015

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will include data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015. If the field is omitted or set to false, then the TILA RESPA outputs will not be generated.

Note that this field is supported for equal payment loans, balloon payment loans, single payment notes, interest only loans, fixed principal plus interest loans, skips, pickups and irregulars, and ARMs.

🔹 Data.Settings.YieldPPY

TypeRequiredValuesDefault
Stringno0, 2, 4, 6, 120

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than `0', this field determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this field with a value other than zero, the calling application must include an odd days prepaid fee in the request.

Balloon Loan Module - Response

The Data object for a response from the Balloon module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data🔹Country
|- 🟥 Errors[]
|- 🟥 Warnings[]
|- 🟦 Results🔸Payment, 🔸Final
|- 🟦 FedBox🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice
|- |- 🟥 APR🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type
|- |- 🟦 MAPR🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded
|- 🟦 TILARESPA2015🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP
|- |- 🟥 LoanCosts[]🔹Name, 🔹In5Years, 🔸Value
|- |- 🟥 In5Years🔸PaidTotal, 🔸PaidPrincipal
|- |- 🟥 MaxPnIPmt🔸Date, 🔸Amount
|- |- 🟥 MinRate🔸Rate, 🔸Idx
|- |- 🟥 MaxRate🔸Rate, 🔸Idx
|- |- 🟥 ProjectedPaymentsTable[]🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax
|- 🟦 Moneys🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹PMI_Fee, 🔹MinIntChgAdj, 🔹MinFinChgAdj
|- |- 🟦 ODI🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost
|- |- 🟦 Fees[]🔹Name, 🔸Fee
|- |- 🟦 ServiceCharges[]🔹Name, 🔸Fee
|- |- 🟦 Protection🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory
|- 🟦 Accrual🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity
|- 🟦 PMI🔸Rate, 🔸LTV, 🔸PremiumPerYear, 🔸PremiumPerPeriod, 🔹IndexToWarn, 🔹IndexToRemove
|- 🟦 PmtStreams[]🔸Term, 🔸Pmt, 🔹Rate, 🔸Begin
|- 🟦 Protection
|- |- 🟦 Life🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟦 Level🔸Result, 🔸Formula
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Disability🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Unemployment🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Property🔸Result, 🔸Formula
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- 🟦 AmTable🔹Months, 🔹Weeks, 🔹OddDays
|- |- 🟦 GrandTotals🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot, 🔹PMITot, 🔹SCTot
|- |- 🟦 SubTotals[]🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub, 🔹PMISub, 🔹SCSub
|- |- 🟥 AmLines[]🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹PMI, 🔹SC, 🔹UnpaidInt, 🔸EndBal

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔹Country

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Results, 🟦 FedBox, 🟦 TILARESPA2015, 🟦 Moneys, 🟦 Accrual, 🟦 PMI, 🟦 PmtStreams[], 🟦 Protection, 🟦 AmTable

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

If the request specified a two-character or three-digit Country code, then this field will be present and will contain the full name of the country associated with the specified code. Please see the Countries Appendix for the list of supported countries and their associated codes.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Balloon",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?",
    "AmortTerm" : "36"
  }
} 
{
  "Result" : 200,
  "Module" : "Balloon",
  "Data" : {
    "Errors" : [
      "Data.LoanDate (StringDate) not found.",
      "Data.PmtDate (StringDate) not found.",
      "Data.Term (StringInt) not found.",
      "Data.IntRate (StringFloat) not found.",
      "Data.Proceeds (StringFloat) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}


🟦 Data.Results

TypeRequired
Objectno

This field(s) of this object represent the most important numerical results for the loan request.

Fields: 🔸Payment, 🔸Final

Objects: None

🔸 Data.Results.Payment

TypeRequiredValues
StringyesCurrency

The regular payment for the loan.

🔸 Data.Results.Final

TypeRequiredValues
StringyesCurrency

The computed / specified final payment of the balloon loan.


🟦 Data.FedBox

TypeRequired
Objectno

This object groups together all fields which contain important numerical information, as defined in the Truth-In-Lending laws (Regulation Z).

Fields: 🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice

Objects: 🟥 APR, 🟦 MAPR

🔸 Data.FedBox.AmtFin

TypeRequiredValue
StringyesCurrency > 0.0

The Regulation Z Amount Financed, which is defined as the amount of credit provided to the borrower or on their behalf.

🔸 Data.FedBox.FinChg

TypeRequiredValue
StringyesCurrency

This element contains the Regulation Z Finance Charge, described as the dollar amount the credit extension will cost the borrower.

🔸 Data.FedBox.TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

The amount which the borrower will have paid when the borrower has made all scheduled payments.

🔹 Data.FedBox.TotalSalePrice

TypeRequiredValue
StringyesCurrency > 0.0

The sum of the total of payments plus the total down payment. Please note that if no TotalDown field was included in the request, then this element will not be present.


🟥 Data.FedBox.APR

TypeRequired
Objectyes

The APR object contains fields which return the value and APR method used.

Fields: 🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type

Objects: None

🔸 Data.FedBox.APR.Value

TypeRequiredValue
StringyesNumber

The computed APR, which is the cost of the extension of credit expressed as a yearly rate.

🔹 Data.FedBox.APR.Max

TypeRequiredValueDefault
StringnoNumbern/a

This field returns the maximum APR as configured in the account's setup files. If no maximum APR has been specified, then this field will not be present in the response. The value of this field should be displayed as a percentage.

🔹 Data.FedBox.APR.MaxExceeded

TypeRequiredValueDefault
Booleannotrue, falsen/a

If a maximum APR is configured in the account's setup files, then the value of this field indicates whether or not the current loan exceeds the maximum APR. If no maximum APR has been specified, then this field will not be present in the response.

🔸 Data.FedBox.APR.Type

TypeRequiredValue
StringyesText

This field returns the APR method used to compute the reported APR.


🟦 Data.FedBox.MAPR

TypeRequired
Objectno

The MAPR (military APR) object is only returned with the response if the value of the Apr.UseMAPR request field is true.

Fields: 🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded

Objects: None

🔸 Data.FedBox.MAPR.Value

TypeRequiredValue
StringyesNumber

The computed military APR.

🔸 Data.FedBox.MAPR.Advance

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the equivalent of the Amount Financed for the Military APR. Specifically, it is the principal balance less any MAPR fees, debt protection, etc.

🔸 Data.FedBox.MAPR.Max

TypeRequiredValue
StringyesNumber

This field holds the maximum Military APR as specified in the input XML (see Apr.MAPR_Max). If not specified, a default value of 36% is assumed. The value of this field should be displayed as a percentage. As an example, for "Max" :"36.000", you would disclose a maximum Military APR of 36%.

🔸 Data.FedBox.MAPR.MaxExceeded

TypeRequiredValue
Booleanyestrue, false

The value of this field indicates whether or not the current loan exceeds the maximum allowed Military APR. As an example, if the maximum APR has been set to 36% and the Military APR for the returned loan was 37.125%, the MAPR object would be:

{
  "MAPR" : {
    "Value" : "37.125",
    "Advance" : "1350.00",
    "Max" : "36.000",
    "MaxExceeded" : true
 }
}


🟦 Data.TILARESPA2015

TypeRequired
Objectno

This object contains fields which are of interest to fulfilling the 2015 TILA RESPA rule. It will only be present if the Settings.TILARESPA2015 field in the request is set to true.

Fields: 🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP

Objects: 🟥 LoanCosts[], 🟥 In5Years, 🟥 MaxPnIPmt, 🟥 MinRate, 🟥 MaxRate, 🟥 ProjectedPaymentsTable[]

🔸 Data.TILARESPA2015.TotalLoanCost

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field is the sum of all borrower paid loan costs. Since all LoanCost values are rounded dollar amounts, the value of this element will also be a rounded dollar amount.

🔸 Data.TILARESPA2015.CD_TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the sum of the total of payments, all borrower paid loan costs, and any odd days interest that is prepaid at loan closing. This value should be disclosed on the Closing Disclosure form in the Total of Payments field.

🔸 Data.TILARESPA2015.TIP

TypeRequiredValue
StringyesNumber

The total interest percentage, rounded to three or fewer decimal places - as required.


🟥 Data.TILARESPA2015.LoanCosts[]

TypeRequired
Array of LoanCost Objectsyes

For every object in the Fees[] array present in the request which has its IsLoanCost field set to true (and hence, is a borrower paid loan cost) and whose amount is greater than zero (except odd days interest fee types, as explained in the previous documentation of the Fee and object), there will be a corresponding LoanCost object.

Fields: 🔹Name, 🔹In5Years, 🔸Value

Objects: None

🔹 Data.TILARESPA2015.LoanCosts[].Name

TypeRequiredValueDefault
StringnoTextn/a

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔹 Data.TILARESPA2015.LoanCosts[].In5Years

TypeRequiredValueDefault
StringnoCurrency >= 0Same as Value

If the entire amount of the fee is different from the amount collected over the first five years (for example, a service charge), then this field will be present and disclose the portion of this loan coast that is accrued during the first five years.

🔸 Data.TILARESPA2015.LoanCosts[].Value

TypeRequiredValue
StringyesCurrency >= 0

The value of this field is the numerical value of the fee, rounded to the nearest dollar.


🟥 Data.TILARESPA2015.In5Years

TypeRequired
Objectyes

This object contains all important values required for the new "In 5 Years" section of the disclosure.

Fields: 🔸PaidTotal, 🔸PaidPrincipal

Objects: None

🔸 Data.TILARESPA2015.In5Years.PaidTotal

TypeRequiredValue
StringyesCurrency >= 0

This field holds the sum of all "principal, interest, mortgage insurance, and borrower paid loan costs scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.

🔸 Data.TILARESPA2015.In5Years.PaidPrincipal

TypeRequiredValue
StringyesCurrency >= 0

This field holds "the principal scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.


🟥 Data.TILARESPA2015.MaxPnIPmt

TypeRequired
Objectyes

The fields of this object hold the maximum sceduled principal and interest payment during the term of the loan, as well as the date on which that payment is made.

Fields: 🔸Date, 🔸Amount

Objects: None

🔸 Data.TILARESPA2015.MaxPnIPmt.Date

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field returns the date on which the maximum scheduled principal and interest payment is made. If the maximum scheduled payment occurs more than once, then the date returned is that of the first instance.

🔸 Data.TILARESPA2015.MaxPnIPmt.Amount

TypeRequiredValue
StringyesCurrency >= 0

The maximum sceduled principal and interest payment during the term of the loan.


🟥 Data.TILARESPA2015.MinRate

TypeRequired
Objectyes

The fields of this object hold information regarding the minimum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MinRate.Rate

TypeRequiredValue
StringyesNumber

The value of the minimum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MinRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the minimum rate is first applicable.


🟥 Data.TILARESPA2015.MaxRate

TypeRequired
Objectyes

The fields of this object hold information regarding the maximum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MaxRate.Rate

TypeRequiredValue
StringyesNumber

The value of the maximum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MaxRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the maximum rate is first applicable.


🟥 Data.TILARESPA2015.ProjectedPaymentsTable[]

TypeRequired
Array of PPCol Objectsyes

Fields: 🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax

Objects: None

This field returns an Array of projected payment table columns (PPCol), with each array member detailing a single column. Per the regulation, there will be a minimum of one column and a maximum of four columns, depending upon the parameters of the loan.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Num

TypeRequiredValue
StringyesInteger in [1...4]

The value of this field identifies the number of the column to which the following fields apply. The value will be from 1 to 4.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Title

TypeRequiredValue
StringyesText

The value of this field is the title for the column. Most of the time, it will be in the form of Years X - Y, or Year X, or Final Payment in the case of a final balloon payment.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearStart

TypeRequiredValue
StringyesInteger

The beginning year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearEnd

TypeRequiredValue
StringyesInteger

The ending year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMin

TypeRequiredValue
StringyesCurrency > 0

The minimum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMax

TypeRequiredValue
StringyesCurrency > 0

The maximum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].IntOnly

TypeRequiredValue
Stringyesnone, some, all

If none of the payments associated with this column are interest only payments, then the value of this field will be none. A value of some means that some of the payments (but not all) associated with this columnt are interest only. Finally, a value of all indicates that all payments associated with this columnt are interest only.

Note that for the purposes of this field, a scheduled payment is considered an interest only payment if the payment amount pays off all interest due at the time of the payment, with no reduction in the principal balance.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Balloon

TypeRequiredValue
Booleanyestrue, false

If any of the payments associated with this column are balloon payments (e.g. isolated payments that are more than twice the value of a regular periodic payment), then the value of this field will be true.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].MIPmt

TypeRequiredValue
StringyesCurrency > 0

The value of this field holds the mortgage insurance premium associated with this column, rounded to the nearest dollar. If no mortgage insurance is present or coverage has been dropped, a value of zero will be present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMin

TypeRequiredValue
StringyesCurrency > 0

This field returns the minimum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMax

TypeRequiredValue
StringyesCurrency > 0

This field returns the maximum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.


🟦 Data.Moneys

TypeRequired
Objectno

This element groups together those other major cash result amounts not disclosed under the FedBox object, such as the principal balance, interest charge, and fee amounts.

Fields: 🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹PMI_Fee, 🔹MinIntChgAdj, 🔹MinFinChgAdj

Objects: 🟦 ODI, 🟦 Fees[], 🟦 ServiceCharges[], 🟦 Protection

🔸 Data.Moneys.Principal

TypeRequiredValue
StringyesCurrency >= 0

The principal balance is the amount on which interest is accrued. The principal balance consists of all advances requested by the borrower, as well as any fees and/or protection products which are financed.

🔸 Data.Moneys.Interest

TypeRequiredValue
StringyesCurrency

This value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments.

🔹 Data.Moneys.ConstructInterest

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If the requested loan is a construction loan with a permanent loan attached and the account specified is set up to compute construction loans via the "Simple" method, then this field will contain the construction interest for the requested loan.

Note that if a permanent loan is attached to a construction loan and the account is set up to use the "LaserPro" method, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

If the requested loan is a construction loan without a permanent loan attached, then the construction interest will be disclosed in the Moneys.Interest field.

If the requested loan was not a construction loan, or if construction loans have not been set up for the given account, then this field will not appear in the response.

🔹 Data.Moneys.FinFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field contains the sum of all fees having AddToPrin set to true and occuring on the date of an advance. If this value is zero, the field will not appear in the response.

🔹 Data.Moneys.Prepaid

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field represents all prepaid finance charges and contains the sum of all fees occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will not be found in the response.

🔹 Data.Moneys.PocketFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are neither financed, nor added to the finance charge. In essence, they are paid out of the borrower's pocket. If no out of pocket fees were requested, then this field will not show up in the response.

🔹 Data.Moneys.MAPRFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are Military APR fees (including protection products), and will only appear if the Military APR has been requested.

🔹 Data.Moneys.PMI_Fee

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If PMI has been requested on the loan, and if a number of UpFront payments have been specified, then this field will return the total PMI fee for all up front payments.

🔹 Data.Moneys.MinIntChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum interest charge is configured in the account's setup files and the final payment was adjusted to meet this minimum interest charge, then this field will be returned in the response and will contain the value of the minimum interest charge adjustment.

🔹 Data.Moneys.MinFinChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum finance charge is configured in the account's setup files and the final payment was adjusted to meet this minimum finance charge, then this field will be returned in the response and will contain the value of the minimum finance charge adjustment.


🟦 Data.Moneys.ODI

TypeRequired
Objectno

This object, if present, contains information regarding odd days interest. If no odd days interest was requested, then this object will not be present in the response.

Fields: 🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost

Objects: None

🔹 Data.Moneys.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsen/a

If the odd days interest has been added to the first payment, then this field will be present in the response with a value of true. If the odd days interest has been treated as a prepaid finance charge, then this field will not be present and a default value of false should be assumed.

🔸 Data.Moneys.ODI.Count

TypeRequiredValues
StringyesInteger >= 0

Discloses the number of odd days computed by the SCE for the requested loan.

🔸 Data.Moneys.ODI.Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total amount odd days interest charge.

🔹 Data.Moneys.ODI.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field holds the number of odd months computed by the SCE for the requested loan when using odd days accrual method 250. If the odd days accrual method is a value other than 250, then this field will not be present in the ODI object of the response.

🔹 Data.Moneys.ODI.DailyCost

TypeRequiredValueDefault
StringnoCurrency >= 0.0n/a

If the odd days interest fee is computed using a rounded daily cost, then the value of this field will hold that value. If the odd days interest is not computed using a rounded daily cost, then this field will not be present in the response.


🟦 Data.Moneys.Fees[]

TypeRequired
Array of Fee Objectsno

If the requested loan included fees, then for each fee in the loan there will be a Fee object in this array containing the name of the fee and the computed fee amount.

If there were no fees requested with the loan, then the Moneys.Fees[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.Fees[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed fee amount.


🟦 Data.Moneys.ServiceCharges[]

TypeRequired
Array of ServiceCharge Objectsno

If the requested loan included service charges, then for each service charge in the loan there will be a ServiceCharge object in this array containing the name of the service charge and the computed service charge amount.

If there were no service charges requested with the loan, then the Moneys.ServiceCharges[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.ServiceCharges[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the service charge, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.ServiceCharges[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed service charge amount.


🟦 Data.Moneys.Protection

TypeRequired
Objectno

This object returns summary information on all payment protection products computed with the loan. If no protection products were included with the loan, then this object will be omitted from the response.

Fields: 🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory

Objects: None

🔸 Data.Moneys.Protection.Cost

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total cost of all protection plans included with the computed loan. For the individual plan costs, see the Protection field described below.

🔸 Data.Moneys.Protection.PerPmt

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per payment.

🔸 Data.Moneys.Protection.PerDay

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per day.

🔸 Data.Moneys.Protection.Category

TypeRequiredValues
StringyesNone, SP, MOB, TrueMOB, PaidSP

Te value of this field specifies the category under which the computed loan protection falls. The categories are described below:

CategoryDescription
NoneNo loan protection products were computed with this loan.
SPFinanced single premium coverage.
MOBMonthly outstanding balance coverage.
TrueMOBTruStage's monthly outstanding balance method.
PaidSPNon-financed single premium coverage.

🔹 Data.Moneys.Protection.IsDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field indicates if the specified account's protection is set up as debt protection. If this field is not present, then the default value of false should be used (which indicates that the account's protection is set up as insurance instead).

🔹 Data.Moneys.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field should only appear in the response if the value of the is true. If this field does not appear in the output, then the value should default to false.

If the value of the Mandatory field is true, then the total premium / fee amount for all insurance / debt protection products has been treated as a part of the Finance Charge, and hence will affect the effective APR.


🟦 Data.Accrual

TypeRequired
Objectno

This object groups together interest accrual information, such as the accrual method(s) used, days to the first payment and the loan's maturity date.

Fields: 🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity

Objects: None

🔸 Data.Accrual.Method

TypeRequiredValues
StringyesText

The Method field contains a textual description of the interest accrual method used to compute the loan (e.g. Unit Period 365 Simple.)

🔸 Data.Accrual.Days1Pmt

TypeRequiredValues
StringyesInteger >= 0

This field contains the number of days between the date of the first advance and the date of first payment, computed by one of two methods as specified in by Accrual.DayCount (below).

🔸 Data.Accrual.DayCount

TypeRequiredValues
StringyesTrue360, Actual

This field specifies the method used to compute the number of days from the date of the first advance until the first payment date. Actual means that the actual number of days between these two dates are used, whereas the True360 method use a 360 day calendar.

🔸 Data.Accrual.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

Holds the maturity date of the loan, which is the date on which the last payment is scheduled. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.PMI

TypeRequired
Objectno

The PMI object will only appear if PMI has been computed with the loan. Please note that the PMI premiums are not reflected in the amount reported in the Results.Payment or Results.Final fields, the PmtStreams[] array, the FedBox.TotPmts field, nor the Pmt field of the AmTable.AmLines[] array.

Fields: 🔸Rate, 🔸LTV, 🔸PremiumPerYear, 🔸PremiumPerPeriod, 🔹IndexToWarn, 🔹IndexToRemove

Objects: None

🔸 Data.PMI.Rate

TypeRequiredValues
Stringyes% >= 0

The percentage rate used in the PMI calculation.

🔸 Data.PMI.LTV

TypeRequiredValues
Stringyes% >= 0

The loan to value ratio of the computed loan, expressed as a percentage.

🔸 Data.PMI.PremiumPerYear

TypeRequiredValues
StringyesCurrency >= 0

The annual PMI premium amount.

🔸 Data.PMI.PremiumPerPeriod

TypeRequiredValues
StringyesCurrency >= 0

The periodic PMI premium amount.

🔹 Data.PMI.IndexToWarn

TypeRequiredValuesDefault
StringnoInteger > 0n/a

This field only appears if the WarnLTV PMI input field is specified, and indicates that the payment index on which the remaining principal balance to home value ratio drops below the specified percentage.

🔹 Data.PMI.IndexToRemove

TypeRequiredValuesDefault
StringnoInteger > 0n/a

This field only appears if the DropLTV PMI input field is specified, and indicates that the payment index on which the remaining principal balance to home value ratio drops below the specified percentage. PMI coverage stops after this payment.


🟦 Data.PmtStreams[]

TypeRequired
Objectno

The PmtStreams[] array is made up of one or more PmtStream objects (there will always be at least one of these elements, and there may be more than one depending upon the loan type). The PmtStream objects describe the scheduled stream of payments for the computed loan. Instead of disclosing each and every payment individually (which can be done with the AmTable object), the payment stream groups together consecutive equal payments at the same interest rate to produce output along the lines of:

{
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "50.13",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "10",
        "Pmt" : "37.59",
        "Rate" : "4.500",
        "Begin" : "2022-11-01"
      },
      {
        "Term" : "1",
        "Pmt" : "10062.59",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ]
}

Each object describes a single stream of equal payments at the same interest rate, using the following fields to define the important properties of each payment stream.

Fields: 🔸Term, 🔸Pmt, 🔸Rate, 🔸Begin

Objects: Note

🔸 Data.PmtStreams[].Term

TypeRequiredValues
StringyesInteger >= 0

The Term field holds the number of payments that make up the given payment stream.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValues
StringyesCurrency > 0

The Pmt field holds the computed payment amount for this payment stream.

🔹 Data.PmtStreams[].Rate

TypeRequiredValues
StringyesNumber

Contains the interest rate used for the duration of this payment stream. If this payment stream accrued interest using split-rate tiers, then this field will not be returned.

🔸 Data.PmtStreams[].Begin

TypeRequiredValues
StringyesYYYY-MM-DD

This field identifies the date on which the first payment for this given payment stream is scheduled to be made. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.Protection

TypeRequired
Objectno

If protection products are requested, then this object will be present in the response, along with a field for each requested protection product.

Fields : None

Objects: 🟦 Life, 🟦 Level, 🟦 Disability, 🟦 Unemployment, 🟦 Property


🟦 Data.Protection.Life

TypeRequired
Objectno

If life protection was requested with the loan and decreasing life was configured for this loan type, then the Life object will be present in the response to return information on decreasing life coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Life.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Life.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Life.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Life.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Life.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Life.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Life.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Life.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Life.Cost.Premium2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary life product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Life.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Life.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Life.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Life.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Life.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Life.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Life.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Term

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Level

TypeRequired
Objectno

If level protection was requested with the loan and decreasing level was configured for this loan type, then the Life object will be present in the response to return information on decreasing level coverage.

Fields: 🔸Result, 🔸Formula,

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Level.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Level.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🟦 Data.Protection.Level.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Level.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Level.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Level.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Level.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Level.Cost.Premium2

TypeRequiredValuesDefault
StringyesCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary Level product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Level.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Level.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Level.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Level.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Level.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Level.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Level.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Disability

TypeRequired
Objectno

If disability protection was requested with the loan and decreasing disability was configured for this loan type, then the Life object will be present in the response to return information on decreasing disability coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Disability.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Disability.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Disability.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Disability.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Disability.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Disability.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Disability.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Disability.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Disability.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Disability.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Disability.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Disability.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Disability.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Disability.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Disability.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower2

TypeRequired
Objectno

The borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Disability.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Unemployment

TypeRequired
Objectno

If unemployment protection was requested with the loan and decreasing unemployment was configured for this loan type, then the Life object will be present in the response to return information on decreasing unemployment coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Unemployment.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Unemployment.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Unemployment.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Unemployment.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Unemployment.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Unemployment.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Unemployment.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Unemployment.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Unemployment.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Unemployment.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Unemployment.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Unemployment.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Unemployment.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Unemployment.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Unemployment.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Unemployment.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Unemployment.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Unemployment.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Unemployment.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Unemployment.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Unemployment.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Unemployment.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Unemployment.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Unemployment.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Unemployment.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Unemployment.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Unemployment.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Property

TypeRequired
Objectno

If property protection was requested with the loan and decreasing property was configured for this loan type, then the Property object will be present in the response to return information on decreasing property coverage.

Fields: 🔸Result, 🔸Formula,

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Property.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Property.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.


🟦 Data.Protection.Property.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Property.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Property.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Property.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Property.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Property.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Property.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Property.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Property.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Property.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Property.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Property.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Property.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Property.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Property.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Property.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Property.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Property.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Property.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Property.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Property.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Property.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Property.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Property.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Property.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Property.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Property.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Property.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Property.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Property.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Property.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Property.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Property.Caps.Term

TypeRequiredValues
StringyesInteger

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Property.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Property.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.AmTable

TypeRequired
Objectno

This object contains fields which summarize and describe the loan's amortization schedule. If Settings.ShowAmTable is set to false, then this object will not be found in the response.

Fields: 🔹Months, 🔹Weeks, 🔹OddDays

Objects: 🟦 GrandTotals, 🟦 SubTotals[], 🟥 AmLines[]

🔹 Data.AmTable.AvgBal

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the average balance of the loan used in the Canadian APR calculation.

🔹 Data.AmTable.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of months in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.Weeks

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of weeks in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.OddDays

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the number of odd days in the term of the loan used in the Canadian APR calculation. Odd days are computed by moving backwards from the maturity date the number of disclosed months or weeks, and then counting the additional number of days required to land on the loan date.

🟦 Data.AmTable.GrandTotals

TypeRequired
Objectno

This object describes the total amounts of various categories throughout the life of the loan. As an example, the total amount paid to interest and principal, as well as the total of payments are all contained in fields of this object.

Fields: 🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot, 🔹PMITot, 🔹SCTot

Objects: None


🔸 Data.AmTable.GrandTotals.PmtTot

TypeRequiredValues
StringyesCurrency

The total of payments scheduled for the computed loan.

🔸 Data.AmTable.GrandTotals.IntTot

TypeRequiredValues
StringyesCurrency

The total amount paid to interest over the life of the loan, assuming all payments are made as scheduled.

🔸 Data.AmTable.GrandTotals.PrinTot

TypeRequiredValues
StringyesCurrency

This field contains the total amount paid to principal during the loan term, assuming all payments are made as scheduled.

🔹 Data.AmTable.GrandTotals.CLTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLTot field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life over the duration of the loan.

🔹 Data.AmTable.GrandTotals.AHTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHTot field will only appear on loans with certain types of disability or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.IUTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUTot field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.PMITot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The PMITot field will only appear on loans with PMI insurance where the PMI premiums were requested in the amortization schedule. It contains the total PMI amount paid (not including any up front periodic PMI premiums)for PMI over the duration of the loan.

🔹 Data.AmTable.GrandTotals.SCTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The SCTot field will only appear on loans with service charges. It contains the total service charge amount paid over the duration of the loan.


🟦 Data.AmTable.SubTotals[]

TypeRequired
Array of SubTotal Objectsno

Describes the total amounts of various categories paid during a given calendar year. For each year in which the computed loan has scheduled payments, there will be a SubTotal object in the array.

Fields: 🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub, 🔹PMISub, 🔹SCSub

Objects: None

🔸 Data.AmTable.SubTotals[].Year

TypeRequiredValues
StringyesInteger >= 0

The calendar year for which the subtotal data is applicable.

🔸 Data.AmTable.SubTotals[].Start

TypeRequiredValues
StringyesInteger >= 0

This field defines the first amortization event which falls in the specified calendar year. To find the AmLines[] object which corresponds to this value, match the Idx field of the AmLine object.

🔸 Data.AmTable.SubTotals[].Events

TypeRequiredValues
StringyesInteger >= 0

This field defines the number of amortization events which belong to this calendar year.

🔸 Data.AmTable.SubTotals[].PmtSub

TypeRequiredValues
StringyesCurrency

Contains the total of payments scheduled for the calendar year.

🔸 Data.AmTable.SubTotals[].IntSub

TypeRequiredValues
StringyesCurrency

Holds the total amount paid to interest over the calendar year, assuming all payments are made as scheduled.

🔸 Data.AmTable.SubTotals[].PrinSub

TypeRequiredValues
StringyesCurrency

Contains the total amount paid to principal during the calendar year, assuming all payments are made as scheduled.

🔹 Data.AmTable.SubTotals[].CLSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLSub field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life during the year.

🔹 Data.AmTable.SubTotals[].AHSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHSub field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection during the year.

🔹 Data.AmTable.SubTotals[].IUSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUSub field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for involuntary unemployment during the year.

🔹 Data.AmTable.SubTotals[].PMISub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The PMISub field will only appear on loans with PMI insurance where the PMI premiums were requested in the amortization schedule. It contains the total PMI amount paid (not including any up front periodic PMI premiums) for PMI during the year.

🔹 Data.AmTable.SubTotals[].SCSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The SCSub field will only appear on loans with service charges. It contains the total of service charges paid during the year.


🟥 Data.AmTable.AmLines[]

TypeRequired
Array of AmLine Objectsyes

There is one AmLine object for each amortization event which occurs during the life of a loan. Most of the time, each event will describe a payment, and detail how that payment is applied (to interest, principal, loan protection products, etc.). Some events, such as capitalizing interest, will not have payments but will show how the loan amortizes.

Fields: 🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹PMI, 🔹SC, 🔹UnpaidInt, 🔸EndBal

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValues
StringyesInteger >= 0

The index of the amortization event, which is either the payment number, or zero. A value of zero designates an event that is either not a payment or is a skipped payment.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The date on which the amortization event is scheduled to occur. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 AmData.AmTable.AmLines[]ine.BegBal

TypeRequiredValues
StringyesCurrency >= 0

The principal balance before the amortization event occurs.

🔸 Data.AmTable.AmLines[].Pmt

TypeRequiredValues
StringyesCurrency

The payment amount for this event.

🔸 Data.AmTable.AmLines[].Int

TypeRequiredValues
StringyesCurrency

The amount of interest paid at this event.

🔸 Data.AmTable.AmLines[].Prin

TypeRequiredValues
StringyesCurrency

The amount of principal paid at this event.

🔹 Data.AmTable.AmLines[].CL

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CL field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for life coverage.

🔹 Data.AmTable.AmLines[].AH

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AH field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for disability / debt protection coverage.

🔹 Data.AmTable.AmLines[].IU

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IU field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for this coverage.

🔹 Data.AmTable.AmLines[].PMI

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field contains the PMI premium for this payment, and will only show up if PMI has been computed for this payment and if PMI premiums should be displayed in the amortization schedule.

🔹 Data.AmTable.AmLines[].SC

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field contains the total service charge for this payment, and will only be present if one or more service charges were requested with the loan.

🔹 Data.AmTable.AmLines[].UnpaidInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear on an amortization line when interest has been accrued, but has not yet been paid or added to the principal balance. If the interest accrued has not yet been rounded, then the unpaid interest will be displayed to four (4) decimal placed. If rounded, then the unpaid interest is displayed to two (2) decimal places.

🔸 Data.AmTable.AmLines[].EndBal

TypeRequiredValues
StringyesCurrency

The principal balance amount, after the amortization event has taken place.


Single Payment Notes

Single payment notes are loans which obligate the borrower to repay the principal borrowed plus the interest charged by the lender in one payment that is due on a date specified in the note.

Sample Request

The following example is a request for a single payment note with proceeds of $5,000, interest will accrue at a 5.5% rate using an actual day / 365 simple accrual method (accrual code 220), with a financed and APR affecting document preparation fee of $25 included.

{
  "Module" : "SinglePmt",
  "Data" : {
    "LoanDate" : "2022-07-20",
    "PmtDate" : "2022-12-31",
    "IntRate" : "5.500",
    "Proceeds" : "5000.00",
    "Fees" : [
      {
        "Name" : "Doc Prep Fee",
        "AddToFinChg" : true,
        "AddToPrin" : true,
        "CalcType" : "Dollar",
        "Entry" : "25.00"
      }
    ],
    "Settings" : {
      "AccrualCode" : "220"
    }
  }
}

Sample Response

{
  "Result" : 200,
  "Module" : "SinglePmt",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Results" : {
      "Payment" : "5149.18"
    },
    "FedBox" : {
      "AmtFin" : "5000.00",
      "FinChg" : "149.18",
      "TotPmts" : "5149.18",
      "APR" : {
        "Value" : "6.640",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Principal" : "5025.00",
      "Interest" : "124.18",
      "FinFees" : "25.00",
      "FinChgFees" : "25.00",
      "Fees" : [
        {
          "Name" : "Doc Prep Fee",
          "Fee" : "25.00"
        }
      ]
    },
    "Accrual" : {
      "Method" : "Actual/365 Simple",
      "Days1Pmt" : "164",
      "DayCount" : "Actual",
      "Maturity" : "2022-12-31"
    },
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "5149.18",
        "Rate" : "5.500",
        "Begin" : "2022-12-31"
      }
    ],
    "AmTable" : {
      "GrandTotals" : {
        "PmtTot" : "5149.18",
        "IntTot" : "124.18",
        "PrinTot" : "5025.00"
      },
      "SubTotals" : [
        {
          "Year" : "2022",
          "Start" : "1",
          "Events" : "1",
          "PmtSub" : "5149.18",
          "IntSub" : "124.18",
          "PrinSub" : "5025.00"
        }
      ],
      "AmLines" : [
        {
          "Idx" : "1",
          "Date" : "2022-12-31",
          "BegBal" : "5025.00",
          "Pmt" : "5149.18",
          "Int" : "124.18",
          "Prin" : "5025.00",
          "EndBal" : "0.00"
        }
      ]
    }
  }
}

Single Payment Note - Request

The fields of the Data object supported by a SinglePmt module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Country, 🔸IntRate, 🔹IntStartDate, 🔸LoanDate, 🔸PmtDate, 🔹Proceeds, 🔹TotalDown

Objects: 🟦 Apr, 🟦 Fees[], 🟦 Format, 🟦 ODI, 🟦 Protection, 🟦 ServiceCharges[], 🟦 Settings

The fields of the Data object supported by an Equal Pmt module request are defined in alphabetical order below:

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

This field allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see the Countries Appendix for the list of supported countries and their associated codes.

Specifying the Country will also set the default value for the APR.Method and Format.CurrencyDecimals fields, as appropriate for the country specified.

🔸 Data.IntRate

TypeRequiredValues
StringyesNumber in [-99.999...600]

Determine the interest rate used for the loan. The interest rate should be expressed as a percentage. For example, a loan computed with a rate of 5.125% would be specified as "IntRate" : "5.125".

🔹 Data.IntStartDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDsame value as LoanDate

This field contains the date on which interest begins to accrue on the loan's principal balance. If this field is not specified, then the interest start date is set equal the loan date. Also note that the interest start date must be equal to the loan date when computing a construction loan.

The interest start date (when specified) must be on or after the loan date, as well as on or before the first payment date.

🔸 Data.LoanDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field holds the date on which the loan amount is disbursed and interest begins to accrue. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔸 Data.PmtDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field specifies the first (and for single payment notes, only) payment date in the loan's repayment schedule. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.Proceeds

TypeRequiredValuesDefault
StringnoCurrency > 0n/a

The proceeds specified indicate the amount of money the borrower is requesting, and does not include financed fees, financed insurances, etc.

🔹 Data.TotalDown

TypeRequiredValues
StringnoCurrency > 0

This optional field represents the total down payment that the borrower has applied to reduce the requested proceeds. It may consist of a cash down payment, net trade-in value, or rebate. You only need to specify a total down payment if the loan needs to disclose a total sale price. Typical examples of these loan types are auto and boat loans.


🟦 Data.Apr

TypeRequired
Objectno

Settings related to the computed effective rate returned by the SCE (most commonly, the Regulation Z APR in the United States of America) are contained in the fields of this object.

Fields: 🔹MAPR_Max, 🔹Method, 🔹UseMAPR

Objects: None

🔹 Data.Apr.MAPR_Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]36.0

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this field.

🔹 Data.Apr.Method

TypeRequiredValuesDefault
Stringnodefault, actuarial, eu, ca, xirr, xirr360, irrdefault

This field allows the calling application to specify an APR calculation method which will override the default value found in the setup file for the given Account. If this field is set to a valid value, then the specified method will be used to compute the APR for this loan calculation.

If the Country field has been set by the calling application and this field is not set, then the APR method used will be determined by the specified country. For the United States of America, the default APR method is actuarial. For a country in the European Union, the default value is eu (European Union APR). For Canada, the default APR method is ca (Canadian APR).

The xirr value implements the internal rate of return method as implemented in Microsoft\textregistered Excel via the XIRR() function, and is based on an actual day calendar with a 365 day divisor.

The xirr360 value implements the internal rate of return method based upon a unit period calendar with a 360 day divisor.

The irr value implements a common spreadsheet internal rate of return method which assumes strict regular periods. Deviating from a strict regular periodicity may produce unreliable results.

If this field is not specified and the Country field is not specified, then the value of default will be used which informs the SCE to use the APR method defined in the setup file for the specified Account.

🔹 Data.Apr.UseMAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will compute the Military APR in addition to the Regulation Z APR. The MAPR object will be included in the loan response.


🟦 Data.Fees[]

TypeRequired
Array of Fee Objectsno

This array of Fee objects allows the calling application to specify one ore more Fee objects to be included with the loan.

Fields: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name

Objects: None

🔹 Data.Fees[].AddToFinChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be included in the computed Finance Charge (and hence, affect the APR), then set this field to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 Data.Fees[].AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this field to true. If set to false, then the fee is paid up front out of the borrower's pocket.

🔹 Data.Fees[].Adjust

TypeRequiredValuesDefault
StringnoCurrency0

The optional Adjust field allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This field has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCE is as follows:

{
  "Fees" : [
    {
      "Name" : "TN Fee",
      "CalcType" : "OnAmtFin",
      "Adjust" : "-2000.00",
      "Entry" : "0.115",
      "AddToPrin" : true,
      "AddToFinChg" : false
    }
  ]
}

🔹 Data.Fees[].CalcType

TypeRequiredValuesDefault
StringnoDollar, OnProceeds, OnPrincipal, OnAmtFinDollar

This field specifies how the fee is to be computed, as described in the following table.

Fee Calc TypeDescription
DollarThe Entry field is understood as a flat dollar amount.
OnProceedsThe Entry field is understood as a percentage value, to be applied to the loan's proceeds, defined as the sum of advances. An Entry of 0.25 would represent a fee of 0.25% of the total proceeds.
OnPrincipalThe Entry field is understood as a percentage value, to be applied to the loan's principal balance. An Entry of 0.125 would represent a fee of 0.125% of the principal balance.
OnAmtFinThe Entry field is understood as a percentage value, to be applied to the loan's Regulation Z Amount Financed. An Entry of 0.33 would represent a fee of 0.33% of the amount financed.

🔹 Data.Fees[].Entry

TypeRequiredValuesDefault
StringnoNumber >= 00

How this field is interpreted depends upon the Fee.CalcType field. Please see the documentation for this field for further information.

🔹 Data.Fees[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which fees need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.Fees[].MAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this field to true.

Fees which are added to the finance charge (e.g. "AddToFinChg" : true) are always considered MAPR fees, regardless of the stated value of this field.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Data.Fees[].Max

TypeRequiredValuesDefault
StringnoCurrency > 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Min

TypeRequiredValuesDefault
StringnoCurrency > 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value will be determined by the value of the Country field. For most countries, the default value is 2. If no country code is specified, then the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.ODI

TypeRequired
Objectno

If odd days should be treated as a prepaid finance charge or added to the first payment in a manner different from how interest is accruing, then the request needs to define how odd days interest is computed and handled using the fields of this object.

Fields: 🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

Objects: None

🔹 Data.ODI.AccrualCode

TypeRequiredValuesDefault
Stringno204, 205, 210, 211, 220, 221, 230, 231, 250default

The accrual code defines how the odd days interest is computed. The meaning of the allowed accrual codes is defined below.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

Accrual CodeDescription
204True360/360
205True360/365
210Actual/360
211True365/360
220Actual/365
221True365/365
230Actual/Actual
231Midnight 366
250Actual/Variable Days Per Year

🔹 Data.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application wants the odd days interest to be added to the first payment, then set the value of this field to true. A value of false indicates that the odd days interest will be treated as a prepaid finance charge.

🔹 Data.ODI.AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If any odd days interest should be treated as a financed prepaid fee, then set the value of this field to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCE and the value of AddToPrin will be set to false.

🔹 Data.ODI.AnchorDate

TypeRequiredValuesDefault
StringnoBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This field determines how to arrive at the anchor date. A value of BackUnitPeriod means that the anchor date is one unit period prior to the specified first payment date. A value of BackDaysPerPeriod means that the anchor date is the number of days per period prior to the first payment date. Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 Data.ODI.ForceUnitPeriod

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Some unit period methods will not use a strict unit period interest accrual factor in the period to the first payment. For example, code 302 will count the days to the first payment and divide by 365. For a monthly loan, setting this field to true will use a 1/12 factor instead of Days/365.

🔹 Data.ODI.NoCap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When the odd days interest is financed, setting this field to true prevents interest from being computed on interest. The default is false, which means interest will be computed on interest.

🔹 Data.ODI.UseDailyCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 Data.ODI.UseNegODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If there are negative odd days in the loan, then the value of this field determines if a negative odd days interest fee is computed. If the value of this field is false, then negative odd days fees are not allowed, the SCE will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes and odd days interest credit) when there are negative odd days in a loan.


🟦 Data.Protection

TypeRequired
Objectno

The Protection object is used by the calling application to request one or more payment protection products (e.g. life, disability, involuntary unemployment, or personal property) be included in the loan calculation. Each of these products is requested by including its own child object, along with the borrower birthdays.

Fields: 🔹Birthday1, 🔹Birthday2, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps

Objects: 🟦 Disability, 🟦 Life

🔹 Data.Protection.Birthday1

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the secondary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday2" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower2 or both.

🔹 Data.Protection.Birthday2

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the primary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday1" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower1 or both.

🔹 Data.Protection.Financed

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the computed premiums for single premium debt protection products should be financed along with the proceeds, then this field should be set to true (which is the default value if not specified). A value of false indicates that the computed premiums will not be financed with the proceeds, and hence will be paid out of pocket by the borrower. Note that this applies to single premium insurance products only!

🔹 Data.Protection.LineOfCredit

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this is an account using TruStage's MOB insurance, and if this loan is a line of credit where product term caps should be ignored, then set this field to true. Otherwise, omit this field or set it to false.

🔹 Data.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then any computed payment protection premium or fee will be considered a mandatory fee which will be included as a part of the Finance Charge, and hence affect the disclosed APR.

If the Mandatory field is set to false, then the loan will treat any premiums / fees as normal.

🔹 Data.Protection.ShowBorrowerInfo

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have data returned for each specified borrower instead of a single Term object, then set the value of this field to true. Otherwise, omit this field or set it to false. See the Borrower and Term objects defined in the response section for more information.

🔹 Data.Protection.ShowCaps

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have cap information (e.g. maximum terms, coverage amounts, ages, etc.) returned for each product offered, set the value of this field to true. Otherwise, omit this field or set it to false. See the Caps object defined in the response section for more information.


🟦 Data.Protection.Disability

TypeRequired
Objectno

The Disability object determines what type of disability coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table

Objects: None

🔹 Data.Protection.Disability.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Disability.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Disability object altogether or specify a value of none.

🔹 Data.Protection.Disability.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Disability.Table

TypeRequiredValuesDefault
StringnoInteger in [0...19]0

If the specified account has been set up with multiple disability or debt cancellation plans, then this field determines which plan number will be used. If no table number is specified, the first table (table zero) will be used.


🟦 Data.Protection.Life

TypeRequired
Objectno

The Life object determines what type of life coverage is requested for the loan.

Fields: 🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates

Objects: None

🔹 Data.Protection.Life.CovAmount

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a coverage amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum coverage amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified coverage amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Life.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Life object altogether or specify a value of none.

🔹 Data.Protection.Life.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Life.Dismemberment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer life protection products with optional dismemberment coverage, and if the optional dismemberment coverage is desired, then set this field's value to true. Otherwise, use the default value of false.

🔹 Data.Protection.Life.Method

TypeRequiredValuesDefault
StringnoDefault, Gross, NetDefault

Some accounts are configured to offer different types of credit life products (usually gross and net). In these accounts, this field allows the calling application to specify which method to use for a given loan. If no method is present in the request, then the default method will be used.

🔹 Data.Protection.Life.UseLevelRates

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer single premium credit life using level rates instead of the normal decreasing rates, and if you wish to use level rates instead of decreasing, then set this field's value to true. Otherwise, use the default value of false.


🟦 Data.ServiceCharges[]

TypeRequired
Array of ServiceCharge Objectsno

This array of ServiceCharge objects allows the calling application to specify one ore more Service Charge objects to be included with the loan.

Fields: 🔹CalcType, 🔸Entry, 🔹Exact, 🔹IsLoanCost, 🔹Name, 🔹Round

Objects: None

🔹 Data.ServiceCharges[].CalcType

TypeRequiredValuesDefault
StringnoLumpSum, PeriodicLumpSum

A service charge of type LumpSum allows the calling application to specify an amount that will be spread out evenly over the loan's payment stream. On the other hand, a Periodic service charge is the amount which will be added to each payment.

🔸 Data.ServiceCharges[].Entry

TypeRequiredValuesDefault
StringyesFloating >= 0n/a

How this field is interpreted depends upon the ServiceCharge.CalcType field. It is the numeric amount defining either the lump sum or periodically paid service charge.

🔹 Data.ServiceCharges[].Exact

TypeRequiredValuesDefault
Booleannotrue, falsefalse

The Exact field is only considered when the service charge is of type LumpSum. When the calculated periodic amount is rounded, it will most often times produce a total service charge amount that differs from what was specified.

If the Exact field is set to true, then the final periodic amount will be adjusted so that the sum of all periodic amounts is exactly equal to the entered amount (and will result in an odd final payment). A value of false indicates that the final periodic amount will not be adjusted.

🔹 Data.ServiceCharges[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which service charges need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.ServiceCharges[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the service charge in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.

🔹 Data.ServiceCharges[].Round

TypeRequiredValuesDefault
Stringnonearest, up, downnearest

This field is only considered when the service charge is of type LumpSum. It determines how the calculated periodic amount is rounded.


🟦 Data.Settings

TypeRequired
Objectno

The Settings object allows the calling application to alter the default loan calculation options.

Fields: 🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

Objects: None

🔹 Data.Settings.Account

TypeRequiredValuesDefault
StringnoInteger in [1..9999]1

The Account field specifies the numeric setup file account number that will be used to compute the requested loan. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which may affect the loan calculation, such as the accrual method, insurance methods / rates / caps, etc.

🔹 Data.Settings.AccrualCode

TypeRequiredValuesDefault
Stringnosee tabledefault

The method of interest accrual is defined by this field. A value of default informs the SCE to use the interest accrual method defined in the setup file for the specified Account. All other valid accrual codes are described in the table below.

🔹 Data.Settings.ConMethod

TypeRequiredValuesDefault
Stringnodefault, simple, interestonlydefault

When computing a construction loan, there are two supported methods for computing interest during the constrcution period:

If the value of this field is simple, then the estimated construction interets will be computed and disclosed as a lup-sum prepaid fee (see the Moneys.ConstructInterest response field).

If the value of this field is interestonly, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

A value of default instructs the SCE to use the construction method specified in the setup file for the given account.

🔹 Data.Settings.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.Settings.Lastday

TypeRequiredValuesDefault
Booleannotrue, falseas configured in setup file

If present, this field overrides the Last Day setting in the setup files, which only applies to loans computed with an actual day accrual calendar where the first payment date falls at the end of a month with fewer than 31 days. As an example, if the first payment date is on April 30, should the following payment dates be made on the 30th of each month, or on the last day of the month?

If no value is specified for this field, then the setup file setting will be used. If true is specified, then conditions triggering a last day situation will result in payments which fall at the end of the month. A value of false indicates that when dictated, subsequent payment dates will not be moved to the last day of the month.

🔹 Data.Settings.OddFinal

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Following the last payment of an amortization schedule, the ending balance is unlikely to be zero due to the rounding of the payment. In order to assure perfect amortization, lenders will use an odd final payment to perfectly amortize the loan.

Set OddFinal to true to ensure perfect amortization with a payment that pays off the loan.

🔹 Data.Settings.PmtDollarRound

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Payments are normally rounded to the penny, according to the method specified by in the setup file, or vy theSettings.PmtRound field. If the payment should be rounded to the dollar instead of the penny, then set the value of this field to true.

Note that for some loans (such as those with longer terms or relatively small proceeds), rounding the payment up or to the nearest dollar may require a shortened loan term to prevent one or more negative payments at the end of the loan.

🔹 Data.Settings.PmtRound

TypeRequiredValuesDefault
Stringnodefault, nearest, up, down, bestdefault

How are calculated payments to be rounded at and beyond this event? best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen. default means that the setting should be configured as specified in the setup file.

🔹 Data.Settings.ShowAmTable

TypeRequiredValuesDefault
Booleannotrue, falsetrue

To supress the entire amortization schedule from the response, set value of this field to false; otherwise, the amortization schedule will be returned with the response.

🔹 Data.Settings.TILARESPA2015

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will include data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015. If the field is omitted or set to false, then the TILA RESPA outputs will not be generated.

Note that this field is supported for equal payment loans, balloon payment loans, single payment notes, interest only loans, fixed principal plus interest loans, skips, pickups and irregulars, and ARMs.

🔹 Data.Settings.YieldPPY

TypeRequiredValuesDefault
Stringno0, 2, 4, 6, 120

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than `0', this field determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this field with a value other than zero, the calling application must include an odd days prepaid fee in the request.


Single Payment Note - Response

The Data object for a response from the SinglePmt module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data🔹Country
|- 🟥 Errors[]
|- 🟥 Warnings[]
|- 🟦 Results🔸Payment
|- 🟦 FedBox🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice
|- |- 🟥 APR🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type
|- |- 🟦 MAPR🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded
|- 🟦 TILARESPA2015🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP
|- |- 🟥 LoanCosts[]🔹Name, 🔹In5Years, 🔸Value
|- |- 🟥 In5Years🔸PaidTotal, 🔸PaidPrincipal
|- |- 🟥 MaxPnIPmt🔸Date, 🔸Amount
|- |- 🟥 MinRate🔸Rate, 🔸Idx
|- |- 🟥 MaxRate🔸Rate, 🔸Idx
|- |- 🟥 ProjectedPaymentsTable[]🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax
|- 🟦 Moneys🔸Principal, 🔸Interest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹MinIntChgAdj, 🔹MinFinChgAdj
|- |- 🟦 ODI🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost
|- |- 🟦 Fees[]🔹Name, 🔸Fee
|- |- 🟦 ServiceCharges[]🔹Name, 🔸Fee
|- |- 🟦 Protection🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory
|- 🟦 Accrual🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity
|- 🟦 PmtStreams[]🔸Term, 🔸Pmt, 🔹Rate, 🔸Begin
|- 🟦 Protection
|- |- 🟦 Life🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟦 Level🔸Result, 🔸Formula
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Disability🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- 🟦 AmTable🔹Months, 🔹Weeks, 🔹OddDays
|- |- 🟦 GrandTotals🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹SCTot
|- |- 🟦 SubTotals[]🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹SCSub
|- |- 🟥 AmLines[]🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹SC, 🔹UnpaidInt, 🔸EndBal

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔹Country

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Results, 🟦 FedBox, 🟦 TILARESPA2015, 🟦 Moneys, 🟦 Accrual, 🟦 PmtStreams[], 🟦 Protection, 🟦 AmTable

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

If the request specified a two-character or three-digit Country code, then this field will be present and will contain the full name of the country associated with the specified code. Please see the Countries Appendix for the list of supported countries and their associated codes.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "SinglePmt",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "SinglePmt",
  "Data" : {
    "Errors" : [
      "Data.LoanDate (StringDate) not found.",
      "Data.PmtDate (StringDate) not found.",
      "Data.IntRate (StringFloat) not found.",
      "Data.Proceeds (StringFloat) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

🟦 Data.Results

TypeRequired
Objectno

This field(s) of this object represent the most important numerical results for the loan request.

Fields: 🔸Payment,

Objects: None

🔸 Data.Results.Payment

TypeRequiredValues
StringyesCurrency

The loan payment is shown here.


🟦 Data.FedBox

TypeRequired
Objectno

This object groups together all fields which contain important numerical information, as defined in the Truth-In-Lending laws (Regulation Z).

Fields: 🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice

Objects: 🟥 APR, 🟦 MAPR

🔸 Data.FedBox.AmtFin

TypeRequiredValue
StringyesCurrency > 0.0

The Regulation Z Amount Financed, which is defined as the amount of credit provided to the borrower or on their behalf.

🔸 Data.FedBox.FinChg

TypeRequiredValue
StringyesCurrency

This element contains the Regulation Z Finance Charge, described as the dollar amount the credit extension will cost the borrower.

🔸 Data.FedBox.TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

The amount which the borrower will have paid when the borrower has made all scheduled payments.

🔹 Data.FedBox.TotalSalePrice

TypeRequiredValue
StringyesCurrency > 0.0

The sum of the total of payments plus the total down payment. Please note that if no TotalDown field was included in the request, then this element will not be present.


🟥 Data.FedBox.APR

TypeRequired
Objectyes

The APR object contains fields which return the value and APR method used.

Fields: 🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type

Objects: None

🔸 Data.FedBox.APR.Value

TypeRequiredValue
StringyesNumber

The computed APR, which is the cost of the extension of credit expressed as a yearly rate.

🔹 Data.FedBox.APR.Max

TypeRequiredValueDefault
StringnoNumbern/a

This field returns the maximum APR as configured in the account's setup files. If no maximum APR has been specified, then this field will not be present in the response. The value of this field should be displayed as a percentage.

🔹 Data.FedBox.APR.MaxExceeded

TypeRequiredValueDefault
Booleannotrue, falsen/a

If a maximum APR is configured in the account's setup files, then the value of this field indicates whether or not the current loan exceeds the maximum APR. If no maximum APR has been specified, then this field will not be present in the response.

🔸 Data.FedBox.APR.Type

TypeRequiredValue
StringyesText

This field returns the APR method used to compute the reported APR.


🟦 Data.FedBox.MAPR

TypeRequired
Objectno

The MAPR (military APR) object is only returned with the response if the value of the Apr.UseMAPR request field is true.

Fields: 🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded

Objects: None

🔸 Data.FedBox.MAPR.Value

TypeRequiredValue
StringyesNumber

The computed military APR.

🔸 Data.FedBox.MAPR.Advance

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the equivalent of the Amount Financed for the Military APR. Specifically, it is the principal balance less any MAPR fees, debt protection, etc.

🔸 Data.FedBox.MAPR.Max

TypeRequiredValue
StringyesNumber

This field holds the maximum Military APR as specified in the input XML (see Apr.MAPR_Max). If not specified, a default value of 36% is assumed. The value of this field should be displayed as a percentage. As an example, for "Max" :"36.000", you would disclose a maximum Military APR of 36%.

🔸 Data.FedBox.MAPR.MaxExceeded

TypeRequiredValue
Booleanyestrue, false

The value of this field indicates whether or not the current loan exceeds the maximum allowed Military APR. As an example, if the maximum APR has been set to 36% and the Military APR for the returned loan was 37.125%, the MAPR object would be:

{
  "MAPR" : {
    "Value" : "37.125",
    "Advance" : "1350.00",
    "Max" : "36.000",
    "MaxExceeded" : true
 }
}


🟦 Data.TILARESPA2015

TypeRequired
Objectno

This object contains fields which are of interest to fulfilling the 2015 TILA RESPA rule. It will only be present if the Settings.TILARESPA2015 field in the request is set to true.

Fields: 🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP

Objects: 🟥 LoanCosts[], 🟥 In5Years, 🟥 MaxPnIPmt, 🟥 MinRate, 🟥 MaxRate, 🟥 ProjectedPaymentsTable[]

🔸 Data.TILARESPA2015.TotalLoanCost

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field is the sum of all borrower paid loan costs. Since all LoanCost values are rounded dollar amounts, the value of this element will also be a rounded dollar amount.

🔸 Data.TILARESPA2015.CD_TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the sum of the total of payments, all borrower paid loan costs, and any odd days interest that is prepaid at loan closing. This value should be disclosed on the Closing Disclosure form in the Total of Payments field.

🔸 Data.TILARESPA2015.TIP

TypeRequiredValue
StringyesNumber

The total interest percentage, rounded to three or fewer decimal places - as required.


🟥 Data.TILARESPA2015.LoanCosts[]

TypeRequired
Array of LoanCost Objectsyes

For every object in the Fees[] array present in the request which has its IsLoanCost field set to true (and hence, is a borrower paid loan cost) and whose amount is greater than zero (except odd days interest fee types, as explained in the previous documentation of the Fee and object), there will be a corresponding LoanCost object.

Fields: 🔹Name, 🔹In5Years, 🔸Value

Objects: None

🔹 Data.TILARESPA2015.LoanCosts[].Name

TypeRequiredValueDefault
StringnoTextn/a

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔹 Data.TILARESPA2015.LoanCosts[].In5Years

TypeRequiredValueDefault
StringnoCurrency >= 0Same as Value

If the entire amount of the fee is different from the amount collected over the first five years (for example, a service charge), then this field will be present and disclose the portion of this loan coast that is accrued during the first five years.

🔸 Data.TILARESPA2015.LoanCosts[].Value

TypeRequiredValue
StringyesCurrency >= 0

The value of this field is the numerical value of the fee, rounded to the nearest dollar.


🟥 Data.TILARESPA2015.In5Years

TypeRequired
Objectyes

This object contains all important values required for the new "In 5 Years" section of the disclosure.

Fields: 🔸PaidTotal, 🔸PaidPrincipal

Objects: None

🔸 Data.TILARESPA2015.In5Years.PaidTotal

TypeRequiredValue
StringyesCurrency >= 0

This field holds the sum of all "principal, interest, mortgage insurance, and borrower paid loan costs scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.

🔸 Data.TILARESPA2015.In5Years.PaidPrincipal

TypeRequiredValue
StringyesCurrency >= 0

This field holds "the principal scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.


🟥 Data.TILARESPA2015.MaxPnIPmt

TypeRequired
Objectyes

The fields of this object hold the maximum sceduled principal and interest payment during the term of the loan, as well as the date on which that payment is made.

Fields: 🔸Date, 🔸Amount

Objects: None

🔸 Data.TILARESPA2015.MaxPnIPmt.Date

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field returns the date on which the maximum scheduled principal and interest payment is made. If the maximum scheduled payment occurs more than once, then the date returned is that of the first instance.

🔸 Data.TILARESPA2015.MaxPnIPmt.Amount

TypeRequiredValue
StringyesCurrency >= 0

The maximum sceduled principal and interest payment during the term of the loan.


🟥 Data.TILARESPA2015.MinRate

TypeRequired
Objectyes

The fields of this object hold information regarding the minimum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MinRate.Rate

TypeRequiredValue
StringyesNumber

The value of the minimum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MinRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the minimum rate is first applicable.


🟥 Data.TILARESPA2015.MaxRate

TypeRequired
Objectyes

The fields of this object hold information regarding the maximum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MaxRate.Rate

TypeRequiredValue
StringyesNumber

The value of the maximum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MaxRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the maximum rate is first applicable.


🟥 Data.TILARESPA2015.ProjectedPaymentsTable[]

TypeRequired
Array of PPCol Objectsyes

Fields: 🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax

Objects: None

This field returns an Array of projected payment table columns (PPCol), with each array member detailing a single column. Per the regulation, there will be a minimum of one column and a maximum of four columns, depending upon the parameters of the loan.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Num

TypeRequiredValue
StringyesInteger in [1...4]

The value of this field identifies the number of the column to which the following fields apply. The value will be from 1 to 4.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Title

TypeRequiredValue
StringyesText

The value of this field is the title for the column. Most of the time, it will be in the form of Years X - Y, or Year X, or Final Payment in the case of a final balloon payment.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearStart

TypeRequiredValue
StringyesInteger

The beginning year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearEnd

TypeRequiredValue
StringyesInteger

The ending year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMin

TypeRequiredValue
StringyesCurrency > 0

The minimum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMax

TypeRequiredValue
StringyesCurrency > 0

The maximum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].IntOnly

TypeRequiredValue
Stringyesnone, some, all

If none of the payments associated with this column are interest only payments, then the value of this field will be none. A value of some means that some of the payments (but not all) associated with this columnt are interest only. Finally, a value of all indicates that all payments associated with this columnt are interest only.

Note that for the purposes of this field, a scheduled payment is considered an interest only payment if the payment amount pays off all interest due at the time of the payment, with no reduction in the principal balance.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Balloon

TypeRequiredValue
Booleanyestrue, false

If any of the payments associated with this column are balloon payments (e.g. isolated payments that are more than twice the value of a regular periodic payment), then the value of this field will be true.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].MIPmt

TypeRequiredValue
StringyesCurrency > 0

The value of this field holds the mortgage insurance premium associated with this column, rounded to the nearest dollar. If no mortgage insurance is present or coverage has been dropped, a value of zero will be present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMin

TypeRequiredValue
StringyesCurrency > 0

This field returns the minimum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMax

TypeRequiredValue
StringyesCurrency > 0

This field returns the maximum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.


🟦 Data.Moneys

TypeRequired
Objectno

This element groups together those other major cash result amounts not disclosed under the FedBox object, such as the principal balance, interest charge, and fee amounts.

Fields: 🔸Principal, 🔸Interest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹MinIntChgAdj, 🔹MinFinChgAdj

Objects: 🟦 ODI, 🟦 Fees[], 🟦 ServiceCharges[], 🟦 Protection

🔸 Data.Moneys.Principal

TypeRequiredValue
StringyesCurrency >= 0

The principal balance is the amount on which interest is accrued. The principal balance consists of all advances requested by the borrower, as well as any fees and/or protection products which are financed.

🔸 Data.Moneys.Interest

TypeRequiredValue
StringyesCurrency

This value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments.

🔹 Data.Moneys.FinFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field contains the sum of all fees having AddToPrin set to true and occuring on the date of an advance. If this value is zero, the field will not appear in the response.

🔹 Data.Moneys.Prepaid

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field represents all prepaid finance charges and contains the sum of all fees occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will not be found in the response.

🔹 Data.Moneys.PocketFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are neither financed, nor added to the finance charge. In essence, they are paid out of the borrower's pocket. If no out of pocket fees were requested, then this field will not show up in the response.

🔹 Data.Moneys.MAPRFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are Military APR fees (including protection products), and will only appear if the Military APR has been requested.

🔹 Data.Moneys.MinIntChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum interest charge is configured in the account's setup files and the final payment was adjusted to meet this minimum interest charge, then this field will be returned in the response and will contain the value of the minimum interest charge adjustment.

🔹 Data.Moneys.MinFinChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum finance charge is configured in the account's setup files and the final payment was adjusted to meet this minimum finance charge, then this field will be returned in the response and will contain the value of the minimum finance charge adjustment.


🟦 Data.Moneys.ODI

TypeRequired
Objectno

This object, if present, contains information regarding odd days interest. If no odd days interest was requested, then this object will not be present in the response.

Fields: 🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost

Objects: None

🔹 Data.Moneys.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsen/a

If the odd days interest has been added to the first payment, then this field will be present in the response with a value of true. If the odd days interest has been treated as a prepaid finance charge, then this field will not be present and a default value of false should be assumed.

🔸 Data.Moneys.ODI.Count

TypeRequiredValues
StringyesInteger >= 0

Discloses the number of odd days computed by the SCE for the requested loan.

🔸 Data.Moneys.ODI.Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total amount odd days interest charge.

🔹 Data.Moneys.ODI.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field holds the number of odd months computed by the SCE for the requested loan when using odd days accrual method 250. If the odd days accrual method is a value other than 250, then this field will not be present in the ODI object of the response.

🔹 Data.Moneys.ODI.DailyCost

TypeRequiredValueDefault
StringnoCurrency >= 0.0n/a

If the odd days interest fee is computed using a rounded daily cost, then the value of this field will hold that value. If the odd days interest is not computed using a rounded daily cost, then this field will not be present in the response.


🟦 Data.Moneys.Fees[]

TypeRequired
Array of Fee Objectsno

If the requested loan included fees, then for each fee in the loan there will be a Fee object in this array containing the name of the fee and the computed fee amount.

If there were no fees requested with the loan, then the Moneys.Fees[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.Fees[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed fee amount.


🟦 Data.Moneys.ServiceCharges[]

TypeRequired
Array of ServiceCharge Objectsno

If the requested loan included service charges, then for each service charge in the loan there will be a ServiceCharge object in this array containing the name of the service charge and the computed service charge amount.

If there were no service charges requested with the loan, then the Moneys.ServiceCharges[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.ServiceCharges[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the service charge, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.ServiceCharges[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed service charge amount.


🟦 Data.Moneys.Protection

TypeRequired
Objectno

This object returns summary information on all payment protection products computed with the loan. If no protection products were included with the loan, then this object will be omitted from the response.

Fields: 🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory

Objects: None

🔸 Data.Moneys.Protection.Cost

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total cost of all protection plans included with the computed loan. For the individual plan costs, see the Protection field described below.

🔸 Data.Moneys.Protection.PerPmt

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per payment.

🔸 Data.Moneys.Protection.PerDay

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per day.

🔸 Data.Moneys.Protection.Category

TypeRequiredValues
StringyesNone, SP, MOB, TrueMOB, PaidSP

Te value of this field specifies the category under which the computed loan protection falls. The categories are described below:

CategoryDescription
NoneNo loan protection products were computed with this loan.
SPFinanced single premium coverage.
MOBMonthly outstanding balance coverage.
TrueMOBTruStage's monthly outstanding balance method.
PaidSPNon-financed single premium coverage.

🔹 Data.Moneys.Protection.IsDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field indicates if the specified account's protection is set up as debt protection. If this field is not present, then the default value of false should be used (which indicates that the account's protection is set up as insurance instead).

🔹 Data.Moneys.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field should only appear in the response if the value of the is true. If this field does not appear in the output, then the value should default to false.

If the value of the Mandatory field is true, then the total premium / fee amount for all insurance / debt protection products has been treated as a part of the Finance Charge, and hence will affect the effective APR.


🟦 Data.Accrual

TypeRequired
Objectno

This object groups together interest accrual information, such as the accrual method(s) used, days to the first payment and the loan's maturity date.

Fields: 🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity

Objects: None

🔸 Data.Accrual.Method

TypeRequiredValues
StringyesText

The Method field contains a textual description of the interest accrual method used to compute the loan (e.g. "Unit Period 365 Simple".)

🔸 Data.Accrual.Days1Pmt

TypeRequiredValues
StringyesInteger >= 0

This field contains the number of days between the date of the first advance and the date of first payment, computed by one of two methods as specified in by Accrual.DayCount (below).

🔸 Data.Accrual.DayCount

TypeRequiredValues
StringyesTrue360, Actual

This field specifies the method used to compute the number of days from the date of the first advance until the first payment date. Actual means that the actual number of days between these two dates are used, whereas the True360 method use a 360 day calendar.

🔸 Data.Accrual.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

Holds the maturity date of the loan, which is the date on which the last payment is scheduled. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.PmtStreams[]

TypeRequired
Objectno

The PmtStreams[] array is made up of one or more PmtStream objects (there will always be at least one of these elements, and there may be more than one depending upon the loan type). The PmtStream objects describe the scheduled stream of payments for the computed loan. Instead of disclosing each and every payment individually (which can be done with the AmTable object), the payment stream groups together consecutive equal payments at the same interest rate to produce output along the lines of:

{
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "10062.59",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ]
}

Each object describes a single stream of equal payments at the same interest rate, using the following fields to define the important properties of each payment stream.

Fields: 🔸Term, 🔸Pmt, 🔸Rate, 🔸Begin

Objects: Note

🔸 Data.PmtStreams[].Term

TypeRequiredValues
StringyesInteger >= 0

The Term field holds the number of payments that make up the given payment stream.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValues
StringyesCurrency > 0

The Pmt field holds the computed payment amount for this payment stream.

🔹 Data.PmtStreams[].Rate

TypeRequiredValues
StringyesNumber

Contains the interest rate used for the duration of this payment stream. If this payment stream accrued interest using split-rate tiers, then this field will not be returned.

🔸 Data.PmtStreams[].Begin

TypeRequiredValues
StringyesYYYY-MM-DD

This field identifies the date on which the first payment for this given payment stream is scheduled to be made. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.Protection

TypeRequired
Objectno

If protection products are requested, then this object will be present in the response, along with a field for each requested protection product.

Fields : None

Objects: 🟦 Life, 🟦 Level, 🟦 Disability


🟦 Data.Protection.Life

TypeRequired
Objectno

If life protection was requested with the loan and decreasing life was configured for this loan type, then the Life object will be present in the response to return information on decreasing life coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Life.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Life.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Life.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Life.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Life.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Life.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Life.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Life.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Life.Cost.Premium2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary life product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Life.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Life.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Life.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Life.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Life.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Life.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Life.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Term

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Level

TypeRequired
Objectno

If level protection was requested with the loan and decreasing level was configured for this loan type, then the Life object will be present in the response to return information on decreasing level coverage.

Fields: 🔸Result, 🔸Formula,

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Level.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Level.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🟦 Data.Protection.Level.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Level.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Level.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Level.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Level.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Level.Cost.Premium2

TypeRequiredValuesDefault
StringyesCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary Level product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Level.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Level.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Level.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Level.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Level.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Level.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Level.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Disability

TypeRequired
Objectno

If disability protection was requested with the loan and decreasing disability was configured for this loan type, then the Life object will be present in the response to return information on decreasing disability coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Disability.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Disability.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Disability.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Disability.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Disability.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Disability.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Disability.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Disability.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Disability.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Disability.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Disability.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Disability.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Disability.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Disability.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Disability.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower2

TypeRequired
Objectno

The borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Disability.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.AmTable

TypeRequired
Objectno

This object contains fields which summarize and describe the loan's amortization schedule. If Settings.ShowAmTable is set to false, then this object will not be found in the response.

Fields: 🔹Months, 🔹Weeks, 🔹OddDays

Objects: 🟦 GrandTotals, 🟦 SubTotals[], 🟥 AmLines[]

🔹 Data.AmTable.AvgBal

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the average balance of the loan used in the Canadian APR calculation.

🔹 Data.AmTable.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of months in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.Weeks

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of weeks in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.OddDays

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the number of odd days in the term of the loan used in the Canadian APR calculation. Odd days are computed by moving backwards from the maturity date the number of disclosed months or weeks, and then counting the additional number of days required to land on the loan date.

🟦 Data.AmTable.GrandTotals

TypeRequired
Objectno

This object describes the total amounts of various categories throughout the life of the loan. As an example, the total amount paid to interest and principal, as well as the total of payments are all contained in fields of this object.

Fields: 🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹SCTot

Objects: None


🔸 Data.AmTable.GrandTotals.PmtTot

TypeRequiredValues
StringyesCurrency

The total of payments scheduled for the computed loan.

🔸 Data.AmTable.GrandTotals.IntTot

TypeRequiredValues
StringyesCurrency

The total amount paid to interest over the life of the loan, assuming all payments are made as scheduled.

🔸 Data.AmTable.GrandTotals.PrinTot

TypeRequiredValues
StringyesCurrency

This field contains the total amount paid to principal during the loan term, assuming all payments are made as scheduled.

🔹 Data.AmTable.GrandTotals.CLTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLTot field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life over the duration of the loan.

🔹 Data.AmTable.GrandTotals.AHTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHTot field will only appear on loans with certain types of disability or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.SCTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The SCTot field will only appear on loans with service charges. It contains the total service charge amount paid over the duration of the loan.


🟦 Data.AmTable.SubTotals[]

TypeRequired
Array of SubTotal Objectsno

Describes the total amounts of various categories paid during a given calendar year. For each year in which the computed loan has scheduled payments, there will be a SubTotal object in the array.

Fields: 🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹SCSub

Objects: None

🔸 Data.AmTable.SubTotals[].Year

TypeRequiredValues
StringyesInteger >= 0

The calendar year for which the subtotal data is applicable.

🔸 Data.AmTable.SubTotals[].Start

TypeRequiredValues
StringyesInteger >= 0

This field defines the first amortization event which falls in the specified calendar year. To find the AmLines[] object which corresponds to this value, match the Idx field of the AmLine object.

🔸 Data.AmTable.SubTotals[].Events

TypeRequiredValues
StringyesInteger >= 0

This field defines the number of amortization events which belong to this calendar year.

🔸 Data.AmTable.SubTotals[].PmtSub

TypeRequiredValues
StringyesCurrency

Contains the total of payments scheduled for the calendar year.

🔸 Data.AmTable.SubTotals[].IntSub

TypeRequiredValues
StringyesCurrency

Holds the total amount paid to interest over the calendar year, assuming all payments are made as scheduled.

🔸 Data.AmTable.SubTotals[].PrinSub

TypeRequiredValues
StringyesCurrency

Contains the total amount paid to principal during the calendar year, assuming all payments are made as scheduled.

🔹 Data.AmTable.SubTotals[].CLSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLSub field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life during the year.

🔹 Data.AmTable.SubTotals[].AHSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHSub field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection during the year.

🔹 Data.AmTable.SubTotals[].SCSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The SCSub field will only appear on loans with service charges. It contains the total of service charges paid during the year.


🟥 Data.AmTable.AmLines[]

TypeRequired
Array of AmLine Objectsyes

There is one AmLine object for each amortization event which occurs during the life of a loan. Most of the time, each event will describe a payment, and detail how that payment is applied (to interest, principal, loan protection products, etc.). Some events, such as capitalizing interest, will not have payments but will show how the loan amortizes.

Fields: 🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹SC, 🔹UnpaidInt, 🔸EndBal

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValues
StringyesInteger >= 0

The index of the amortization event, which is either the payment number, or zero. A value of zero designates an event that is either not a payment or is a skipped payment.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The date on which the amortization event is scheduled to occur. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 AmData.AmTable.AmLines[]ine.BegBal

TypeRequiredValues
StringyesCurrency >= 0

The principal balance before the amortization event occurs.

🔸 Data.AmTable.AmLines[].Pmt

TypeRequiredValues
StringyesCurrency

The payment amount for this event.

🔸 Data.AmTable.AmLines[].Int

TypeRequiredValues
StringyesCurrency

The amount of interest paid at this event.

🔸 Data.AmTable.AmLines[].Prin

TypeRequiredValues
StringyesCurrency

The amount of principal paid at this event.

🔹 Data.AmTable.AmLines[].CL

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CL field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for life coverage.

🔹 Data.AmTable.AmLines[].AH

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AH field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for disability / debt protection coverage.

🔹 Data.AmTable.AmLines[].SC

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field contains the total service charge for this payment, and will only be present if one or more service charges were requested with the loan.

🔹 Data.AmTable.AmLines[].UnpaidInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear on an amortization line when interest has been accrued, but has not yet been paid or added to the principal balance. If the interest accrued has not yet been rounded, then the unpaid interest will be displayed to four (4) decimal placed. If rounded, then the unpaid interest is displayed to two (2) decimal places.

🔸 Data.AmTable.AmLines[].EndBal

TypeRequiredValues
StringyesCurrency

The principal balance amount, after the amortization event has taken place.


Interest Only Loans

Interest only loans are loans which have a payment stream consisting of one or more interest only payment, with a final payment paying off the principal balance plus the interest accrued during the final payment period. The principal balance does not decrease during the term of the loan, until the final payment when it is scheduled to be fully paid.

Sample Request

The following example is a request for an interest only loan with proceeds of $10,000, interest will accrue at a 4.5% rate using a unit period / 360 U. S. Rule accrual method (accrual code 301), with a financed and APR affecting document preparation fee of $25 included. There will be 11 monthly interest only payments with an additional final payment paying off the loan.

{
  "Module" : "InterestOnly",
  "Data" : {
    "LoanDate" : "2022-08-22",
    "PmtDate" : "2022-10-01",
    "IntRate" : "4.500",
    "Term" : "12",
    "PPY" : "12",
    "Proceeds" : "10000.00",
    "Fees" : [
      {
        "Name" : "Doc Prep Fee",
        "AddToFinChg" : true,
        "AddToPrin" : true,
        "CalcType" : "Dollar",
        "Entry" : "25.00"
      }
    ],
    "Settings" : {
      "AccrualCode" : "301"
    }
  }
}

Sample Response

The following example is the response returned from the SCE for the request provided at the beginning of the previous section.

Example - Response Envelope for InterestOnly Module:

{
  "Result" : 200,
  "Module" : "InterestOnly",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Results" : {
      "Final" : "10062.59",
      "First" : "50.13"
    },
    "FedBox" : {
      "AmtFin" : "10000.00",
      "FinChg" : "488.62",
      "TotPmts" : "10488.62",
      "APR" : {
        "Value" : "4.748",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Principal" : "10025.00",
      "Interest" : "463.62",
      "FinFees" : "25.00",
      "FinChgFees" : "25.00",
      "Fees" : [
        {
          "Name" : "Doc Prep Fee",
          "Fee" : "25.00"
        }
      ]
    },
    "Accrual" : {
      "Method" : "Unit Period 360 US Rule",
      "Days1Pmt" : "40",
      "DayCount" : "Actual",
      "Maturity" : "2023-09-01"
    },
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "50.13",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "10",
        "Pmt" : "37.59",
        "Rate" : "4.500",
        "Begin" : "2022-11-01"
      },
      {
        "Term" : "1",
        "Pmt" : "10062.59",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ],
    "AmTable" : {
      "GrandTotals" : {
        "PmtTot" : "10488.62",
        "IntTot" : "463.62",
        "PrinTot" : "10025.00"
      },
      "SubTotals" : [
        {
          "Year" : "2022",
          "Start" : "1",
          "Events" : "3",
          "PmtSub" : "125.31",
          "IntSub" : "125.31",
          "PrinSub" : "0.00"
        },
        {
          "Year" : "2023",
          "Start" : "4",
          "Events" : "9",
          "PmtSub" : "10363.31",
          "IntSub" : "338.31",
          "PrinSub" : "10025.00"
        }
      ],
      "AmLines" : [
        {
          "Idx" : "1",
          "Date" : "2022-10-01",
          "BegBal" : "10025.00",
          "Pmt" : "50.13",
          "Int" : "50.13",
          "Prin" : "0.00",
          "EndBal" : "10025.00"
        },
        {
          "Idx" : "2",
          "Date" : "2022-11-01",
          "BegBal" : "10025.00",
          "Pmt" : "37.59",
          "Int" : "37.59",
          "Prin" : "0.00",
          "EndBal" : "10025.00"
        },
        ...,
        {
          "Idx" : "12",
          "Date" : "2023-09-01",
          "BegBal" : "10025.00",
          "Pmt" : "10062.59",
          "Int" : "37.59",
          "Prin" : "10025.00",
          "EndBal" : "0.00"
        }
      ]
    }
  }
}

Interest Only Loan Module - Request

The fields of the Data object supported by a InterestOnly module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Country, 🔸IntRate, 🔹IntStartDate, 🔸LoanDate, 🔸PmtDate, 🔹PPY, 🔸Proceeds, 🔸Term, 🔹TotalDown

Objects: 🟦 Apr, 🟦 Construction, 🟦 Fees[], 🟦 Format, 🟦 MI, 🟦 ODI, 🟦 Protection, 🟦 Settings

The fields of the Data object supported by an Equal Pmt module request are defined in alphabetical order below:

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

This field allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see the Countries Appendix for the list of supported countries and their associated codes.

Specifying the Country will also set the default value for the APR.Method and Format.CurrencyDecimals fields, as appropriate for the country specified.

🔸 Data.IntRate

TypeRequiredValues
StringyesNumber in [-99.999...600]

Determine the interest rate used for the loan. The interest rate should be expressed as a percentage. For example, a loan computed with a rate of 5.125% would be specified as "IntRate" : "5.125".

🔹 Data.IntStartDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDsame value as LoanDate

This field contains the date on which interest begins to accrue on the loan's principal balance. If this field is not specified, then the interest start date is set equal the loan date. Also note that the interest start date must be equal to the loan date when computing a construction loan.

The interest start date (when specified) must be on or after the loan date, as well as on or before the first payment date.

🔸 Data.LoanDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field holds the date on which the loan amount is disbursed and interest begins to accrue. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔸 Data.PmtDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field specifies the first (and for single payment notes, only) payment date in the loan's repayment schedule. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for payments per year, and determines the payment frequency for the requested loan. The default value of 12 will result in a loan with 12 payments per year. If you require a loan with a payment frequency other than monthly, specify it using this field.

🔸 Data.Proceeds

TypeRequiredValuesDefault
StringyesCurrency > 0n/a

The proceeds specified indicate the amount of money the borrower is requesting, and does not include financed fees, financed insurances, etc.

🔹 Data.TotalDown

TypeRequiredValues
StringnoCurrency > 0

This optional field represents the total down payment that the borrower has applied to reduce the requested proceeds. It may consist of a cash down payment, net trade-in value, or rebate. You only need to specify a total down payment if the loan needs to disclose a total sale price. Typical examples of these loan types are auto and boat loans.

🔸 Data.Term

TypeRequiredValues
StringyesInteger > 1

The Term field indicates the the number of payments to be made at the specified payment frequency (see the PPY field above), after which the loan is scheduled to be paid off.


🟦 Data.Apr

TypeRequired
Objectno

Settings related to the computed effective rate returned by the SCE (most commonly, the Regulation Z APR in the United States of America) are contained in the fields of this object.

Fields: 🔹MAPR_Max, 🔹Method, 🔹UseMAPR

Objects: None

🔹 Data.Apr.MAPR_Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]36.0

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this field.

🔹 Data.Apr.Method

TypeRequiredValuesDefault
Stringnodefault, actuarial, eu, ca, xirr, xirr360, irrdefault

This field allows the calling application to specify an APR calculation method which will override the default value found in the setup file for the given Account. If this field is set to a valid value, then the specified method will be used to compute the APR for this loan calculation.

If the Country field has been set by the calling application and this field is not set, then the APR method used will be determined by the specified country. For the United States of America, the default APR method is actuarial. For a country in the European Union, the default value is eu (European Union APR). For Canada, the default APR method is ca (Canadian APR).

The xirr value implements the internal rate of return method as implemented in Microsoft\textregistered Excel via the XIRR() function, and is based on an actual day calendar with a 365 day divisor.

The xirr360 value implements the internal rate of return method based upon a unit period calendar with a 360 day divisor.

The irr value implements a common spreadsheet internal rate of return method which assumes strict regular periods. Deviating from a strict regular periodicity may produce unreliable results.

If this field is not specified and the Country field is not specified, then the value of default will be used which informs the SCE to use the APR method defined in the setup file for the specified Account.

🔹 Data.Apr.UseMAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will compute the Military APR in addition to the Regulation Z APR. The MAPR object will be included in the loan response.


🟦 Data.Construction

TypeRequired
Objectno

The Construction object determines if this loan is a construction to permanent loan request. If you wish to compute a construction loan without an attached permanent loan, you will need to use either the Construction or Loan modules.

Fields: 🔹HalfCommitment, 🔹PPY, 🔸Rate, 🔸Term

Objects: None

🔹 Data.Construction.HalfCommitment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

During the term of the construction loan, the estimated interest for disclosure purposes may be either computed on the full or half commitment amounts. By setting this field to true, interest will be estimated using half of the initial commitment amount (i.e. the principal balance). The default value of false will cause interest to be estimated using the entire initial commitment amount.

🔹 Data.Construction.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

The PPY field allows the calling application to specify the payment frequency during the construction period. The default value of 12 will result in a construction loan with 12 payments per year. If you require a payment frequency during the construction period other than monthly, then specify it using this field. Note that the permanent loan's payment frequency may differ from the construction period's payment frequency.

🔸 Data.Construction.Rate

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]n/a

This field determines the rate applied to the appropriate commitment amount during the term of the construction loan.

🔸 Data.Construction.Term

TypeRequiredValuesDefault
StringyesInteger > 0n/a

The term of the construction loan (in payments) is specified using this field. Please note that the term may not exceed five years.


🟦 Data.Fees[]

TypeRequired
Array of Fee Objectsno

This array of Fee objects allows the calling application to specify one ore more Fee objects to be included with the loan.

Fields: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name

Objects: None

🔹 Data.Fees[].AddToFinChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be included in the computed Finance Charge (and hence, affect the APR), then set this field to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 Data.Fees[].AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this field to true. If set to false, then the fee is paid up front out of the borrower's pocket.

🔹 Data.Fees[].Adjust

TypeRequiredValuesDefault
StringnoCurrency0

The optional Adjust field allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This field has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCE is as follows:

{
  "Fees" : [
    {
      "Name" : "TN Fee",
      "CalcType" : "OnAmtFin",
      "Adjust" : "-2000.00",
      "Entry" : "0.115",
      "AddToPrin" : true,
      "AddToFinChg" : false
    }
  ]
}

🔹 Data.Fees[].CalcType

TypeRequiredValuesDefault
StringnoDollar, OnProceeds, OnPrincipal, OnAmtFinDollar

This field specifies how the fee is to be computed, as described in the following table.

Fee Calc TypeDescription
DollarThe Entry field is understood as a flat dollar amount.
OnProceedsThe Entry field is understood as a percentage value, to be applied to the loan's proceeds, defined as the sum of advances. An Entry of 0.25 would represent a fee of 0.25% of the total proceeds.
OnPrincipalThe Entry field is understood as a percentage value, to be applied to the loan's principal balance. An Entry of 0.125 would represent a fee of 0.125% of the principal balance.
OnAmtFinThe Entry field is understood as a percentage value, to be applied to the loan's Regulation Z Amount Financed. An Entry of 0.33 would represent a fee of 0.33% of the amount financed.

🔹 Data.Fees[].Entry

TypeRequiredValuesDefault
StringnoNumber >= 00

How this field is interpreted depends upon the Fee.CalcType field. Please see the documentation for this field for further information.

🔹 Data.Fees[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which fees need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.Fees[].MAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this field to true.

Fees which are added to the finance charge (e.g. "AddToFinChg" : true) are always considered MAPR fees, regardless of the stated value of this field.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Data.Fees[].Max

TypeRequiredValuesDefault
StringnoCurrency > 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Min

TypeRequiredValuesDefault
StringnoCurrency > 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value will be determined by the value of the Country field. For most countries, the default value is 2. If no country code is specified, then the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.MI

TypeRequired
Objectno

The MI object determines if this loan includes one of the supported types of mortgage insurance (MI): PMI or FHA. This object contains fields which further specify mortgage insurance options.

Fields: 🔹CashDown 🔹LoanAmt, 🔸PropertyValue, 🔹Type

Objects: 🟦 Periodic, 🟥 Rates[], 🟦 UpFront

🔹 Data.MI.CashDown

TypeRequiredValuesDefault
StringnoCurrency >= 00

The CashDown field represents a cash down payment made at closing. If specified and greater than zero, this amount will be deducted from the principal balance. If not specified, the cash down payment will default to zero.

🔹 Data.MI.LoanAmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

This field represents the amount by which the PMI rates are multiplied to produce a level PMI premium. If not specified, then the principal balance will be used to compute the annual premium.

🔸 Data.MI.PropertyValue

TypeRequiredValues
StringyesCurrency >= 0

This field's value represents the appraised property value, and will be used in the calculation of the loan to value ratio.

🔹 Data.MI.Type

TypeRequiredValuesDefault
Stringnofha, pmipmi

This field determines the type of mortgage insurance to include with the loan. If the value of this field is set to fha, then a different MI premium is computed every twelve months based upon the average outstanding principal balance during that same term. The MI calculation adheres strictly to the HUD regulation.

If the value of this field is set to pmi, then each defined MI rate produces a level MI premium based upon the inital loan amount.


🟦 Data.MI.Periodic

TypeRequired
Objectno

The fields of this object determine the conditions when MI is no longer included.

Fields: 🔹DropLTV, 🔹Term, 🔹WarnLTV

Objects: None

🔹 Data.MI.Periodic.DropLTV

TypeRequiredValuesDefault
StringnoNumber >= 00

The value of this field determines the loan to value ratio at which MI should be removed, and is expressed as a percentage. For example, if you wish to automatically drop MI when the loan to value ratio first equals or falls below 78%, then you would specify "DropLTV" : "78.0".

🔹 Data.MI.Periodic.Term

TypeRequiredValuesDefault
StringnoInteger >= 00

The value of this field represents the the term (in payments) beyond which MI will be removed.

As an example, if mortgage insurance must be removed after the 180th payment, then the calling application should specify

{
  "MI" : {
    "Periodic" : { "Term" : "180"}
 }
}

🔹 Data.MI.Periodic.WarnLTV

TypeRequiredValuesDefault
StringnoNumber >= 00

The value of this field determines the loan to value ratio at which a warning should be issued, and is expressed as a percentage of LTV (loan to value). For example,if you wish to know when the loan to value ratio first equals or falls below 80%, then you would specify "WarnLTV" : "80.0".


🟥 Data.MI.Rates[]

TypeRequired
Array of Rate Objectsyes

This array if Rate objects defines the rates used to compute MI on the loan. There must be at least one Rate object in the Rates[] array, and there can be more than one if rates are set to switch at a specified payment number.

Fields: 🔸Rate, 🔹Switch

Objects: None

🔸 Data.MI.Rates[].Rate

TypeRequiredValues
StringyesNumber>= 0.0

The value of this field specifies the cost of mortgage insurance per $100 of the loan amount. As an example, a loan computed with a MI rate of $1.50 per $100 would be specified as

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"}
    ]
 }
}

🔹 Data.MI.Rates[].Switch

TypeRequiredValuesDefault
StringnoInteger >= 00

This optional field defines the payment number beyond which the associated MI rate will apply. If not specified, the value will default to zero.

Thus, if there is only a single MI rate, one may omit this field (see example above).

Example of a MI multiple rate structure (use a rate of $1.50 for the first 10 years, with a rate of $0.20 for coverage beyond 10 years):

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"},
      { "Rate" : "0.20" , "Switch" : "120"}
    ]
 }
}

🟦 Data.MI.UpFront

TypeRequired
Objectno

This object determines if there is an up front fee for mortgage insurance, and if so, how it is computer. If this object is not present in the request, then no up front fee will be computed. Note that ZOMP (zero option monthly premium) products do not have an up front fee, which means that this object should be omitted.

Fields: 🔹Paid, 🔹Reduce, 🔹Units, 🔹Value

Objects: None

🔹 Data.MI.UpFront.Paid

TypeRequiredValuesDefault
Stringnoatclosing, bylender, financedatclosing

If the value of this field is set to financed, then the computed up front fee will be added to the principal balance and the finance charge. A value of atclosing will cause the value of the fee to be added to the finance charge alone. Finally, a value of bylender means that the up front fee is to be paid by the lender, hence the value of the fee is not added to either the principal balance nor the finance charge.

🔹 Data.MI.UpFront.Reduce

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the specified number of periodic premiums to include as an up front fee is greater than zero, then this field determines if the term of coverage for PMI will be reduced by the same amount.

🔹 Data.MI.UpFront.Units

TypeRequiredValuesDefault
Stringnomonths, points, yearsmonths

If the Units field is set to months, then UpFront.Value represents the number of periodic MI premiums to be paid at closing.

If the Units field is set to Years, then UpFront.Value represents the number of annual MI premiums to be paid at closing. Many single premium products define the up front fee as a number of years of MI to be paid up front.

Finally, if the Units field is set to Points, then UpFront.Value represents the percentage of principal to be paid up front. As of October 3, 2011, FHA loans use points.

🔹 Data.MI.UpFront.Value

TypeRequiredValuesDefault
StringnoCurrency >= 00

If part of the MI fees are to be paid up front, then value of this field must be grater than zero. How the value of this field is interpreted depends upon the Units field (see below).

The default value of zero means that no up front fee will be computed.


🟦 Data.ODI

TypeRequired
Objectno

If odd days should be treated as a prepaid finance charge or added to the first payment in a manner different from how interest is accruing, then the request needs to define how odd days interest is computed and handled using the fields of this object.

Fields: 🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

Objects: None

🔹 Data.ODI.AccrualCode

TypeRequiredValuesDefault
Stringno204, 205, 210, 211, 220, 221, 230, 231, 250default

The accrual code defines how the odd days interest is computed. The meaning of the allowed accrual codes is defined below.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

Accrual CodeDescription
204True360/360
205True360/365
210Actual/360
211True365/360
220Actual/365
221True365/365
230Actual/Actual
231Midnight 366
250Actual/Variable Days Per Year

🔹 Data.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application wants the odd days interest to be added to the first payment, then set the value of this field to true. A value of false indicates that the odd days interest will be treated as a prepaid finance charge.

🔹 Data.ODI.AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If any odd days interest should be treated as a financed prepaid fee, then set the value of this field to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCE and the value of AddToPrin will be set to false.

🔹 Data.ODI.AnchorDate

TypeRequiredValuesDefault
StringnoBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This field determines how to arrive at the anchor date. A value of BackUnitPeriod means that the anchor date is one unit period prior to the specified first payment date. A value of BackDaysPerPeriod means that the anchor date is the number of days per period prior to the first payment date. Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 Data.ODI.ForceUnitPeriod

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Some unit period methods will not use a strict unit period interest accrual factor in the period to the first payment. For example, code 302 will count the days to the first payment and divide by 365. For a monthly loan, setting this field to true will use a 1/12 factor instead of Days/365.

🔹 Data.ODI.NoCap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When the odd days interest is financed, setting this field to true prevents interest from being computed on interest. The default is false, which means interest will be computed on interest.

🔹 Data.ODI.UseDailyCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 Data.ODI.UseNegODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If there are negative odd days in the loan, then the value of this field determines if a negative odd days interest fee is computed. If the value of this field is false, then negative odd days fees are not allowed, the SCE will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes and odd days interest credit) when there are negative odd days in a loan.


🟦 Data.Protection

TypeRequired
Objectno

The Protection object is used by the calling application to request one or more payment protection products (e.g. life, disability, involuntary unemployment, or personal property) be included in the loan calculation. Each of these products is requested by including its own child object, along with the borrower birthdays.

Fields: 🔹Birthday1, 🔹Birthday2, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps

Objects: 🟦 Disability, 🟦 Life, 🟦 Unemployment

🔹 Data.Protection.Birthday1

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the secondary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday2" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower2 or both.

🔹 Data.Protection.Birthday2

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the primary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday1" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower1 or both.

🔹 Data.Protection.Financed

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the computed premiums for single premium debt protection products should be financed along with the proceeds, then this field should be set to true (which is the default value if not specified). A value of false indicates that the computed premiums will not be financed with the proceeds, and hence will be paid out of pocket by the borrower. Note that this applies to single premium insurance products only!

🔹 Data.Protection.LineOfCredit

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this is an account using TruStage's MOB insurance, and if this loan is a line of credit where product term caps should be ignored, then set this field to true. Otherwise, omit this field or set it to false.

🔹 Data.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then any computed payment protection premium or fee will be considered a mandatory fee which will be included as a part of the Finance Charge, and hence affect the disclosed APR.

If the Mandatory field is set to false, then the loan will treat any premiums / fees as normal.

🔹 Data.Protection.ShowBorrowerInfo

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have data returned for each specified borrower instead of a single Term object, then set the value of this field to true. Otherwise, omit this field or set it to false. See the Borrower and Term objects defined in the response section for more information.

🔹 Data.Protection.ShowCaps

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have cap information (e.g. maximum terms, coverage amounts, ages, etc.) returned for each product offered, set the value of this field to true. Otherwise, omit this field or set it to false. See the Caps object defined in the response section for more information.


🟦 Data.Protection.Disability

TypeRequired
Objectno

The Disability object determines what type of disability coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table

Objects: None

🔹 Data.Protection.Disability.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Disability.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Disability object altogether or specify a value of none.

🔹 Data.Protection.Disability.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Disability.Table

TypeRequiredValuesDefault
StringnoInteger in [0...19]0

If the specified account has been set up with multiple disability or debt cancellation plans, then this field determines which plan number will be used. If no table number is specified, the first table (table zero) will be used.


🟦 Data.Protection.Life

TypeRequired
Objectno

The Life object determines what type of life coverage is requested for the loan.

Fields: 🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates

Objects: None

🔹 Data.Protection.Life.CovAmount

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a coverage amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum coverage amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified coverage amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Life.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Life object altogether or specify a value of none.

🔹 Data.Protection.Life.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Life.Dismemberment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer life protection products with optional dismemberment coverage, and if the optional dismemberment coverage is desired, then set this field's value to true. Otherwise, use the default value of false.

🔹 Data.Protection.Life.Method

TypeRequiredValuesDefault
StringnoDefault, Gross, NetDefault

Some accounts are configured to offer different types of credit life products (usually gross and net). In these accounts, this field allows the calling application to specify which method to use for a given loan. If no method is present in the request, then the default method will be used.

🔹 Data.Protection.Life.UseLevelRates

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer single premium credit life using level rates instead of the normal decreasing rates, and if you wish to use level rates instead of decreasing, then set this field's value to true. Otherwise, use the default value of false.


🟦 Data.Protection.Unemployment

TypeRequired
Objectno

The Unemployment object determines what type of unemployment coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm

Objects: None

🔹 Data.Protection.Unemployment.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Unemployment.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Unemployment object altogether or specify a value of none.

🔹 Data.Protection.Unemployment.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.


🟦 Data.Settings

TypeRequired
Objectno

The Settings object allows the calling application to alter the default loan calculation options.

Fields: 🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

Objects: None

🔹 Data.Settings.Account

TypeRequiredValuesDefault
StringnoInteger in [1..9999]1

The Account field specifies the numeric setup file account number that will be used to compute the requested loan. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which may affect the loan calculation, such as the accrual method, insurance methods / rates / caps, etc.

🔹 Data.Settings.AccrualCode

TypeRequiredValuesDefault
Stringnosee tabledefault

The method of interest accrual is defined by this field. A value of default informs the SCE to use the interest accrual method defined in the setup file for the specified Account. All other valid accrual codes are described in the table below.

🔹 Data.Settings.ConMethod

TypeRequiredValuesDefault
Stringnodefault, simple, interestonlydefault

When computing a construction loan, there are two supported methods for computing interest during the constrcution period:

If the value of this field is simple, then the estimated construction interets will be computed and disclosed as a lup-sum prepaid fee (see the Moneys.ConstructInterest response field).

If the value of this field is interestonly, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

A value of default instructs the SCE to use the construction method specified in the setup file for the given account.

🔹 Data.Settings.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.Settings.Lastday

TypeRequiredValuesDefault
Booleannotrue, falseas configured in setup file

If present, this field overrides the Last Day setting in the setup files, which only applies to loans computed with an actual day accrual calendar where the first payment date falls at the end of a month with fewer than 31 days. As an example, if the first payment date is on April 30, should the following payment dates be made on the 30th of each month, or on the last day of the month?

If no value is specified for this field, then the setup file setting will be used. If true is specified, then conditions triggering a last day situation will result in payments which fall at the end of the month. A value of false indicates that when dictated, subsequent payment dates will not be moved to the last day of the month.

🔹 Data.Settings.OddFinal

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Following the last payment of an amortization schedule, the ending balance is unlikely to be zero due to the rounding of the payment. In order to assure perfect amortization, lenders will use an odd final payment to perfectly amortize the loan.

Set OddFinal to true to ensure perfect amortization with a payment that pays off the loan.

🔹 Data.Settings.PmtDollarRound

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Payments are normally rounded to the penny, according to the method specified by in the setup file, or vy theSettings.PmtRound field. If the payment should be rounded to the dollar instead of the penny, then set the value of this field to true.

Note that for some loans (such as those with longer terms or relatively small proceeds), rounding the payment up or to the nearest dollar may require a shortened loan term to prevent one or more negative payments at the end of the loan.

🔹 Data.Settings.PmtRound

TypeRequiredValuesDefault
Stringnodefault, nearest, up, down, bestdefault

How are calculated payments to be rounded at and beyond this event? best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen. default means that the setting should be configured as specified in the setup file.

🔹 Data.Settings.ShowAmTable

TypeRequiredValuesDefault
Booleannotrue, falsetrue

To supress the entire amortization schedule from the response, set value of this field to false; otherwise, the amortization schedule will be returned with the response.

🔹 Data.Settings.TILARESPA2015

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will include data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015. If the field is omitted or set to false, then the TILA RESPA outputs will not be generated.

Note that this field is supported for equal payment loans, balloon payment loans, single payment notes, interest only loans, fixed principal plus interest loans, skips, pickups and irregulars, and ARMs.

🔹 Data.Settings.YieldPPY

TypeRequiredValuesDefault
Stringno0, 2, 4, 6, 120

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than `0', this field determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this field with a value other than zero, the calling application must include an odd days prepaid fee in the request.


Interest Only Loan Module - Response

The Data object for a response from the InterestOnly module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data🔹Country
|- 🟥 Errors[]
|- 🟥 Warnings[]
|- 🟦 Results🔸Final, 🔸First
|- 🟦 FedBox🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice
|- |- 🟥 APR🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type
|- |- 🟦 MAPR🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded
|- 🟦 TILARESPA2015🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP
|- |- 🟥 LoanCosts[]🔹Name, 🔹In5Years, 🔸Value
|- |- 🟥 In5Years🔸PaidTotal, 🔸PaidPrincipal
|- |- 🟥 MaxPnIPmt🔸Date, 🔸Amount
|- |- 🟥 MinRate🔸Rate, 🔸Idx
|- |- 🟥 MaxRate🔸Rate, 🔸Idx
|- |- 🟥 ProjectedPaymentsTable[]🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax
|- 🟦 Moneys🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹PMI_Fee, 🔹MinIntChgAdj, 🔹MinFinChgAdj
|- |- 🟦 ODI🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost
|- |- 🟦 Fees[]🔹Name, 🔸Fee
|- 🟦 Accrual🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity
|- 🟦 PMI🔸Rate, 🔸LTV, 🔸PremiumPerYear, 🔸PremiumPerPeriod, 🔹IndexToWarn, 🔹IndexToRemove
|- 🟦 PmtStreams[]🔸Term, 🔸Pmt, 🔹Rate, 🔸Begin
|- 🟦 Protection
|- |- 🟦 Life🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟦 Level🔸Result, 🔸Formula
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Disability🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Unemployment🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- 🟦 AmTable🔹Months, 🔹Weeks, 🔹OddDays
|- |- 🟦 GrandTotals🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot, 🔹PMITot
|- |- 🟦 SubTotals[]🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub, 🔹PMISub
|- |- 🟥 AmLines[]🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹PMI, 🔹UnpaidInt, 🔸EndBal

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔹Country

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Results, 🟦 FedBox, 🟦 TILARESPA2015, 🟦 Moneys, 🟦 Accrual, 🟦 PMI, 🟦 PmtStreams[], 🟦 Protection, 🟦 AmTable

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

If the request specified a two-character or three-digit Country code, then this field will be present and will contain the full name of the country associated with the specified code. Please see the Countries Appendix for the list of supported countries and their associated codes.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "InterestOnly",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "InterestOnly",
  "Data" : {
    "Errors" : [
      "Data.LoanDate (StringDate) not found.",
      "Data.PmtDate (StringDate) not found.",
      "Data.Term (StringInt) not found.",
      "Data.IntRate (StringFloat) not found.",
      "Data.Proceeds (StringFloat) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

🟦 Data.Results

TypeRequired
Objectno

This field(s) of this object represent the most important numerical results for the loan request.

Fields: 🔸Final, 🔸First

Objects: None

🔸 Data.Results.Final

TypeRequiredValues
StringyesCurrency

The final payment of the loan.

🔸 Data.Results.First

TypeRequiredValues
StringyesCurrency

The first payment for the loan.


🟦 Data.FedBox

TypeRequired
Objectno

This object groups together all fields which contain important numerical information, as defined in the Truth-In-Lending laws (Regulation Z).

Fields: 🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice

Objects: 🟥 APR, 🟦 MAPR

🔸 Data.FedBox.AmtFin

TypeRequiredValue
StringyesCurrency > 0.0

The Regulation Z Amount Financed, which is defined as the amount of credit provided to the borrower or on their behalf.

🔸 Data.FedBox.FinChg

TypeRequiredValue
StringyesCurrency

This element contains the Regulation Z Finance Charge, described as the dollar amount the credit extension will cost the borrower.

🔸 Data.FedBox.TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

The amount which the borrower will have paid when the borrower has made all scheduled payments.

🔹 Data.FedBox.TotalSalePrice

TypeRequiredValue
StringyesCurrency > 0.0

The sum of the total of payments plus the total down payment. Please note that if no TotalDown field was included in the request, then this element will not be present.


🟥 Data.FedBox.APR

TypeRequired
Objectyes

The APR object contains fields which return the value and APR method used.

Fields: 🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type

Objects: None

🔸 Data.FedBox.APR.Value

TypeRequiredValue
StringyesNumber

The computed APR, which is the cost of the extension of credit expressed as a yearly rate.

🔹 Data.FedBox.APR.Max

TypeRequiredValueDefault
StringnoNumbern/a

This field returns the maximum APR as configured in the account's setup files. If no maximum APR has been specified, then this field will not be present in the response. The value of this field should be displayed as a percentage.

🔹 Data.FedBox.APR.MaxExceeded

TypeRequiredValueDefault
Booleannotrue, falsen/a

If a maximum APR is configured in the account's setup files, then the value of this field indicates whether or not the current loan exceeds the maximum APR. If no maximum APR has been specified, then this field will not be present in the response.

🔸 Data.FedBox.APR.Type

TypeRequiredValue
StringyesText

This field returns the APR method used to compute the reported APR.


🟦 Data.FedBox.MAPR

TypeRequired
Objectno

The MAPR (military APR) object is only returned with the response if the value of the Apr.UseMAPR request field is true.

Fields: 🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded

Objects: None

🔸 Data.FedBox.MAPR.Value

TypeRequiredValue
StringyesNumber

The computed military APR.

🔸 Data.FedBox.MAPR.Advance

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the equivalent of the Amount Financed for the Military APR. Specifically, it is the principal balance less any MAPR fees, debt protection, etc.

🔸 Data.FedBox.MAPR.Max

TypeRequiredValue
StringyesNumber

This field holds the maximum Military APR as specified in the input XML (see Apr.MAPR_Max). If not specified, a default value of 36% is assumed. The value of this field should be displayed as a percentage. As an example, for "Max" :"36.000", you would disclose a maximum Military APR of 36%.

🔸 Data.FedBox.MAPR.MaxExceeded

TypeRequiredValue
Booleanyestrue, false

The value of this field indicates whether or not the current loan exceeds the maximum allowed Military APR. As an example, if the maximum APR has been set to 36% and the Military APR for the returned loan was 37.125%, the MAPR object would be:

{
  "MAPR" : {
    "Value" : "37.125",
    "Advance" : "1350.00",
    "Max" : "36.000",
    "MaxExceeded" : true
 }
}

🟦 Data.TILARESPA2015

TypeRequired
Objectno

This object contains fields which are of interest to fulfilling the 2015 TILA RESPA rule. It will only be present if the Settings.TILARESPA2015 field in the request is set to true.

Fields: 🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP

Objects: 🟥 LoanCosts[], 🟥 In5Years, 🟥 MaxPnIPmt, 🟥 MinRate, 🟥 MaxRate, 🟥 ProjectedPaymentsTable[]

🔸 Data.TILARESPA2015.TotalLoanCost

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field is the sum of all borrower paid loan costs. Since all LoanCost values are rounded dollar amounts, the value of this element will also be a rounded dollar amount.

🔸 Data.TILARESPA2015.CD_TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the sum of the total of payments, all borrower paid loan costs, and any odd days interest that is prepaid at loan closing. This value should be disclosed on the Closing Disclosure form in the Total of Payments field.

🔸 Data.TILARESPA2015.TIP

TypeRequiredValue
StringyesNumber

The total interest percentage, rounded to three or fewer decimal places - as required.


🟥 Data.TILARESPA2015.LoanCosts[]

TypeRequired
Array of LoanCost Objectsyes

For every object in the Fees[] array present in the request which has its IsLoanCost field set to true (and hence, is a borrower paid loan cost) and whose amount is greater than zero (except odd days interest fee types, as explained in the previous documentation of the Fee and object), there will be a corresponding LoanCost object.

Fields: 🔹Name, 🔹In5Years, 🔸Value

Objects: None

🔹 Data.TILARESPA2015.LoanCosts[].Name

TypeRequiredValueDefault
StringnoTextn/a

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔹 Data.TILARESPA2015.LoanCosts[].In5Years

TypeRequiredValueDefault
StringnoCurrency >= 0Same as Value

If the entire amount of the fee is different from the amount collected over the first five years (for example, a service charge), then this field will be present and disclose the portion of this loan coast that is accrued during the first five years.

🔸 Data.TILARESPA2015.LoanCosts[].Value

TypeRequiredValue
StringyesCurrency >= 0

The value of this field is the numerical value of the fee, rounded to the nearest dollar.


🟥 Data.TILARESPA2015.In5Years

TypeRequired
Objectyes

This object contains all important values required for the new "In 5 Years" section of the disclosure.

Fields: 🔸PaidTotal, 🔸PaidPrincipal

Objects: None

🔸 Data.TILARESPA2015.In5Years.PaidTotal

TypeRequiredValue
StringyesCurrency >= 0

This field holds the sum of all "principal, interest, mortgage insurance, and borrower paid loan costs scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.

🔸 Data.TILARESPA2015.In5Years.PaidPrincipal

TypeRequiredValue
StringyesCurrency >= 0

This field holds "the principal scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.


🟥 Data.TILARESPA2015.MaxPnIPmt

TypeRequired
Objectyes

The fields of this object hold the maximum sceduled principal and interest payment during the term of the loan, as well as the date on which that payment is made.

Fields: 🔸Date, 🔸Amount

Objects: None

🔸 Data.TILARESPA2015.MaxPnIPmt.Date

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field returns the date on which the maximum scheduled principal and interest payment is made. If the maximum scheduled payment occurs more than once, then the date returned is that of the first instance.

🔸 Data.TILARESPA2015.MaxPnIPmt.Amount

TypeRequiredValue
StringyesCurrency >= 0

The maximum sceduled principal and interest payment during the term of the loan.


🟥 Data.TILARESPA2015.MinRate

TypeRequired
Objectyes

The fields of this object hold information regarding the minimum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MinRate.Rate

TypeRequiredValue
StringyesNumber

The value of the minimum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MinRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the minimum rate is first applicable.


🟥 Data.TILARESPA2015.MaxRate

TypeRequired
Objectyes

The fields of this object hold information regarding the maximum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MaxRate.Rate

TypeRequiredValue
StringyesNumber

The value of the maximum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MaxRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the maximum rate is first applicable.


🟥 Data.TILARESPA2015.ProjectedPaymentsTable[]

TypeRequired
Array of PPCol Objectsyes

Fields: 🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax

Objects: None

This field returns an Array of projected payment table columns (PPCol), with each array member detailing a single column. Per the regulation, there will be a minimum of one column and a maximum of four columns, depending upon the parameters of the loan.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Num

TypeRequiredValue
StringyesInteger in [1...4]

The value of this field identifies the number of the column to which the following fields apply. The value will be from 1 to 4.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Title

TypeRequiredValue
StringyesText

The value of this field is the title for the column. Most of the time, it will be in the form of Years X - Y, or Year X, or Final Payment in the case of a final balloon payment.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearStart

TypeRequiredValue
StringyesInteger

The beginning year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearEnd

TypeRequiredValue
StringyesInteger

The ending year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMin

TypeRequiredValue
StringyesCurrency > 0

The minimum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMax

TypeRequiredValue
StringyesCurrency > 0

The maximum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].IntOnly

TypeRequiredValue
Stringyesnone, some, all

If none of the payments associated with this column are interest only payments, then the value of this field will be none. A value of some means that some of the payments (but not all) associated with this columnt are interest only. Finally, a value of all indicates that all payments associated with this columnt are interest only.

Note that for the purposes of this field, a scheduled payment is considered an interest only payment if the payment amount pays off all interest due at the time of the payment, with no reduction in the principal balance.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Balloon

TypeRequiredValue
Booleanyestrue, false

If any of the payments associated with this column are balloon payments (e.g. isolated payments that are more than twice the value of a regular periodic payment), then the value of this field will be true.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].MIPmt

TypeRequiredValue
StringyesCurrency > 0

The value of this field holds the mortgage insurance premium associated with this column, rounded to the nearest dollar. If no mortgage insurance is present or coverage has been dropped, a value of zero will be present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMin

TypeRequiredValue
StringyesCurrency > 0

This field returns the minimum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMax

TypeRequiredValue
StringyesCurrency > 0

This field returns the maximum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.


🟦 Data.Moneys

TypeRequired
Objectno

This element groups together those other major cash result amounts not disclosed under the FedBox object, such as the principal balance, interest charge, and fee amounts.

Fields: 🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹PMI_Fee, 🔹MinIntChgAdj, 🔹MinFinChgAdj

Objects: 🟦 ODI, 🟦 Fees[], 🟦 Protection

🔸 Data.Moneys.Principal

TypeRequiredValue
StringyesCurrency >= 0

The principal balance is the amount on which interest is accrued. The principal balance consists of all advances requested by the borrower, as well as any fees and/or protection products which are financed.

🔸 Data.Moneys.Interest

TypeRequiredValue
StringyesCurrency

This value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments.

🔹 Data.Moneys.ConstructInterest

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If the requested loan is a construction loan with a permanent loan attached and the account specified is set up to compute construction loans via the "Simple" method, then this field will contain the construction interest for the requested loan.

Note that if a permanent loan is attached to a construction loan and the account is set up to use the "LaserPro" method, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

If the requested loan is a construction loan without a permanent loan attached, then the construction interest will be disclosed in the Moneys.Interest field.

If the requested loan was not a construction loan, or if construction loans have not been set up for the given account, then this field will not appear in the response.

🔹 Data.Moneys.FinFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field contains the sum of all fees having AddToPrin set to true and occuring on the date of an advance. If this value is zero, the field will not appear in the response.

🔹 Data.Moneys.Prepaid

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field represents all prepaid finance charges and contains the sum of all fees occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will not be found in the response.

🔹 Data.Moneys.PocketFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are neither financed, nor added to the finance charge. In essence, they are paid out of the borrower's pocket. If no out of pocket fees were requested, then this field will not show up in the response.

🔹 Data.Moneys.MAPRFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are Military APR fees (including protection products), and will only appear if the Military APR has been requested.

🔹 Data.Moneys.PMI_Fee

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If PMI has been requested on the loan, and if a number of UpFront payments have been specified, then this field will return the total PMI fee for all up front payments.

🔹 Data.Moneys.MinIntChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum interest charge is configured in the account's setup files and the final payment was adjusted to meet this minimum interest charge, then this field will be returned in the response and will contain the value of the minimum interest charge adjustment.

🔹 Data.Moneys.MinFinChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum finance charge is configured in the account's setup files and the final payment was adjusted to meet this minimum finance charge, then this field will be returned in the response and will contain the value of the minimum finance charge adjustment.


🟦 Data.Moneys.ODI

TypeRequired
Objectno

This object, if present, contains information regarding odd days interest. If no odd days interest was requested, then this object will not be present in the response.

Fields: 🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost

Objects: None

🔹 Data.Moneys.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsen/a

If the odd days interest has been added to the first payment, then this field will be present in the response with a value of true. If the odd days interest has been treated as a prepaid finance charge, then this field will not be present and a default value of false should be assumed.

🔸 Data.Moneys.ODI.Count

TypeRequiredValues
StringyesInteger >= 0

Discloses the number of odd days computed by the SCE for the requested loan.

🔸 Data.Moneys.ODI.Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total amount odd days interest charge.

🔹 Data.Moneys.ODI.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field holds the number of odd months computed by the SCE for the requested loan when using odd days accrual method 250. If the odd days accrual method is a value other than 250, then this field will not be present in the ODI object of the response.

🔹 Data.Moneys.ODI.DailyCost

TypeRequiredValueDefault
StringnoCurrency >= 0.0n/a

If the odd days interest fee is computed using a rounded daily cost, then the value of this field will hold that value. If the odd days interest is not computed using a rounded daily cost, then this field will not be present in the response.


🟦 Data.Moneys.Fees[]

TypeRequired
Array of Fee Objectsno

If the requested loan included fees, then for each fee in the loan there will be a Fee object in this array containing the name of the fee and the computed fee amount.

If there were no fees requested with the loan, then the Moneys.Fees[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.Fees[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed fee amount.


🟦 Data.Moneys.Protection

TypeRequired
Objectno

This object returns summary information on all payment protection products computed with the loan. If no protection products were included with the loan, then this object will be omitted from the response.

Fields: 🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory

Objects: None

🔸 Data.Moneys.Protection.Cost

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total cost of all protection plans included with the computed loan. For the individual plan costs, see the Protection field described below.

🔸 Data.Moneys.Protection.PerPmt

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per payment.

🔸 Data.Moneys.Protection.PerDay

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per day.

🔸 Data.Moneys.Protection.Category

TypeRequiredValues
StringyesNone, SP, MOB, TrueMOB, PaidSP

Te value of this field specifies the category under which the computed loan protection falls. The categories are described below:

CategoryDescription
NoneNo loan protection products were computed with this loan.
SPFinanced single premium coverage.
MOBMonthly outstanding balance coverage.
TrueMOBTruStage's monthly outstanding balance method.
PaidSPNon-financed single premium coverage.

🔹 Data.Moneys.Protection.IsDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field indicates if the specified account's protection is set up as debt protection. If this field is not present, then the default value of false should be used (which indicates that the account's protection is set up as insurance instead).

🔹 Data.Moneys.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field should only appear in the response if the value of the is true. If this field does not appear in the output, then the value should default to false.

If the value of the Mandatory field is true, then the total premium / fee amount for all insurance / debt protection products has been treated as a part of the Finance Charge, and hence will affect the effective APR.


🟦 Data.Accrual

TypeRequired
Objectno

This object groups together interest accrual information, such as the accrual method(s) used, days to the first payment and the loan's maturity date.

Fields: 🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity

Objects: None

🔸 Data.Accrual.Method

TypeRequiredValues
StringyesText

The Method field contains a textual description of the interest accrual method used to compute the loan (e.g. "Unit Period 365 Simple".)

🔸 Data.Accrual.Days1Pmt

TypeRequiredValues
StringyesInteger >= 0

This field contains the number of days between the date of the first advance and the date of first payment, computed by one of two methods as specified in by Accrual.DayCount (below).

🔸 Data.Accrual.DayCount

TypeRequiredValues
StringyesTrue360, Actual

This field specifies the method used to compute the number of days from the date of the first advance until the first payment date. Actual means that the actual number of days between these two dates are used, whereas the True360 method use a 360 day calendar.

🔸 Data.Accrual.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

Holds the maturity date of the loan, which is the date on which the last payment is scheduled. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.PMI

TypeRequired
Objectno

The PMI object will only appear if PMI has been computed with the loan. Please note that the PMI premiums are not reflected in the amount reported in the Payment object, the PmtStreams[] array, the TotPmts object, nor the Pmt field of the AmLine object.

Fields: 🔸Rate, 🔸LTV, 🔸PremiumPerYear, 🔸PremiumPerPeriod, 🔹IndexToWarn, 🔹IndexToRemove

Objects: None

🔸 Data.PMI.Rate

TypeRequiredValues
Stringyes% >= 0

The percentage rate used in the PMI calculation.

🔸 Data.PMI.LTV

TypeRequiredValues
Stringyes% >= 0

The loan to value ratio of the computed loan, expressed as a percentage.

🔸 Data.PMI.PremiumPerYear

TypeRequiredValues
StringyesCurrency >= 0

The annual PMI premium amount.

🔸 Data.PMI.PremiumPerPeriod

TypeRequiredValues
StringyesCurrency >= 0

The periodic PMI premium amount.

🔹 Data.PMI.IndexToWarn

TypeRequiredValuesDefault
StringnoInteger > 0n/a

This field only appears if the WarnLTV PMI input field is specified, and indicates that the payment index on which the remaining principal balance to home value ratio drops below the specified percentage.

🔹 Data.PMI.IndexToRemove

TypeRequiredValuesDefault
StringnoInteger > 0n/a

This field only appears if the DropLTV PMI input field is specified, and indicates that the payment index on which the remaining principal balance to home value ratio drops below the specified percentage. PMI coverage stops after this payment.


🟦 Data.PmtStreams[]

TypeRequired
Objectno

The PmtStreams[] array is made up of one or more PmtStream objects (there will always be at least one of these elements, and there may be more than one depending upon the loan type). The PmtStream objects describe the scheduled stream of payments for the computed loan. Instead of disclosing each and every payment individually (which can be done with the AmTable object), the payment stream groups together consecutive equal payments at the same interest rate to produce output along the lines of:

{
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "50.13",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "10",
        "Pmt" : "37.59",
        "Rate" : "4.500",
        "Begin" : "2022-11-01"
      },
      {
        "Term" : "1",
        "Pmt" : "10062.59",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ]
}

Each object describes a single stream of equal payments at the same interest rate, using the following fields to define the important properties of each payment stream.

Fields: 🔸Term, 🔸Pmt, 🔸Rate, 🔸Begin

Objects: Note

🔸 Data.PmtStreams[].Term

TypeRequiredValues
StringyesInteger >= 0

The Term field holds the number of payments that make up the given payment stream.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValues
StringyesCurrency > 0

The Pmt field holds the computed payment amount for this payment stream.

🔹 Data.PmtStreams[].Rate

TypeRequiredValues
StringyesNumber

Contains the interest rate used for the duration of this payment stream. If this payment stream accrued interest using split-rate tiers, then this field will not be returned.

🔸 Data.PmtStreams[].Begin

TypeRequiredValues
StringyesYYYY-MM-DD

This field identifies the date on which the first payment for this given payment stream is scheduled to be made. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.Protection

TypeRequired
Objectno

If protection products are requested, then this object will be present in the response, along with a field for each requested protection product.

Fields : None

Objects: 🟦 Life, 🟦 Level, 🟦 Disability, 🟦 Unemployment


🟦 Data.Protection.Life

TypeRequired
Objectno

If life protection was requested with the loan and decreasing life was configured for this loan type, then the Life object will be present in the response to return information on decreasing life coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Life.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Life.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Life.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Life.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Life.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Life.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Life.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Life.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Life.Cost.Premium2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary life product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Life.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Life.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Life.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Life.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Life.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Life.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Life.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Term

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Level

TypeRequired
Objectno

If level protection was requested with the loan and decreasing level was configured for this loan type, then the Life object will be present in the response to return information on decreasing level coverage.

Fields: 🔸Result, 🔸Formula,

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Level.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Level.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🟦 Data.Protection.Level.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Level.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Level.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Level.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Level.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Level.Cost.Premium2

TypeRequiredValuesDefault
StringyesCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary Level product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Level.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Level.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Level.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Level.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Level.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Level.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Level.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Disability

TypeRequired
Objectno

If disability protection was requested with the loan and decreasing disability was configured for this loan type, then the Life object will be present in the response to return information on decreasing disability coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Disability.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Disability.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Disability.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Disability.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Disability.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Disability.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Disability.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Disability.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Disability.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Disability.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Disability.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Disability.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Disability.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Disability.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Disability.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower2

TypeRequired
Objectno

The borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Disability.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Unemployment

TypeRequired
Objectno

If unemployment protection was requested with the loan and decreasing unemployment was configured for this loan type, then the Life object will be present in the response to return information on decreasing unemployment coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Unemployment.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Unemployment.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Unemployment.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Unemployment.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Unemployment.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Unemployment.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Unemployment.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Unemployment.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Unemployment.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Unemployment.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Unemployment.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Unemployment.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Unemployment.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Unemployment.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Unemployment.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Unemployment.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Unemployment.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Unemployment.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Unemployment.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Unemployment.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Unemployment.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Unemployment.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Unemployment.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Unemployment.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Unemployment.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Unemployment.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Unemployment.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.AmTable

TypeRequired
Objectno

This object contains fields which summarize and describe the loan's amortization schedule. If Settings.ShowAmTable is set to false, then this object will not be found in the response.

Fields: 🔹Months, 🔹Weeks, 🔹OddDays

Objects: 🟦 GrandTotals, 🟦 SubTotals[], 🟥 AmLines[]

🔹 Data.AmTable.AvgBal

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the average balance of the loan used in the Canadian APR calculation.

🔹 Data.AmTable.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of months in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.Weeks

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of weeks in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.OddDays

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the number of odd days in the term of the loan used in the Canadian APR calculation. Odd days are computed by moving backwards from the maturity date the number of disclosed months or weeks, and then counting the additional number of days required to land on the loan date.

🟦 Data.AmTable.GrandTotals

TypeRequired
Objectno

This object describes the total amounts of various categories throughout the life of the loan. As an example, the total amount paid to interest and principal, as well as the total of payments are all contained in fields of this object.

Fields: 🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot, 🔹PMITot

Objects: None


🔸 Data.AmTable.GrandTotals.PmtTot

TypeRequiredValues
StringyesCurrency

The total of payments scheduled for the computed loan.

🔸 Data.AmTable.GrandTotals.IntTot

TypeRequiredValues
StringyesCurrency

The total amount paid to interest over the life of the loan, assuming all payments are made as scheduled.

🔸 Data.AmTable.GrandTotals.PrinTot

TypeRequiredValues
StringyesCurrency

This field contains the total amount paid to principal during the loan term, assuming all payments are made as scheduled.

🔹 Data.AmTable.GrandTotals.CLTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLTot field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life over the duration of the loan.

🔹 Data.AmTable.GrandTotals.AHTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHTot field will only appear on loans with certain types of disability or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.IUTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUTot field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.PMITot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The PMITot field will only appear on loans with PMI insurance where the PMI premiums were requested in the amortization schedule. It contains the total PMI amount paid (not including any up front periodic PMI premiums)for PMI over the duration of the loan.


🟦 Data.AmTable.SubTotals[]

TypeRequired
Array of SubTotal Objectsno

Describes the total amounts of various categories paid during a given calendar year. For each year in which the computed loan has scheduled payments, there will be a SubTotal object in the array.

Fields: 🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub, 🔹PMISub

Objects: None

🔸 Data.AmTable.SubTotals[].Year

TypeRequiredValues
StringyesInteger >= 0

The calendar year for which the subtotal data is applicable.

🔸 Data.AmTable.SubTotals[].Start

TypeRequiredValues
StringyesInteger >= 0

This field defines the first amortization event which falls in the specified calendar year. To find the AmLines[] object which corresponds to this value, match the Idx field of the AmLine object.

🔸 Data.AmTable.SubTotals[].Events

TypeRequiredValues
StringyesInteger >= 0

This field defines the number of amortization events which belong to this calendar year.

🔸 Data.AmTable.SubTotals[].PmtSub

TypeRequiredValues
StringyesCurrency

Contains the total of payments scheduled for the calendar year.

🔸 Data.AmTable.SubTotals[].IntSub

TypeRequiredValues
StringyesCurrency

Holds the total amount paid to interest over the calendar year, assuming all payments are made as scheduled.

🔸 Data.AmTable.SubTotals[].PrinSub

TypeRequiredValues
StringyesCurrency

Contains the total amount paid to principal during the calendar year, assuming all payments are made as scheduled.

🔹 Data.AmTable.SubTotals[].CLSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLSub field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life during the year.

🔹 Data.AmTable.SubTotals[].AHSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHSub field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection during the year.

🔹 Data.AmTable.SubTotals[].IUSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUSub field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for involuntary unemployment during the year.

🔹 Data.AmTable.SubTotals[].PMISub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The PMISub field will only appear on loans with PMI insurance where the PMI premiums were requested in the amortization schedule. It contains the total PMI amount paid (not including any up front periodic PMI premiums) for PMI during the year.


🟥 Data.AmTable.AmLines[]

TypeRequired
Array of AmLine Objectsyes

There is one AmLine object for each amortization event which occurs during the life of a loan. Most of the time, each event will describe a payment, and detail how that payment is applied (to interest, principal, loan protection products, etc.). Some events, such as capitalizing interest, will not have payments but will show how the loan amortizes.

Fields: 🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹PMI, 🔹UnpaidInt, 🔸EndBal

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValues
StringyesInteger >= 0

The index of the amortization event, which is either the payment number, or zero. A value of zero designates an event that is either not a payment or is a skipped payment.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The date on which the amortization event is scheduled to occur. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 AmData.AmTable.AmLines[]ine.BegBal

TypeRequiredValues
StringyesCurrency >= 0

The principal balance before the amortization event occurs.

🔸 Data.AmTable.AmLines[].Pmt

TypeRequiredValues
StringyesCurrency

The payment amount for this event.

🔸 Data.AmTable.AmLines[].Int

TypeRequiredValues
StringyesCurrency

The amount of interest paid at this event.

🔸 Data.AmTable.AmLines[].Prin

TypeRequiredValues
StringyesCurrency

The amount of principal paid at this event.

🔹 Data.AmTable.AmLines[].CL

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CL field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for life coverage.

🔹 Data.AmTable.AmLines[].AH

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AH field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for disability / debt protection coverage.

🔹 Data.AmTable.AmLines[].IU

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IU field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for this coverage.

🔹 Data.AmTable.AmLines[].PMI

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field contains the PMI premium for this payment, and will only show up if PMI has been computed for this payment and if PMI premiums should be displayed in the amortization schedule.

🔹 Data.AmTable.AmLines[].UnpaidInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear on an amortization line when interest has been accrued, but has not yet been paid or added to the principal balance. If the interest accrued has not yet been rounded, then the unpaid interest will be displayed to four (4) decimal placed. If rounded, then the unpaid interest is displayed to two (2) decimal places.

🔸 Data.AmTable.AmLines[].EndBal

TypeRequiredValues
StringyesCurrency

The principal balance amount, after the amortization event has taken place.


Fixed Principal Plus Interest Loans

Fixed principal plus interest loans (hereafter called principal plus loans) are loans which have a payment stream made up of payments which pay off a fixed amount of principal with each P&I payment, with interest only payments optionally occurring during the life of the loan as well.

For example, a borrower could specify that a loan of $1,000 be paid off with the first two payments consisting of interest only and the follow 10 payments paying off $100 of principal each.

Sample Request

The following example is a request for a fixed principal plus interest Loans loan with proceeds of $10,000, interest will accrue at a 6.0% rate using an actual day / 365 U. S. Rule accrual method (accrual code 320). There will be 12 monthly payments, the first 11 of which will pay of a fixed principal amount of $100 plus interest due, with an additional final payment paying off the loan.

{
  "Module" : "PrincipalPlus",
  "Data" : {
    "LoanDate" : "2022-08-24",
    "PmtDate" : "2022-10-01",
    "IntRate" : "6.000",
    "Proceeds" : "10000.00",
    "FirstPrincipalPmt" : "1",
    "PrincipalReduction" : "100",
    "PrincipalPmts" : "12",
    "Settings" : {
      "AccrualCode" : "320"
    }
  }
}

Sample Response

{
  "Result" : 200,
  "Module" : "PrincipalPlus",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Results" : {
      "Final" : "8945.35",
      "First" : "162.47",
      "Principal Reduction" : "100.00",
      "Term" : "12"
    },
    "FedBox" : {
      "AmtFin" : "10000.00",
      "FinChg" : "580.06",
      "TotPmts" : "10580.06",
      "APR" : {
        "Value" : "5.996",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Principal" : "10000.00",
      "Interest" : "580.06"
    },
    "Accrual" : {
      "Method" : "Actual/365 US Rule",
      "Days1Pmt" : "38",
      "DayCount" : "Actual",
      "Maturity" : "2023-09-01"
    },
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "162.47",
        "Rate" : "6.000",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "1",
        "Pmt" : "150.45",
        "Rate" : "6.000",
        "Begin" : "2022-11-01"
      },
      ...,
      {
        "Term" : "1",
        "Pmt" : "8945.35",
        "Rate" : "6.000",
        "Begin" : "2023-09-01"
      }
    ],
    "AmTable" : {
      "GrandTotals" : {
        "PmtTot" : "10580.06",
        "IntTot" : "580.06",
        "PrinTot" : "10000.00"
      },
      "SubTotals" : [
        {
          "Year" : "2022",
          "Start" : "1",
          "Events" : "3",
          "PmtSub" : "461.25",
          "IntSub" : "161.25",
          "PrinSub" : "300.00"
        },
        {
          "Year" : "2023",
          "Start" : "4",
          "Events" : "9",
          "PmtSub" : "10118.81",
          "IntSub" : "418.81",
          "PrinSub" : "9700.00"
        }
      ],
      "AmLines" : [
        {
          "Idx" : "1",
          "Date" : "2022-10-01",
          "BegBal" : "10000.00",
          "Pmt" : "162.47",
          "Int" : "62.47",
          "Prin" : "100.00",
          "EndBal" : "9900.00"
        },
        {
          "Idx" : "2",
          "Date" : "2022-11-01",
          "BegBal" : "9900.00",
          "Pmt" : "150.45",
          "Int" : "50.45",
          "Prin" : "100.00",
          "EndBal" : "9800.00"
        },
        ...,
        {
          "Idx" : "12",
          "Date" : "2023-09-01",
          "BegBal" : "8900.00",
          "Pmt" : "8945.35",
          "Int" : "45.35",
          "Prin" : "8900.00",
          "EndBal" : "0.00"
        }
      ]
    }
  }
}

Fixed Principal Plus Interest Loan Module - Request

The fields of the Data object supported by a PrincipalPlus module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Country, 🔸FirstPrincipalPmt 🔸IntRate, 🔹IntStartDate, 🔸LoanDate, 🔸PmtDate, 🔹PPY, 🔹PrincipalPmts, 🔹PrincipalPPY, 🔹PrincipalReduction, 🔹Proceeds, 🔹TotalDown, 🔹UseIntOnlyNotSkips

Objects: 🟦 Apr, 🟦 Construction, 🟦 Fees[], 🟦 Format, 🟦 ODI, 🟦 Protection, 🟦 Settings

The fields of the Data object supported by an Equal Pmt module request are defined in alphabetical order below:

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

This field allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see the Countries Appendix for the list of supported countries and their associated codes.

Specifying the Country will also set the default value for the APR.Method and Format.CurrencyDecimals fields, as appropriate for the country specified.

🔸 Data.FirstPrincipalPmt

TypeRequiredValues
StringyesNumber in [-99.999...600]

The value of this field determines on which payment number the fixed principal reduction amount (see PrincipalReduction below) begins. All payments prior to the payment number will be interest only payments.

🔸 Data.IntRate

TypeRequiredValues
StringyesNumber in [-99.999...600]

Determine the interest rate used for the loan. The interest rate should be expressed as a percentage. For example, a loan computed with a rate of 5.125% would be specified as "IntRate" : "5.125".

🔹 Data.IntStartDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDsame value as LoanDate

This field contains the date on which interest begins to accrue on the loan's principal balance. If this field is not specified, then the interest start date is set equal the loan date. Also note that the interest start date must be equal to the loan date when computing a construction loan.

The interest start date (when specified) must be on or after the loan date, as well as on or before the first payment date.

🔸 Data.LoanDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field holds the date on which the loan amount is disbursed and interest begins to accrue. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔸 Data.PmtDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field specifies the first (and for single payment notes, only) payment date in the loan's repayment schedule. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 1212

PPY is an abbreviation for payments per year, and determines the payment frequency for the requested loan. The default value of 12 will result in a loan with 12 payments per year. If you require a loan with a payment frequency other than monthly, specify it using this field.

🔸 Data.PrincipalPmts

TypeRequiredValuesDefault
StringyesNumbern/a

Instead of specifying a given number of payments in the principal plus loan (e.g. Term element in an equal payment loan request), the calling application instead specifies the number of principal payments in the loan. The loan term is then computed based upon this value, along with the number of principal payments per year and the number of interest only payments preceding the first principal payment.

🔹 Data.PrincipalPPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 1212

PPY is an abbreviation for payments per year, and determines the payment frequency for the requested loan. The default value of 12 will result in a loan with 12 payments per year. If you require a loan with a payment frequency other than monthly, specify it using this field.

🔸 Data.PrincipalReduction

This field contains the constant principal reduction amount to be applied for each principal and interest payment. If this value is set to to zero, then the principal reduction amount will be computed as the principal balance divided by the number of principal payments in the loan (see PrincipalPmts avoce).

If the number of principal payments multiplied by the specified constant principal reduction amount does not equal the principal balance, then the final principal plus interest payment will be computed such that the principal balance is scheduled to be completely paid off at loan maturity.

🔸 Data.Proceeds

TypeRequiredValuesDefault
StringnoCurrency > 0n/a

The proceeds specified indicate the amount of money the borrower is requesting, and does not include financed fees, financed insurances, etc.

🔹 Data.TotalDown

TypeRequiredValues
StringnoCurrency > 0

This optional field represents the total down payment that the borrower has applied to reduce the requested proceeds. It may consist of a cash down payment, net trade-in value, or rebate. You only need to specify a total down payment if the loan needs to disclose a total sale price. Typical examples of these loan types are auto and boat loans.

🔹 Data.UseIntOnlyNotSkips

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then any specified skipped payments (see Irregs[] above) will be treated as interest only payments instead of skipped payments.


🟦 Data.Apr

TypeRequired
Objectno

Settings related to the computed effective rate returned by the SCE (most commonly, the Regulation Z APR in the United States of America) are contained in the fields of this object.

Fields: 🔹MAPR_Max, 🔹Method, 🔹UseMAPR

Objects: None

🔹 Data.Apr.MAPR_Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]36.0

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this field.

🔹 Data.Apr.Method

TypeRequiredValuesDefault
Stringnodefault, actuarial, eu, ca, xirr, xirr360, irrdefault

This field allows the calling application to specify an APR calculation method which will override the default value found in the setup file for the given Account. If this field is set to a valid value, then the specified method will be used to compute the APR for this loan calculation.

If the Country field has been set by the calling application and this field is not set, then the APR method used will be determined by the specified country. For the United States of America, the default APR method is actuarial. For a country in the European Union, the default value is eu (European Union APR). For Canada, the default APR method is ca (Canadian APR).

The xirr value implements the internal rate of return method as implemented in Microsoft\textregistered Excel via the XIRR() function, and is based on an actual day calendar with a 365 day divisor.

The xirr360 value implements the internal rate of return method based upon a unit period calendar with a 360 day divisor.

The irr value implements a common spreadsheet internal rate of return method which assumes strict regular periods. Deviating from a strict regular periodicity may produce unreliable results.

If this field is not specified and the Country field is not specified, then the value of default will be used which informs the SCE to use the APR method defined in the setup file for the specified Account.

🔹 Data.Apr.UseMAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will compute the Military APR in addition to the Regulation Z APR. The MAPR object will be included in the loan response.


🟦 Data.Construction

TypeRequired
Objectno

The Construction object determines if this loan is a construction to permanent loan request. If you wish to compute a construction loan without an attached permanent loan, you will need to use either the Construction or Loan modules.

Fields: 🔹HalfCommitment, 🔹PPY, 🔸Rate, 🔸Term

Objects: None

🔹 Data.Construction.HalfCommitment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

During the term of the construction loan, the estimated interest for disclosure purposes may be either computed on the full or half commitment amounts. By setting this field to true, interest will be estimated using half of the initial commitment amount (i.e. the principal balance). The default value of false will cause interest to be estimated using the entire initial commitment amount.

🔹 Data.Construction.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

The PPY field allows the calling application to specify the payment frequency during the construction period. The default value of 12 will result in a construction loan with 12 payments per year. If you require a payment frequency during the construction period other than monthly, then specify it using this field. Note that the permanent loan's payment frequency may differ from the construction period's payment frequency.

🔸 Data.Construction.Rate

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]n/a

This field determines the rate applied to the appropriate commitment amount during the term of the construction loan.

🔸 Data.Construction.Term

TypeRequiredValuesDefault
StringyesInteger > 0n/a

The term of the construction loan (in payments) is specified using this field. Please note that the term may not exceed five years.


🟦 Data.Fees[]

TypeRequired
Array of Fee Objectsno

This array of Fee objects allows the calling application to specify one ore more Fee objects to be included with the loan.

Fields: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name

Objects: None

🔹 Data.Fees[].AddToFinChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be included in the computed Finance Charge (and hence, affect the APR), then set this field to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 Data.Fees[].AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this field to true. If set to false, then the fee is paid up front out of the borrower's pocket.

🔹 Data.Fees[].Adjust

TypeRequiredValuesDefault
StringnoCurrency0

The optional Adjust field allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This field has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCE is as follows:

{
  "Fees" : [
    {
      "Name" : "TN Fee",
      "CalcType" : "OnAmtFin",
      "Adjust" : "-2000.00",
      "Entry" : "0.115",
      "AddToPrin" : true,
      "AddToFinChg" : false
    }
  ]
}

🔹 Data.Fees[].CalcType

TypeRequiredValuesDefault
StringnoDollar, OnProceeds, OnPrincipal, OnAmtFinDollar

This field specifies how the fee is to be computed, as described in the following table.

Fee Calc TypeDescription
DollarThe Entry field is understood as a flat dollar amount.
OnProceedsThe Entry field is understood as a percentage value, to be applied to the loan's proceeds, defined as the sum of advances. EntryAmount of 0.25 would represent a fee of 0.25% of the total proceeds.
OnPrincipalThe Entry field is understood as a percentage value, to be applied to the loan's principal balance. An Entry of 0.125 would represent a fee of 0.125% of the principal balance.
OnAmtFinThe Entry field is understood as a percentage value, to be applied to the loan's Regulation Z Amount Financed. An Entry of 0.33 would represent a fee of 0.33% of the amount financed.

🔹 Data.Fees[].Entry

TypeRequiredValuesDefault
StringnoNumber >= 00

How this field is interpreted depends upon the Fee.CalcType field. Please see the documentation for this field for further information.

🔹 Data.Fees[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which fees need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.Fees[].MAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this field to true.

Fees which are added to the finance charge (e.g. "AddToFinChg" : true) are always considered MAPR fees, regardless of the stated value of this field.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Data.Fees[].Max

TypeRequiredValuesDefault
StringnoCurrency > 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Min

TypeRequiredValuesDefault
StringnoCurrency > 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value will be determined by the value of the Country field. For most countries, the default value is 2. If no country code is specified, then the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.IrregPmts[]

TypeRequired
array of IrregPmt Objectsno

This array of IrregPmt objects allows the calling application to specify one ore more skipped / interest only payments to be scheduled in the repayment plan, depending upon the value of the UseIntOnlyNotSkips field.

Fields: 🔹Index, 🔹Month, 🔹Year

Objects: None

🔹 Data.IrregPmts[].Index

TypeRequiredValuesDefault
StringnoInteger > 0empty

Instead of specifying a month (and optionally, a year) for a given skipped payment, you may instead specify a payment number using the Index field. Thus, if you wish to specify that the first payment be skipped, you would set "Index" : "1".

Note that if you specify a payment index, then omit the Month and Year fields.

🔹 Data.IrregPmts[].Month

TypeRequiredValuesDefault
StringnoInteger in [0..12]empty

The Month field allows the user to specify a month during which the skipped / interest only payment is applicable. If the Year field is not set for this element, then the skipped / interest only payment will be applied for each payment falling in the given month, throughout the entire term of the loan.

On the other hand, if the Year field is set for this element, then the skipped / interest only payment will only be applied to those payments falling in the given month and year.

If the value of the Month field is set to zero (0), then this skipped / interest only payment specification is ignored.

If you wish to specify a skipped payment for a specific payment number (instead of specifying the month and optionally, the year), then use the Index field and omit the Month and Year fields.

🔹 Data.IrregPmts[].Year

TypeRequiredValuesDefault
StringnoInteger in [0..12]empty

IrregPmt.Year is explained in the Month.


🟦 Data.ODI

TypeRequired
Objectno

If odd days should be treated as a prepaid finance charge or added to the first payment in a manner different from how interest is accruing, then the request needs to define how odd days interest is computed and handled using the fields of this object.

Fields: 🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

Objects: None

🔹 Data.ODI.AccrualCode

TypeRequiredValuesDefault
Stringno204, 205, 210, 211, 220, 221, 230, 231, 250default

The accrual code defines how the odd days interest is computed. The meaning of the allowed accrual codes is defined below.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

Accrual CodeDescription
204True360/360
205True360/365
210Actual/360
211True365/360
220Actual/365
221True365/365
230Actual/Actual
231Midnight 366
250Actual/Variable Days Per Year

🔹 Data.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application wants the odd days interest to be added to the first payment, then set the value of this field to true. A value of false indicates that the odd days interest will be treated as a prepaid finance charge.

🔹 Data.ODI.AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If any odd days interest should be treated as a financed prepaid fee, then set the value of this field to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCE and the value of AddToPrin will be set to false.

🔹 Data.ODI.AnchorDate

TypeRequiredValuesDefault
StringnoBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This field determines how to arrive at the anchor date. A value of BackUnitPeriod means that the anchor date is one unit period prior to the specified first payment date. A value of BackDaysPerPeriod means that the anchor date is the number of days per period prior to the first payment date. Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 Data.ODI.ForceUnitPeriod

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Some unit period methods will not use a strict unit period interest accrual factor in the period to the first payment. For example, code 302 will count the days to the first payment and divide by 365. For a monthly loan, setting this field to true will use a 1/12 factor instead of Days/365.

🔹 Data.ODI.NoCap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When the odd days interest is financed, setting this field to true prevents interest from being computed on interest. The default is false, which means interest will be computed on interest.

🔹 Data.ODI.UseDailyCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 Data.ODI.UseNegODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If there are negative odd days in the loan, then the value of this field determines if a negative odd days interest fee is computed. If the value of this field is false, then negative odd days fees are not allowed, the SCE will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes and odd days interest credit) when there are negative odd days in a loan.


🟦 Data.Protection

TypeRequired
Objectno

The Protection object is used by the calling application to request one or more payment protection products (e.g. life, disability, involuntary unemployment, or personal property) be included in the loan calculation. Each of these products is requested by including its own child object, along with the borrower birthdays.

Fields: 🔹Birthday1, 🔹Birthday2, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps

Objects: 🟦 Disability, 🟦 Life,

🔹 Data.Protection.Birthday1

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the secondary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday2" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower2 or both.

🔹 Data.Protection.Birthday2

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the primary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday1" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower1 or both.

🔹 Data.Protection.Financed

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the computed premiums for single premium debt protection products should be financed along with the proceeds, then this field should be set to true (which is the default value if not specified). A value of false indicates that the computed premiums will not be financed with the proceeds, and hence will be paid out of pocket by the borrower. Note that this applies to single premium insurance products only!

🔹 Data.Protection.LineOfCredit

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this is an account using TruStage's MOB insurance, and if this loan is a line of credit where product term caps should be ignored, then set this field to true. Otherwise, omit this field or set it to false.

🔹 Data.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then any computed payment protection premium or fee will be considered a mandatory fee which will be included as a part of the Finance Charge, and hence affect the disclosed APR.

If the Mandatory field is set to false, then the loan will treat any premiums / fees as normal.

🔹 Data.Protection.ShowBorrowerInfo

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have data returned for each specified borrower instead of a single Term object, then set the value of this field to true. Otherwise, omit this field or set it to false. See the Borrower and Term objects defined in the response section for more information.

🔹 Data.Protection.ShowCaps

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have cap information (e.g. maximum terms, coverage amounts, ages, etc.) returned for each product offered, set the value of this field to true. Otherwise, omit this field or set it to false. See the Caps object defined in the response section for more information.


🟦 Data.Protection.Disability

TypeRequired
Objectno

The Disability object determines what type of disability coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table

Objects: None

🔹 Data.Protection.Disability.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Disability.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Disability object altogether or specify a value of none.

🔹 Data.Protection.Disability.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Disability.Table

TypeRequiredValuesDefault
StringnoInteger in [0...19]0

If the specified account has been set up with multiple disability or debt cancellation plans, then this field determines which plan number will be used. If no table number is specified, the first table (table zero) will be used.


🟦 Data.Protection.Life

TypeRequired
Objectno

The Life object determines what type of life coverage is requested for the loan.

Fields: 🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates

Objects: None

🔹 Data.Protection.Life.CovAmount

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a coverage amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum coverage amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified coverage amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Life.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Life object altogether or specify a value of none.

🔹 Data.Protection.Life.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Life.Dismemberment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer life protection products with optional dismemberment coverage, and if the optional dismemberment coverage is desired, then set this field's value to true. Otherwise, use the default value of false.

🔹 Data.Protection.Life.Method

TypeRequiredValuesDefault
StringnoDefault, Gross, NetDefault

Some accounts are configured to offer different types of credit life products (usually gross and net). In these accounts, this field allows the calling application to specify which method to use for a given loan. If no method is present in the request, then the default method will be used.

🔹 Data.Protection.Life.UseLevelRates

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer single premium credit life using level rates instead of the normal decreasing rates, and if you wish to use level rates instead of decreasing, then set this field's value to true. Otherwise, use the default value of false.


🟦 Data.Settings

TypeRequired
Objectno

The Settings object allows the calling application to alter the default loan calculation options.

Fields: 🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

Objects: None

🔹 Data.Settings.Account

TypeRequiredValuesDefault
StringnoInteger in [1..9999]1

The Account field specifies the numeric setup file account number that will be used to compute the requested loan. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which may affect the loan calculation, such as the accrual method, insurance methods / rates / caps, etc.

🔹 Data.Settings.AccrualCode

TypeRequiredValuesDefault
Stringnosee tabledefault

The method of interest accrual is defined by this field. A value of default informs the SCE to use the interest accrual method defined in the setup file for the specified Account. All other valid accrual codes are described in the table below.

🔹 Data.Settings.ConMethod

TypeRequiredValuesDefault
Stringnodefault, simple, interestonlydefault

When computing a construction loan, there are two supported methods for computing interest during the constrcution period:

If the value of this field is simple, then the estimated construction interets will be computed and disclosed as a lup-sum prepaid fee (see the Moneys.ConstructInterest response field).

If the value of this field is interestonly, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

A value of default instructs the SCE to use the construction method specified in the setup file for the given account.

🔹 Data.Settings.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.Settings.Lastday

TypeRequiredValuesDefault
Booleannotrue, falseas configured in setup file

If present, this field overrides the Last Day setting in the setup files, which only applies to loans computed with an actual day accrual calendar where the first payment date falls at the end of a month with fewer than 31 days. As an example, if the first payment date is on April 30, should the following payment dates be made on the 30th of each month, or on the last day of the month?

If no value is specified for this field, then the setup file setting will be used. If true is specified, then conditions triggering a last day situation will result in payments which fall at the end of the month. A value of false indicates that when dictated, subsequent payment dates will not be moved to the last day of the month.

🔹 Data.Settings.OddFinal

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Following the last payment of an amortization schedule, the ending balance is unlikely to be zero due to the rounding of the payment. In order to assure perfect amortization, lenders will use an odd final payment to perfectly amortize the loan.

Set OddFinal to true to ensure perfect amortization with a payment that pays off the loan.

🔹 Data.Settings.PmtDollarRound

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Payments are normally rounded to the penny, according to the method specified by in the setup file, or vy theSettings.PmtRound field. If the payment should be rounded to the dollar instead of the penny, then set the value of this field to true.

Note that for some loans (such as those with longer terms or relatively small proceeds), rounding the payment up or to the nearest dollar may require a shortened loan term to prevent one or more negative payments at the end of the loan.

🔹 Data.Settings.PmtRound

TypeRequiredValuesDefault
Stringnodefault, nearest, up, down, bestdefault

How are calculated payments to be rounded at and beyond this event? best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen. default means that the setting should be configured as specified in the setup file.

🔹 Data.Settings.ShowAmTable

TypeRequiredValuesDefault
Booleannotrue, falsetrue

To supress the entire amortization schedule from the response, set value of this field to false; otherwise, the amortization schedule will be returned with the response.

🔹 Data.Settings.TILARESPA2015

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will include data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015. If the field is omitted or set to false, then the TILA RESPA outputs will not be generated.

Note that this field is supported for equal payment loans, balloon payment loans, single payment notes, interest only loans, fixed principal plus interest loans, skips, pickups and irregulars, and ARMs.

🔹 Data.Settings.YieldPPY

TypeRequiredValuesDefault
Stringno0, 2, 4, 6, 120

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than `0', this field determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this field with a value other than zero, the calling application must include an odd days prepaid fee in the request.


Fixed Principal Plus Interest Loan Module - Response

The Data object for a response from the PrincipalPlus module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data🔹Country
|- 🟥 Errors[]
|- 🟥 Warnings[]
|- 🟦 Results🔸Final, 🔸First, 🔸PrincipalReduction, 🔸Term
|- 🟦 FedBox🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice
|- |- 🟥 APR🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type
|- |- 🟦 MAPR🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded
|- 🟦 TILARESPA2015🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP
|- |- 🟥 LoanCosts[]🔹Name, 🔹In5Years, 🔸Value
|- |- 🟥 In5Years🔸PaidTotal, 🔸PaidPrincipal
|- |- 🟥 MaxPnIPmt🔸Date, 🔸Amount
|- |- 🟥 MinRate🔸Rate, 🔸Idx
|- |- 🟥 MaxRate🔸Rate, 🔸Idx
|- |- 🟥 ProjectedPaymentsTable[]🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax
|- 🟦 Moneys🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹MinIntChgAdj, 🔹MinFinChgAdj
|- |- 🟦 ODI🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost
|- |- 🟦 Fees[]🔹Name, 🔸Fee
|- |- 🟦 Protection🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory
|- 🟦 Accrual🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity
|- 🟦 PmtStreams[]🔸Term, 🔸Pmt, 🔹Rate, 🔸Begin
|- 🟦 Protection
|- |- 🟦 Life🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟦 Level🔸Result, 🔸Formula
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Disability🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- 🟦 AmTable🔹Months, 🔹Weeks, 🔹OddDays
|- |- 🟦 GrandTotals🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot
|- |- 🟦 SubTotals[]🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub
|- |- 🟥 AmLines[]🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹UnpaidInt, 🔸EndBal

The following example is the response returned from the SCE for the first request example provided at the beginning of the previous section.

The Data object for the response is defined below in the order the fields are returned:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔹Country

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Results, 🟦 FedBox, 🟦 TILARESPA2015, 🟦 Moneys, 🟦 Accrual, 🟦 PmtStreams[], 🟦 Protection, 🟦 AmTable

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

If the request specified a two-character or three-digit Country code, then this field will be present and will contain the full name of the country associated with the specified code. Please see the Countries Appendix for the list of supported countries and their associated codes.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "PrincipalPlus",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "PrincipalPlus",
  "Data" : {
    "Errors" : [
      "Data.LoanDate (StringDate) not found.",
      "Data.PmtDate (StringDate) not found.",
      "Data.IntRate (StringFloat) not found.",
      "Data.Proceeds (StringFloat) not found.",
      "Data.FirstPrincipalPmt (StringInt) not found.",
      "Data.PrincipalReduction (StringFloat) not found.",
      "Data.PrincipalPmts (StringInt) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

🟦 Data.Results

TypeRequired
Objectno

This field(s) of this object represent the most important numerical results for the loan request.

Fields: 🔸Final, 🔸First 🔸PrincipalReduction 🔸Term

Objects: None

🔸 Data.Results.Final

TypeRequiredValues
StringnoCurrency

The final payment of the loan.

🔸 Data.Results.First

TypeRequiredValues
StringyesCurrency

The first payment for the loan.


🔸 Data.Results.PrincipalReduction

TypeRequiredValues
StringyesCurrency >= 0

The constant amount of principal reduction.


🔸 Data.Results.Term

TypeRequiredValues
StringyesInteger > 0

The computed number of payments in the loan.


🟦 Data.FedBox

TypeRequired
Objectno

This object groups together all fields which contain important numerical information, as defined in the Truth-In-Lending laws (Regulation Z)

Fields: 🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice

Objects: 🟥 APR, 🟦 MAPR

🔸 Data.FedBox.AmtFin

TypeRequiredValue
StringyesCurrency > 0.0

The Regulation Z Amount Financed, which is defined as the amount of credit provided to the borrower or on their behalf.

🔸 Data.FedBox.FinChg

TypeRequiredValue
StringyesCurrency

This element contains the Regulation Z Finance Charge, described as the dollar amount the credit extension will cost the borrower.

🔸 Data.FedBox.TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

The amount which the borrower will have paid when the borrower has made all scheduled payments.

🔹 Data.FedBox.TotalSalePrice

TypeRequiredValue
StringyesCurrency > 0.0

The sum of the total of payments plus the total down payment. Please note that if no TotalDown field was included in the request, then this element will not be present.


🟥 Data.FedBox.APR

TypeRequired
Objectyes

The APR object contains fields which return the value and APR method used.

Fields: 🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type

Objects: None

🔸 Data.FedBox.APR.Value

TypeRequiredValue
StringyesNumber

The computed APR, which is the cost of the extension of credit expressed as a yearly rate.

🔹 Data.FedBox.APR.Max

TypeRequiredValueDefault
StringnoNumbern/a

This field returns the maximum APR as configured in the account's setup files. If no maximum APR has been specified, then this field will not be present in the response. The value of this field should be displayed as a percentage.

🔹 Data.FedBox.APR.MaxExceeded

TypeRequiredValueDefault
Booleannotrue, falsen/a

If a maximum APR is configured in the account's setup files, then the value of this field indicates whether or not the current loan exceeds the maximum APR. If no maximum APR has been specified, then this field will not be present in the response.

🔸 Data.FedBox.APR.Type

TypeRequiredValue
StringyesText

This field returns the APR method used to compute the reported APR.


🟦 Data.FedBox.MAPR

TypeRequired
Objectno

The MAPR (military APR) object is only returned with the response if the value of the Apr.UseMAPR request field is true.

Fields: 🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded

Objects: None

🔸 Data.FedBox.MAPR.Value

TypeRequiredValue
StringyesNumber

The computed military APR.

🔸 Data.FedBox.MAPR.Advance

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the equivalent of the Amount Financed for the Military APR. Specifically, it is the principal balance less any MAPR fees, debt protection, etc.

🔸 Data.FedBox.MAPR.Max

TypeRequiredValue
StringyesNumber

This field holds the maximum Military APR as specified in the input XML (see Apr.MAPR_Max). If not specified, a default value of 36% is assumed. The value of this field should be displayed as a percentage. As an example, for "Max" :"36.000", you would disclose a maximum Military APR of 36%.

🔸 Data.FedBox.MAPR.MaxExceeded

TypeRequiredValue
Booleanyestrue, false

The value of this field indicates whether or not the current loan exceeds the maximum allowed Military APR. As an example, if the maximum APR has been set to 36% and the Military APR for the returned loan was 37.125%, the MAPR object would be:

{
  "MAPR" : {
    "Value" : "37.125",
    "Advance" : "1350.00",
    "Max" : "36.000",
    "MaxExceeded" : true
 }
}

🟦 Data.TILARESPA2015

TypeRequired
Objectno

This object contains fields which are of interest to fulfilling the 2015 TILA RESPA rule. It will only be present if the Settings.TILARESPA2015 field in the request is set to true.

Fields: 🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP

Objects: 🟥 LoanCosts[], 🟥 In5Years, 🟥 MaxPnIPmt, 🟥 MinRate, 🟥 MaxRate, 🟥 ProjectedPaymentsTable[]

🔸 Data.TILARESPA2015.TotalLoanCost

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field is the sum of all borrower paid loan costs. Since all LoanCost values are rounded dollar amounts, the value of this element will also be a rounded dollar amount.

🔸 Data.TILARESPA2015.CD_TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the sum of the total of payments, all borrower paid loan costs, and any odd days interest that is prepaid at loan closing. This value should be disclosed on the Closing Disclosure form in the Total of Payments field.

🔸 Data.TILARESPA2015.TIP

TypeRequiredValue
StringyesNumber

The total interest percentage, rounded to three or fewer decimal places - as required.


🟥 Data.TILARESPA2015.LoanCosts[]

TypeRequired
Array of LoanCost Objectsyes

For every object in the Fees[] array present in the request which has its IsLoanCost field set to true (and hence, is a borrower paid loan cost) and whose amount is greater than zero (except odd days interest fee types, as explained in the previous documentation of the Fee and object), there will be a corresponding LoanCost object.

Fields: 🔹Name, 🔹In5Years, 🔸Value

Objects: None

🔹 Data.TILARESPA2015.LoanCosts[].Name

TypeRequiredValueDefault
StringnoTextn/a

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔹 Data.TILARESPA2015.LoanCosts[].In5Years

TypeRequiredValueDefault
StringnoCurrency >= 0Same as Value

If the entire amount of the fee is different from the amount collected over the first five years (for example, a service charge), then this field will be present and disclose the portion of this loan coast that is accrued during the first five years.

🔸 Data.TILARESPA2015.LoanCosts[].Value

TypeRequiredValue
StringyesCurrency >= 0

The value of this field is the numerical value of the fee, rounded to the nearest dollar.


🟥 Data.TILARESPA2015.In5Years

TypeRequired
Objectyes

This object contains all important values required for the new "In 5 Years" section of the disclosure.

Fields: 🔸PaidTotal, 🔸PaidPrincipal

Objects: None

🔸 Data.TILARESPA2015.In5Years.PaidTotal

TypeRequiredValue
StringyesCurrency >= 0

This field holds the sum of all "principal, interest, mortgage insurance, and borrower paid loan costs scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.

🔸 Data.TILARESPA2015.In5Years.PaidPrincipal

TypeRequiredValue
StringyesCurrency >= 0

This field holds "the principal scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.


🟥 Data.TILARESPA2015.MaxPnIPmt

TypeRequired
Objectyes

The fields of this object hold the maximum sceduled principal and interest payment during the term of the loan, as well as the date on which that payment is made.

Fields: 🔸Date, 🔸Amount

Objects: None

🔸 Data.TILARESPA2015.MaxPnIPmt.Date

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field returns the date on which the maximum scheduled principal and interest payment is made. If the maximum scheduled payment occurs more than once, then the date returned is that of the first instance.

🔸 Data.TILARESPA2015.MaxPnIPmt.Amount

TypeRequiredValue
StringyesCurrency >= 0

The maximum sceduled principal and interest payment during the term of the loan.


🟥 Data.TILARESPA2015.MinRate

TypeRequired
Objectyes

The fields of this object hold information regarding the minimum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MinRate.Rate

TypeRequiredValue
StringyesNumber

The value of the minimum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MinRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the minimum rate is first applicable.


🟥 Data.TILARESPA2015.MaxRate

TypeRequired
Objectyes

The fields of this object hold information regarding the maximum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MaxRate.Rate

TypeRequiredValue
StringyesNumber

The value of the maximum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MaxRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the maximum rate is first applicable.


🟥 Data.TILARESPA2015.ProjectedPaymentsTable[]

TypeRequired
Array of PPCol Objectsyes

Fields: 🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax

Objects: None

This field returns an Array of projected payment table columns (PPCol), with each array member detailing a single column. Per the regulation, there will be a minimum of one column and a maximum of four columns, depending upon the parameters of the loan.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Num

TypeRequiredValue
StringyesInteger in [1...4]

The value of this field identifies the number of the column to which the following fields apply. The value will be from 1 to 4.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Title

TypeRequiredValue
StringyesText

The value of this field is the title for the column. Most of the time, it will be in the form of Years X - Y, or Year X, or Final Payment in the case of a final balloon payment.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearStart

TypeRequiredValue
StringyesInteger

The beginning year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearEnd

TypeRequiredValue
StringyesInteger

The ending year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMin

TypeRequiredValue
StringyesCurrency > 0

The minimum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMax

TypeRequiredValue
StringyesCurrency > 0

The maximum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].IntOnly

TypeRequiredValue
Stringyesnone, some, all

If none of the payments associated with this column are interest only payments, then the value of this field will be none. A value of some means that some of the payments (but not all) associated with this columnt are interest only. Finally, a value of all indicates that all payments associated with this columnt are interest only.

Note that for the purposes of this field, a scheduled payment is considered an interest only payment if the payment amount pays off all interest due at the time of the payment, with no reduction in the principal balance.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Balloon

TypeRequiredValue
Booleanyestrue, false

If any of the payments associated with this column are balloon payments (e.g. isolated payments that are more than twice the value of a regular periodic payment), then the value of this field will be true.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].MIPmt

TypeRequiredValue
StringyesCurrency > 0

The value of this field holds the mortgage insurance premium associated with this column, rounded to the nearest dollar. If no mortgage insurance is present or coverage has been dropped, a value of zero will be present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMin

TypeRequiredValue
StringyesCurrency > 0

This field returns the minimum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMax

TypeRequiredValue
StringyesCurrency > 0

This field returns the maximum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.


🟦 Data.Moneys

TypeRequired
Objectno

This element groups together those other major cash result amounts not disclosed under the FedBox object, such as the principal balance, interest charge, and fee amounts.

Fields: 🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹MinIntChgAdj, 🔹MinFinChgAdj

Objects: 🟦 ODI, 🟦 Fees[], 🟦 Protection

🔸 Data.Moneys.Principal

TypeRequiredValue
StringyesCurrency >= 0

The principal balance is the amount on which interest is accrued. The principal balance consists of all advances requested by the borrower, as well as any fees and/or protection products which are financed.

🔸 Data.Moneys.Interest

TypeRequiredValue
StringyesCurrency

This value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments.

🔹 Data.Moneys.ConstructInterest

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If the requested loan is a construction loan with a permanent loan attached and the account specified is set up to compute construction loans via the "Simple" method, then this field will contain the construction interest for the requested loan.

Note that if a permanent loan is attached to a construction loan and the account is set up to use the "LaserPro" method, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

If the requested loan is a construction loan without a permanent loan attached, then the construction interest will be disclosed in the Moneys.Interest field.

If the requested loan was not a construction loan, or if construction loans have not been set up for the given account, then this field will not appear in the response.

🔹 Data.Moneys.FinFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field contains the sum of all fees having AddToPrin set to true and occuring on the date of an advance. If this value is zero, the field will not appear in the response.

🔹 Data.Moneys.Prepaid

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field represents all prepaid finance charges and contains the sum of all fees occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will not be found in the response.

🔹 Data.Moneys.PocketFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are neither financed, nor added to the finance charge. In essence, they are paid out of the borrower's pocket. If no out of pocket fees were requested, then this field will not show up in the response.

🔹 Data.Moneys.MAPRFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are Military APR fees (including protection products), and will only appear if the Military APR has been requested.

🔹 Data.Moneys.MinIntChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum interest charge is configured in the account's setup files and the final payment was adjusted to meet this minimum interest charge, then this field will be returned in the response and will contain the value of the minimum interest charge adjustment.

🔹 Data.Moneys.MinFinChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum finance charge is configured in the account's setup files and the final payment was adjusted to meet this minimum finance charge, then this field will be returned in the response and will contain the value of the minimum finance charge adjustment.


🟦 Data.Moneys.ODI

TypeRequired
Objectno

This object, if present, contains information regarding odd days interest. If no odd days interest was requested, then this object will not be present in the response.

Fields: 🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost

Objects: None

🔹 Data.Moneys.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsen/a

If the odd days interest has been added to the first payment, then this field will be present in the response with a value of true. If the odd days interest has been treated as a prepaid finance charge, then this field will not be present and a default value of false should be assumed.

🔸 Data.Moneys.ODI.Count

TypeRequiredValues
StringyesInteger >= 0

Discloses the number of odd days computed by the SCE for the requested loan.

🔸 Data.Moneys.ODI.Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total amount odd days interest charge.

🔹 Data.Moneys.ODI.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field holds the number of odd months computed by the SCE for the requested loan when using odd days accrual method 250. If the odd days accrual method is a value other than 250, then this field will not be present in the ODI object of the response.

🔹 Data.Moneys.ODI.DailyCost

TypeRequiredValueDefault
StringnoCurrency >= 0.0n/a

If the odd days interest fee is computed using a rounded daily cost, then the value of this field will hold that value. If the odd days interest is not computed using a rounded daily cost, then this field will not be present in the response.


🟦 Data.Moneys.Fees[]

TypeRequired
Array of Fee Objectsno

If the requested loan included fees, then for each fee in the loan there will be a Fee object in this array containing the name of the fee and the computed fee amount.

If there were no fees requested with the loan, then the Moneys.Fees[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.Fees[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed fee amount.


🟦 Data.Moneys.Protection

TypeRequired
Objectno

This object returns summary information on all payment protection products computed with the loan. If no protection products were included with the loan, then this object will be omitted from the response.

Fields: 🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory

Objects: None

🔸 Data.Moneys.Protection.Cost

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total cost of all protection plans included with the computed loan. For the individual plan costs, see the Protection field described below.

🔸 Data.Moneys.Protection.PerPmt

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per payment.

🔸 Data.Moneys.Protection.PerDay

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per day.

🔸 Data.Moneys.Protection.Category

TypeRequiredValues
StringyesNone, SP, MOB, TrueMOB, PaidSP

Te value of this field specifies the category under which the computed loan protection falls. The categories are described below:

CategoryDescription
NoneNo loan protection products were computed with this loan.
SPFinanced single premium coverage.
MOBMonthly outstanding balance coverage.
TrueMOBTruStage's monthly outstanding balance method.
PaidSPNon-financed single premium coverage.

🔹 Data.Moneys.Protection.IsDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field indicates if the specified account's protection is set up as debt protection. If this field is not present, then the default value of false should be used (which indicates that the account's protection is set up as insurance instead).

🔹 Data.Moneys.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field should only appear in the response if the value of the is true. If this field does not appear in the output, then the value should default to false.

If the value of the Mandatory field is true, then the total premium / fee amount for all insurance / debt protection products has been treated as a part of the Finance Charge, and hence will affect the effective APR.


🟦 Data.Accrual

TypeRequired
Objectno

This object groups together interest accrual information, such as the accrual method(s) used, days to the first payment and the loan's maturity date.

Fields: 🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity

Objects: None

🔸 Data.Accrual.Method

TypeRequiredValues
StringyesText

The Method field contains a textual description of the interest accrual method used to compute the loan (e.g. "Unit Period 365 Simple".)

🔸 Data.Accrual.Days1Pmt

TypeRequiredValues
StringyesInteger >= 0

This field contains the number of days between the date of the first advance and the date of first payment, computed by one of two methods as specified in by Accrual.DayCount (below).

🔸 Data.Accrual.DayCount

TypeRequiredValues
StringyesTrue360, Actual

This field specifies the method used to compute the number of days from the date of the first advance until the first payment date. Actual means that the actual number of days between these two dates are used, whereas the True360 method use a 360 day calendar.

🔸 Data.Accrual.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

Holds the maturity date of the loan, which is the date on which the last payment is scheduled. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.PmtStreams[]

TypeRequired
Objectno

The PmtStreams[] array is made up of one or more PmtStream objects (there will always be at least one of these elements, and there may be more than one depending upon the loan type). The PmtStream objects describe the scheduled stream of payments for the computed loan. Instead of disclosing each and every payment individually (which can be done with the AmTable object), the payment stream groups together consecutive equal payments at the same interest rate to produce output along the lines of:

{
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "50.13",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "10",
        "Pmt" : "37.59",
        "Rate" : "4.500",
        "Begin" : "2022-11-01"
      },
      {
        "Term" : "1",
        "Pmt" : "10062.59",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ]
}

Each object describes a single stream of equal payments at the same interest rate, using the following fields to define the important properties of each payment stream.

Fields: 🔸Term, 🔸Pmt, 🔸Rate, 🔸Begin

Objects: Note

🔸 Data.PmtStreams[].Term

TypeRequiredValues
StringyesInteger >= 0

The Term field holds the number of payments that make up the given payment stream.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValues
StringyesCurrency > 0

The Pmt field holds the computed payment amount for this payment stream.

🔹 Data.PmtStreams[].Rate

TypeRequiredValues
StringyesNumber

Contains the interest rate used for the duration of this payment stream. If this payment stream accrued interest using split-rate tiers, then this field will not be returned.

🔸 Data.PmtStreams[].Begin

TypeRequiredValues
StringyesYYYY-MM-DD

This field identifies the date on which the first payment for this given payment stream is scheduled to be made. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.Protection

TypeRequired
Objectno

If protection products are requested, then this object will be present in the response, along with a field for each requested protection product.

Fields : None

Objects: 🟦 Life, 🟦 Level, 🟦 Disability


🟦 Data.Protection.Life

TypeRequired
Objectno

If life protection was requested with the loan and decreasing life was configured for this loan type, then the Life object will be present in the response to return information on decreasing life coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Life.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Life.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Life.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Life.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Life.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Life.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Life.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Life.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Life.Cost.Premium2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary life product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Life.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Life.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Life.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Life.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Life.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Life.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Life.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Term

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Level

TypeRequired
Objectno

If level protection was requested with the loan and decreasing level was configured for this loan type, then the Life object will be present in the response to return information on decreasing level coverage.

Fields: 🔸Result, 🔸Formula,

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Level.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Level.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🟦 Data.Protection.Level.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Level.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Level.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Level.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Level.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Level.Cost.Premium2

TypeRequiredValuesDefault
StringyesCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary Level product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Level.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Level.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Level.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Level.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Level.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Level.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Level.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Disability

TypeRequired
Objectno

If disability protection was requested with the loan and decreasing disability was configured for this loan type, then the Life object will be present in the response to return information on decreasing disability coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Disability.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Disability.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Disability.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Disability.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Disability.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Disability.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Disability.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Disability.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Disability.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Disability.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Disability.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Disability.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Disability.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Disability.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Disability.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower2

TypeRequired
Objectno

The borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Disability.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.AmTable

TypeRequired
Objectno

This object contains fields which summarize and describe the loan's amortization schedule. If Settings.ShowAmTable is set to false, then this object will not be found in the response.

Fields: 🔹Months, 🔹Weeks, 🔹OddDays

Objects: 🟦 GrandTotals, 🟦 SubTotals[], 🟥 AmLines[]

🔹 Data.AmTable.AvgBal

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the average balance of the loan used in the Canadian APR calculation.

🔹 Data.AmTable.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of months in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.Weeks

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of weeks in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.OddDays

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the number of odd days in the term of the loan used in the Canadian APR calculation. Odd days are computed by moving backwards from the maturity date the number of disclosed months or weeks, and then counting the additional number of days required to land on the loan date.

🟦 Data.AmTable.GrandTotals

TypeRequired
Objectno

This object describes the total amounts of various categories throughout the life of the loan. As an example, the total amount paid to interest and principal, as well as the total of payments are all contained in fields of this object.

Fields: 🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot

Objects: None


🔸 Data.AmTable.GrandTotals.PmtTot

TypeRequiredValues
StringyesCurrency

The total of payments scheduled for the computed loan.

🔸 Data.AmTable.GrandTotals.IntTot

TypeRequiredValues
StringyesCurrency

The total amount paid to interest over the life of the loan, assuming all payments are made as scheduled.

🔸 Data.AmTable.GrandTotals.PrinTot

TypeRequiredValues
StringyesCurrency

This field contains the total amount paid to principal during the loan term, assuming all payments are made as scheduled.

🔹 Data.AmTable.GrandTotals.CLTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLTot field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life over the duration of the loan.

🔹 Data.AmTable.GrandTotals.AHTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHTot field will only appear on loans with certain types of disability or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.


🟦 Data.AmTable.SubTotals[]

TypeRequired
Array of SubTotal Objectsno

Describes the total amounts of various categories paid during a given calendar year. For each year in which the computed loan has scheduled payments, there will be a SubTotal object in the array.

Fields: 🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub

Objects: None

🔸 Data.AmTable.SubTotals[].Year

TypeRequiredValues
StringyesInteger >= 0

The calendar year for which the subtotal data is applicable.

🔸 Data.AmTable.SubTotals[].Start

TypeRequiredValues
StringyesInteger >= 0

This field defines the first amortization event which falls in the specified calendar year. To find the AmLines[] object which corresponds to this value, match the Idx field of the AmLine object.

🔸 Data.AmTable.SubTotals[].Events

TypeRequiredValues
StringyesInteger >= 0

This field defines the number of amortization events which belong to this calendar year.

🔸 Data.AmTable.SubTotals[].PmtSub

TypeRequiredValues
StringyesCurrency

Contains the total of payments scheduled for the calendar year.

🔸 Data.AmTable.SubTotals[].IntSub

TypeRequiredValues
StringyesCurrency

Holds the total amount paid to interest over the calendar year, assuming all payments are made as scheduled.

🔸 Data.AmTable.SubTotals[].PrinSub

TypeRequiredValues
StringyesCurrency

Contains the total amount paid to principal during the calendar year, assuming all payments are made as scheduled.

🔹 Data.AmTable.SubTotals[].CLSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLSub field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life during the year.

🔹 Data.AmTable.SubTotals[].AHSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHSub field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection during the year.


🟥 Data.AmTable.AmLines[]

TypeRequired
Array of AmLine Objectsyes

There is one AmLine object for each amortization event which occurs during the life of a loan. Most of the time, each event will describe a payment, and detail how that payment is applied (to interest, principal, loan protection products, etc.). Some events, such as capitalizing interest, will not have payments but will show how the loan amortizes.

Fields: 🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹UnpaidInt, 🔸EndBal

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValues
StringyesInteger >= 0

The index of the amortization event, which is either the payment number, or zero. A value of zero designates an event that is either not a payment or is a skipped payment.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The date on which the amortization event is scheduled to occur. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 AmData.AmTable.AmLines[]ine.BegBal

TypeRequiredValues
StringyesCurrency >= 0

The principal balance before the amortization event occurs.

🔸 Data.AmTable.AmLines[].Pmt

TypeRequiredValues
StringyesCurrency

The payment amount for this event.

🔸 Data.AmTable.AmLines[].Int

TypeRequiredValues
StringyesCurrency

The amount of interest paid at this event.

🔸 Data.AmTable.AmLines[].Prin

TypeRequiredValues
StringyesCurrency

The amount of principal paid at this event.

🔹 Data.AmTable.AmLines[].CL

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CL field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for life coverage.

🔹 Data.AmTable.AmLines[].AH

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AH field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for disability / debt protection coverage.

🔹 Data.AmTable.AmLines[].UnpaidInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear on an amortization line when interest has been accrued, but has not yet been paid or added to the principal balance. If the interest accrued has not yet been rounded, then the unpaid interest will be displayed to four (4) decimal placed. If rounded, then the unpaid interest is displayed to two (2) decimal places.

🔸 Data.AmTable.AmLines[].EndBal

TypeRequiredValues
StringyesCurrency

The principal balance amount, after the amortization event has taken place.


Skip, Pickup, and Irregular Payment Loans

At times, people in certain seasonal professions (such as teachers and farmers) may need to skip payments scheduled for a given selection of months. As an example, if a teacher is not paid in July, August and September, then it might be helpful if the individual could skip payments scheduled during those months.

Similarly, if a borrower knows that they receive an annual bonus of $1,000 at the end of December, then she may want to either pay an extra $1,000 dollars (or perhaps fix the payment at $1,000) for January.

The above two situations are what we call loans with skipped, pickup, or irregular payment schedules. A skipped payment can be either a payment of zero, or an interest only payment. An irregular payment is a payment specified by the borrower, in its entirety or treated as the specified principal portion of the payment. A pickup payment is a payment which exceeds the computed regular payment by a given amount. With the SCE, you may compute either skipped and pickup payment loans, or skipped and irregular payment loans. To clarify, you can not compute a loan with skipped, pickup, and irregular payments in the same payment stream using the Irregular module.

Sample Request

The following example is a request for an irregular payment loan with proceeds of $10,000, interest will accrue at a 5.5% rate using an actual day / 365 U. S. Rule accrual method (accrual code 320). There will be 60 monthly payments, with skipped payments in June, July, and August.

{
  "Module" : "Irregular",
  "Data" : {
    "LoanDate" : "2022-08-25",
    "PmtDate" : "2022-10-01",
    "IntRate" : "5.500",
    "Proceeds" : "10000.00",
    "Term" : "60",
    "IrregType" : "Irregular",
    "IrregPmts" : [
      {
        "Month" : "6",
        "Year" : "0",
        "Payment" : "0.00"
      },
      {
        "Month" : "7",
        "Year" : "0",
        "Payment" : "0.00"
      },
      {
        "Month" : "8",
        "Year" : "0",
        "Payment" : "0.00"
      }
    ],
    "Settings" : {
      "AccrualCode" : "320"
    }
  }
}

Sample Response

{
  "Result" : 200,
  "Module" : "Irregular",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Results" : {
      "Payment" : "253.55",
      "Number of Skips" : "15",
      "Payments Specified" : "15"
    },
    "FedBox" : {
      "AmtFin" : "10000.00",
      "FinChg" : "1409.75",
      "TotPmts" : "11409.75",
      "APR" : {
        "Value" : "5.491",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Principal" : "10000.00",
      "Interest" : "1409.75"
    },
    "Accrual" : {
      "Method" : "Actual/365 US Rule",
      "Days1Pmt" : "37",
      "DayCount" : "Actual",
      "Maturity" : "2027-09-01"
    },
    "PmtStreams" : [
      {
        "Term" : "8",
        "Pmt" : "253.55",
        "Rate" : "5.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "9",
        "Pmt" : "253.55",
        "Rate" : "5.500",
        "Begin" : "2023-09-01"
      },
      {
        "Term" : "9",
        "Pmt" : "253.55",
        "Rate" : "5.500",
        "Begin" : "2024-09-01"
      },
      {
        "Term" : "9",
        "Pmt" : "253.55",
        "Rate" : "5.500",
        "Begin" : "2025-09-01"
      },
      {
        "Term" : "9",
        "Pmt" : "253.55",
        "Rate" : "5.500",
        "Begin" : "2026-09-01"
      },
      {
        "Term" : "1",
        "Pmt" : "253.55",
        "Rate" : "5.500",
        "Begin" : "2027-09-01"
      }
    ],
    "AmTable" : {
      "GrandTotals" : {
        "PmtTot" : "11409.75",
        "IntTot" : "1409.52",
        "PrinTot" : "10000.23"
      },
      "SubTotals" : [
        {
          "Year" : "2022",
          "Start" : "1",
          "Events" : "3",
          "PmtSub" : "760.65",
          "IntSub" : "144.91",
          "PrinSub" : "615.74"
        },
        {
          "Year" : "2023",
          "Start" : "4",
          "Events" : "12",
          "PmtSub" : "2281.95",
          "IntSub" : "467.93",
          "PrinSub" : "1814.02"
        },
        {
          "Year" : "2024",
          "Start" : "16",
          "Events" : "12",
          "PmtSub" : "2281.95",
          "IntSub" : "366.97",
          "PrinSub" : "1914.98"
        },
        {
          "Year" : "2025",
          "Start" : "28",
          "Events" : "12",
          "PmtSub" : "2281.95",
          "IntSub" : "258.10",
          "PrinSub" : "2023.85"
        },
        {
          "Year" : "2026",
          "Start" : "40",
          "Events" : "12",
          "PmtSub" : "2281.95",
          "IntSub" : "144.21",
          "PrinSub" : "2137.74"
        },
        {
          "Year" : "2027",
          "Start" : "52",
          "Events" : "9",
          "PmtSub" : "1521.30",
          "IntSub" : "27.40",
          "PrinSub" : "1493.90"
        }
      ],
      "AmLines" : [
        {
          "Idx" : "1",
          "Date" : "2022-10-01",
          "BegBal" : "10000.00",
          "Pmt" : "253.55",
          "Int" : "55.75",
          "Prin" : "197.80",
          "EndBal" : "9802.20"
        },
        ...,
        {
          "Idx" : "9",
          "Date" : "2023-06-01",
          "BegBal" : "8320.47",
          "Pmt" : "0.00",
          "Int" : "0.00",
          "Prin" : "0.00",
          "UnpaidInt" : "38.8669",
          "EndBal" : "8320.47"
        },
        {
          "Idx" : "10",
          "Date" : "2023-07-01",
          "BegBal" : "8320.47",
          "Pmt" : "0.00",
          "Int" : "0.00",
          "Prin" : "0.00",
          "UnpaidInt" : "76.4799",
          "EndBal" : "8320.47"
        },
        {
          "Idx" : "11",
          "Date" : "2023-08-01",
          "BegBal" : "8320.47",
          "Pmt" : "0.00",
          "Int" : "0.00",
          "Prin" : "0.00",
          "UnpaidInt" : "115.3468",
          "EndBal" : "8320.47"
        },
        {
          "Idx" : "12",
          "Date" : "2023-09-01",
          "BegBal" : "8320.47",
          "Pmt" : "253.55",
          "Int" : "154.21",
          "Prin" : "99.34",
          "EndBal" : "8221.13"
        },
        ...,
        {
          "Idx" : "60",
          "Date" : "2027-09-01",
          "BegBal" : "248.71",
          "Pmt" : "253.55",
          "Int" : "4.61",
          "Prin" : "248.94",
          "EndBal" : "-0.23"
        }
      ]
    }
  }
}

Skip, Pickup, and Irregular Payment Loan Module - Request

The fields of the Data object supported by an Irregular module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Country, 🔸InterestPmts, 🔸InterestPmtRate, 🔸IntRate, 🔹IntStartDate, 🔹IrregType, 🔸LoanDate, 🔸PmtDate, 🔹PPY, 🔹Proceeds, 🔹Term, 🔹TotalDown, 🔹UseIntOnlyNotSkips, 🔹UsePrinPlusNotIrregs

Objects: 🟦 Apr, 🟦 Construction, 🟦 Fees[], 🟦 Format, 🟦 ODI, 🟦 Protection, 🟦 Settings

The fields of the Data object supported by an Equal Pmt module request are defined in alphabetical order below:

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

This field allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see the Countries Appendix for the list of supported countries and their associated codes.

Specifying the Country will also set the default value for the APR.Method and Format.CurrencyDecimals fields, as appropriate for the country specified.

🔹 Data.InterestPmts

TypeRequiredValues
StringnoInteger > 1

This field contains the number of interest payments that precede the regularly payments.

🔹 Data.InterestPmtRate

TypeRequiredValues
StringyesNumber in [-99.999...600]

This field contains the interest rate that applies to the interest only payments.

🔸 Data.IntRate

TypeRequiredValues
StringyesNumber in [-99.999...600]

Determine the interest rate used for the loan. The interest rate should be expressed as a percentage. For example, a loan computed with a rate of 5.125% would be specified as "IntRate" : "5.125".

🔹 Data.IntStartDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDsame value as LoanDate

This field contains the date on which interest begins to accrue on the loan's principal balance. If this field is not specified, then the interest start date is set equal the loan date. Also note that the interest start date must be equal to the loan date when computing a construction loan.

The interest start date (when specified) must be on or after the loan date, as well as on or before the first payment date.

🔹 Data.IrregType

TypeRequiredValuesDefault
StringnoIrregular, PickupIrregular

The IrregType field defines how the IrregPmts[].Payment field is interpreted.

If the value of this field is set to Pickup, then IrregPmts[].Payment fields with a value greater than zero will be treated as a pickup payment. A pickup payment is a payment which exceeds the computed regular payment by a given amount.

If this field is omitted, or if the value of this field is Irregular, then IrregPmts[].Payment fields with a value greater than zero will be treated in the following manner:

  • If the UsePrinPlusNotIrregs field is omitted or set to false, then the specified payment amount will be treated as the entire payment amount.
  • If the UsePrinPlusNotIrregs field is set to true, then the specified payment amount will be treated as a specified principal payment (with interest due added to the specified amount).

🔸 Data.LoanDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field holds the date on which the loan amount is disbursed and interest begins to accrue. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔸 Data.PmtDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field specifies the first (and for single payment notes, only) payment date in the loan's repayment schedule. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for payments per year, and determines the payment frequency for the requested loan. The default value of 12 will result in a loan with 12 payments per year. If you require a loan with a payment frequency other than monthly, specify it using this field.

🔹 Data.Proceeds

TypeRequiredValuesDefault
StringnoCurrency > 0n/a

The proceeds specified indicate the amount of money the borrower is requesting, and does not include financed fees, financed insurances, etc.

🔹 Data.TotalDown

TypeRequiredValues
StringnoCurrency > 0

This optional field represents the total down payment that the borrower has applied to reduce the requested proceeds. It may consist of a cash down payment, net trade-in value, or rebate. You only need to specify a total down payment if the loan needs to disclose a total sale price. Typical examples of these loan types are auto and boat loans.

🔹 Data.Term

TypeRequiredValues
StringnoInteger > 1

The Term field indicates the the number of payments to be made at the specified payment frequency (see the PPY field above), after which the loan is scheduled to be paid off.

🔹 Data.UseIntOnlyNotSkips

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then any specified skipped payments (see Irregs[] above) will be treated as interest only payments instead of skipped payments.

🔹 Data.UsePrinPlusNotIrregs

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to true and if the IrregType field is set to Irregular, then any specified irregular payments (e.g. IrregPmts[] objects with a Payment field greater than zero) will be treated as a specified principal payment (with interest due added to the specified amount) instead of the entire specified payment.


🟦 Data.Apr

TypeRequired
Objectno

Settings related to the computed effective rate returned by the SCE (most commonly, the Regulation Z APR in the United States of America) are contained in the fields of this object.

Fields: 🔹MAPR_Max, 🔹Method, 🔹UseMAPR

Objects: None

🔹 Data.Apr.MAPR_Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]36.0

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this field.

🔹 Data.Apr.Method

TypeRequiredValuesDefault
Stringnodefault, actuarial, eu, ca, xirr, xirr360, irrdefault

This field allows the calling application to specify an APR calculation method which will override the default value found in the setup file for the given Account. If this field is set to a valid value, then the specified method will be used to compute the APR for this loan calculation.

If the Country field has been set by the calling application and this field is not set, then the APR method used will be determined by the specified country. For the United States of America, the default APR method is actuarial. For a country in the European Union, the default value is eu (European Union APR). For Canada, the default APR method is ca (Canadian APR).

The xirr value implements the internal rate of return method as implemented in Microsoft\textregistered Excel via the XIRR() function, and is based on an actual day calendar with a 365 day divisor.

The xirr360 value implements the internal rate of return method based upon a unit period calendar with a 360 day divisor.

The irr value implements a common spreadsheet internal rate of return method which assumes strict regular periods. Deviating from a strict regular periodicity may produce unreliable results.

If this field is not specified and the Country field is not specified, then the value of default will be used which informs the SCE to use the APR method defined in the setup file for the specified Account.

🔹 Data.Apr.UseMAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will compute the Military APR in addition to the Regulation Z APR. TheMAPR object will be included in the loan response.


🟦 Data.Construction

TypeRequired
Objectno

The Construction object determines if this loan is a construction to permanent loan request. If you wish to compute a construction loan without an attached permanent loan, you will need to use either the Construction or Loan modules.

Fields: 🔹HalfCommitment, 🔹PPY, 🔸Rate, 🔸Term

Objects: None

🔹 Data.Construction.HalfCommitment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

During the term of the construction loan, the estimated interest for disclosure purposes may be either computed on the full or half commitment amounts. By setting this field to true, interest will be estimated using half of the initial commitment amount (i.e. the principal balance). The default value of false will cause interest to be estimated using the entire initial commitment amount.

🔹 Data.Construction.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

The PPY field allows the calling application to specify the payment frequency during the construction period. The default value of 12 will result in a construction loan with 12 payments per year. If you require a payment frequency during the construction period other than monthly, then specify it using this field. Note that the permanent loan's payment frequency may differ from the construction period's payment frequency.

🔸 Data.Construction.Rate

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]n/a

This field determines the rate applied to the appropriate commitment amount during the term of the construction loan.

🔸 Data.Construction.Term

TypeRequiredValuesDefault
StringyesInteger > 0n/a

The term of the construction loan (in payments) is specified using this field. Please note that the term may not exceed five years.


🟦 Data.Fees[]

TypeRequired
Array of Fee Objectsno

This array of Fee objects allows the calling application to specify one ore more Fee objects to be included with the loan.

Fields: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name

Objects: None

🔹 Data.Fees[].AddToFinChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be included in the computed Finance Charge (and hence, affect the APR), then set this field to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 Data.Fees[].AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this field to true. If set to false, then the fee is paid up front out of the borrower's pocket.

🔹 Data.Fees[].Adjust

TypeRequiredValuesDefault
StringnoCurrency0

The optional Adjust field allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This field has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCE is as follows:

{
  "Fees" : [
    {
      "Name" : "TN Fee",
      "CalcType" : "OnAmtFin",
      "Adjust" : "-2000.00",
      "Entry" : "0.115",
      "AddToPrin" : true,
      "AddToFinChg" : false
    }
  ]
}

🔹 Data.Fees[].CalcType

TypeRequiredValuesDefault
StringnoDollar, OnProceeds, OnPrincipal, OnAmtFinDollar

This field specifies how the fee is to be computed, as described in the following table.

Fee Calc TypeDescription
DollarThe Entry field is understood as a flat dollar amount.
OnProceedsThe Entry field is understood as a percentage value, to be applied to the loan's proceeds, defined as the sum of advances. An Entry of 0.25 would represent a fee of 0.25% of the total proceeds.
OnPrincipalThe Entry field is understood as a percentage value, to be applied to the loan's principal balance. An Entry of 0.125 would represent a fee of 0.125% of the principal balance.
OnAmtFinThe Entry field is understood as a percentage value, to be applied to the loan's Regulation Z Amount Financed. An Entry of 0.33 would represent a fee of 0.33% of the amount financed.

🔹 Data.Fees[].Entry

TypeRequiredValuesDefault
StringnoNumber >= 00

How this field is interpreted depends upon the Fee.CalcType field. Please see the documentation for this field for further information.

🔹 Data.Fees[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which fees need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.Fees[].MAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this field to true.

Fees which are added to the finance charge (e.g. "AddToFinChg" : true) are always considered MAPR fees, regardless of the stated value of this field.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Data.Fees[].Max

TypeRequiredValuesDefault
StringnoCurrency > 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Min

TypeRequiredValuesDefault
StringnoCurrency > 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value will be determined by the value of the Country field. For most countries, the default value is 2. If no country code is specified, then the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.IrregPmts[]

TypeRequired
array of IrregPmt Objectsno

This array of IrregPmt objects allows the calling application to specify one ore more skipped / interest only payments to be scheduled in the repayment plan, depending upon the value of the UseIntOnlyNotSkips field.

Fields: 🔹Index, 🔹Month, 🔹Year

Objects: None

🔹 Data.IrregPmts[].Index

TypeRequiredValuesDefault
StringnoInteger > 0empty

Instead of specifying a month (and optionally, a year) for a given skipped payment, you may instead specify a payment number using the Index field. Thus, if you wish to specify that the first payment be skipped, you would set "Index" : "1".

Note that if you specify a payment index, then omit the Month and Year fields.

🔹 Data.IrregPmts[].Month

TypeRequiredValuesDefault
StringnoInteger in [0..12]empty

The Month field allows the user to specify a month during which the skipped / interest only payment is applicable. If the Year field is not set for this element, then the skipped / interest only payment will be applied for each payment falling in the given month, throughout the entire term of the loan.

On the other hand, if the Year field is set for this element, then the skipped / interest only payment will only be applied to those payments falling in the given month and year.

If the value of the Month field is set to zero (0), then this skipped / interest only payment specification is ignored.

If you wish to specify a skipped payment for a specific payment number (instead of specifying the month and optionally, the year), then use the Index field and omit the Month and Year fields.

🔹 Data.IrregPmts[].Payment

TypeRequiredValuesDefault
StringnoCurrency >= 00

The amount of the pickup / specified payment. A zero entry instructs the SCE to treat the payment as a skipped payment.

🔹 Data.IrregPmts[].Year

TypeRequiredValuesDefault
StringnoInteger in [0..12]empty

IrregPmt.Year is explained in the Month.


🟦 Data.ODI

TypeRequired
Objectno

If odd days should be treated as a prepaid finance charge or added to the first payment in a manner different from how interest is accruing, then the request needs to define how odd days interest is computed and handled using the fields of this object.

Fields: 🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

Objects: None

🔹 Data.ODI.AccrualCode

TypeRequiredValuesDefault
Stringno204, 205, 210, 211, 220, 221, 230, 231, 250default

The accrual code defines how the odd days interest is computed. The meaning of the allowed accrual codes is defined below.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

Accrual CodeDescription
204True360/360
205True360/365
210Actual/360
211True365/360
220Actual/365
221True365/365
230Actual/Actual
231Midnight 366
250Actual/Variable Days Per Year

🔹 Data.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application wants the odd days interest to be added to the first payment, then set the value of this field to true. A value of false indicates that the odd days interest will be treated as a prepaid finance charge.

🔹 Data.ODI.AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If any odd days interest should be treated as a financed prepaid fee, then set the value of this field to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCE and the value of AddToPrin will be set to false.

🔹 Data.ODI.AnchorDate

TypeRequiredValuesDefault
StringnoBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This field determines how to arrive at the anchor date. A value of BackUnitPeriod means that the anchor date is one unit period prior to the specified first payment date. A value of BackDaysPerPeriod means that the anchor date is the number of days per period prior to the first payment date. Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 Data.ODI.ForceUnitPeriod

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Some unit period methods will not use a strict unit period interest accrual factor in the period to the first payment. For example, code 302 will count the days to the first payment and divide by 365. For a monthly loan, setting this field to true will use a 1/12 factor instead of Days/365.

🔹 Data.ODI.NoCap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When the odd days interest is financed, setting this field to true prevents interest from being computed on interest. The default is false, which means interest will be computed on interest.

🔹 Data.ODI.UseDailyCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 Data.ODI.UseNegODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If there are negative odd days in the loan, then the value of this field determines if a negative odd days interest fee is computed. If the value of this field is false, then negative odd days fees are not allowed, the SCE will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes and odd days interest credit) when there are negative odd days in a loan.


🟦 Data.Protection

TypeRequired
Objectno

The Protection object is used by the calling application to request one or more payment protection products (e.g. life, disability, involuntary unemployment, or personal property) be included in the loan calculation. Each of these products is requested by including its own child object, along with the borrower birthdays.

Fields: 🔹Birthday1, 🔹Birthday2, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps

Objects: 🟦 Disability, 🟦 Life,

🔹 Data.Protection.Birthday1

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the secondary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday2" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower2 or both.

🔹 Data.Protection.Birthday2

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the primary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday1" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower1 or both.

🔹 Data.Protection.Financed

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the computed premiums for single premium debt protection products should be financed along with the proceeds, then this field should be set to true (which is the default value if not specified). A value of false indicates that the computed premiums will not be financed with the proceeds, and hence will be paid out of pocket by the borrower. Note that this applies to single premium insurance products only!

🔹 Data.Protection.LineOfCredit

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this is an account using TruStage's MOB insurance, and if this loan is a line of credit where product term caps should be ignored, then set this field to true. Otherwise, omit this field or set it to false.

🔹 Data.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then any computed payment protection premium or fee will be considered a mandatory fee which will be included as a part of the Finance Charge, and hence affect the disclosed APR.

If the Mandatory field is set to false, then the loan will treat any premiums / fees as normal.

🔹 Data.Protection.ShowBorrowerInfo

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have data returned for each specified borrower instead of a single Term object, then set the value of this field to true. Otherwise, omit this field or set it to false. See the Borrower and Term objects defined in the response section for more information.

🔹 Data.Protection.ShowCaps

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have cap information (e.g. maximum terms, coverage amounts, ages, etc.) returned for each product offered, set the value of this field to true. Otherwise, omit this field or set it to false. See the Caps object defined in the response section for more information.


🟦 Data.Protection.Disability

TypeRequired
Objectno

The Disability object determines what type of disability coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table

Objects: None

🔹 Data.Protection.Disability.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Disability.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Disability object altogether or specify a value of none.

🔹 Data.Protection.Disability.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Disability.Table

TypeRequiredValuesDefault
StringnoInteger in [0...19]0

If the specified account has been set up with multiple disability or debt cancellation plans, then this field determines which plan number will be used. If no table number is specified, the first table (table zero) will be used.


🟦 Data.Protection.Life

TypeRequired
Objectno

The Life object determines what type of life coverage is requested for the loan.

Fields: 🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates

Objects: None

🔹 Data.Protection.Life.CovAmount

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a coverage amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum coverage amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified coverage amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Life.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Life object altogether or specify a value of none.

🔹 Data.Protection.Life.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Life.Dismemberment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer life protection products with optional dismemberment coverage, and if the optional dismemberment coverage is desired, then set this field's value to true. Otherwise, use the default value of false.

🔹 Data.Protection.Life.Method

TypeRequiredValuesDefault
StringnoDefault, Gross, NetDefault

Some accounts are configured to offer different types of credit life products (usually gross and net). In these accounts, this field allows the calling application to specify which method to use for a given loan. If no method is present in the request, then the default method will be used.

🔹 Data.Protection.Life.UseLevelRates

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer single premium credit life using level rates instead of the normal decreasing rates, and if you wish to use level rates instead of decreasing, then set this field's value to true. Otherwise, use the default value of false.


🟦 Data.Settings

TypeRequired
Objectno

The Settings object allows the calling application to alter the default loan calculation options.

Fields: 🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

Objects: None

🔹 Data.Settings.Account

TypeRequiredValuesDefault
StringnoInteger in [1..9999]1

The Account field specifies the numeric setup file account number that will be used to compute the requested loan. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which may affect the loan calculation, such as the accrual method, insurance methods / rates / caps, etc.

🔹 Data.Settings.AccrualCode

TypeRequiredValuesDefault
Stringnosee tabledefault

The method of interest accrual is defined by this field. A value of default informs the SCE to use the interest accrual method defined in the setup file for the specified Account. All other valid accrual codes are described in the table below.

🔹 Data.Settings.ConMethod

TypeRequiredValuesDefault
Stringnodefault, simple, interestonlydefault

When computing a construction loan, there are two supported methods for computing interest during the constrcution period:

If the value of this field is simple, then the estimated construction interets will be computed and disclosed as a lup-sum prepaid fee (see the Moneys.ConstructInterest response field).

If the value of this field is interestonly, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

A value of default instructs the SCE to use the construction method specified in the setup file for the given account.

🔹 Data.Settings.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.Settings.Lastday

TypeRequiredValuesDefault
Booleannotrue, falseas configured in setup file

If present, this field overrides the Last Day setting in the setup files, which only applies to loans computed with an actual day accrual calendar where the first payment date falls at the end of a month with fewer than 31 days. As an example, if the first payment date is on April 30, should the following payment dates be made on the 30th of each month, or on the last day of the month?

If no value is specified for this field, then the setup file setting will be used. If true is specified, then conditions triggering a last day situation will result in payments which fall at the end of the month. A value of false indicates that when dictated, subsequent payment dates will not be moved to the last day of the month.

🔹 Data.Settings.OddFinal

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Following the last payment of an amortization schedule, the ending balance is unlikely to be zero due to the rounding of the payment. In order to assure perfect amortization, lenders will use an odd final payment to perfectly amortize the loan.

Set OddFinal to true to ensure perfect amortization with a payment that pays off the loan.

🔹 Data.Settings.PmtDollarRound

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Payments are normally rounded to the penny, according to the method specified by in the setup file, or vy theSettings.PmtRound field. If the payment should be rounded to the dollar instead of the penny, then set the value of this field to true.

Note that for some loans (such as those with longer terms or relatively small proceeds), rounding the payment up or to the nearest dollar may require a shortened loan term to prevent one or more negative payments at the end of the loan.

🔹 Data.Settings.PmtRound

TypeRequiredValuesDefault
Stringnodefault, nearest, up, down, bestdefault

How are calculated payments to be rounded at and beyond this event? best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen. default means that the setting should be configured as specified in the setup file.

🔹 Data.Settings.ShowAmTable

TypeRequiredValuesDefault
Booleannotrue, falsetrue

To supress the entire amortization schedule from the response, set value of this field to false; otherwise, the amortization schedule will be returned with the response.

🔹 Data.Settings.TILARESPA2015

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will include data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015. If the field is omitted or set to false, then the TILA RESPA outputs will not be generated.

Note that this field is supported for equal payment loans, balloon payment loans, single payment notes, interest only loans, fixed principal plus interest loans, skips, pickups and irregulars, and ARMs.

🔹 Data.Settings.YieldPPY

TypeRequiredValuesDefault
Stringno0, 2, 4, 6, 120

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than `0', this field determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this field with a value other than zero, the calling application must include an odd days prepaid fee in the request.


Skip, Pickup, and Irregular Payment Loan Module - Response

The Data object for a response from the Irregular module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data🔹Country
|- 🟥 Errors[]
|- 🟥 Warnings[]
|- 🟦 Results🔸Payment, 🔸Number of Skips, 🔸Payments Specified
|- 🟦 FedBox🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice
|- |- 🟥 APR🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type
|- |- 🟦 MAPR🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded
|- 🟦 TILARESPA2015🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP
|- |- 🟥 LoanCosts[]🔹Name, 🔹In5Years, 🔸Value
|- |- 🟥 In5Years🔸PaidTotal, 🔸PaidPrincipal
|- |- 🟥 MaxPnIPmt🔸Date, 🔸Amount
|- |- 🟥 MinRate🔸Rate, 🔸Idx
|- |- 🟥 MaxRate🔸Rate, 🔸Idx
|- |- 🟥 ProjectedPaymentsTable[]🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax
|- 🟦 Moneys🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹MinIntChgAdj, 🔹MinFinChgAdj
|- |- 🟦 ODI🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost
|- |- 🟦 Fees[]🔹Name, 🔸Fee
|- |- 🟦 Protection🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory
|- 🟦 Accrual🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity
|- 🟦 PmtStreams[]🔸Term, 🔸Pmt, 🔹Rate, 🔸Begin
|- 🟦 Protection
|- |- 🟦 Life🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟦 Level🔸Result, 🔸Formula
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Disability🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- 🟦 AmTable🔹Months, 🔹Weeks, 🔹OddDays
|- |- 🟦 GrandTotals🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot
|- |- 🟦 SubTotals[]🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub
|- |- 🟥 AmLines[]🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹UnpaidInt, 🔸EndBal

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔹Country

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Results, 🟦 FedBox, 🟦 TILARESPA2015, 🟦 Moneys, 🟦 Accrual, 🟦 PmtStreams[], 🟦 Protection, 🟦 AmTable

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

If the request specified a two-character or three-digit Country code, then this field will be present and will contain the full name of the country associated with the specified code. Please see the Countries Appendix for the list of supported countries and their associated codes.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Irregular",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?",
    "IntRate" : "4.50",
    "Proceeds" : "5000.00",
    "Term" : "12"
  }
}
{
  "Result" : 200,
  "Module" : "Irregular",
  "Data" : {
    "Errors" : [
      "Data.LoanDate (StringDate) not found.",
      "Data.PmtDate (StringDate) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

🟦 Data.Results

TypeRequired
Objectno

This field(s) of this object represent the most important numerical results for the loan request.

Fields: 🔸Payment, 🔸Number of Skips, 🔸Payments Specified,

Objects: None

🔸 Data.Results.Payment

TypeRequiredValues
StringyesCurrency

The regular payment for the irregular payment loan.

🔹 Data.Results.Number of Skips

TypeRequiredValues
StringnoInteger

The total number of payments that are skipped are reported here.

🔹 Data.Results.Payments Specified

TypeRequiredValues
StringnoInteger

The total number of specified payments are reported here.


🟦 Data.FedBox

TypeRequired
Objectno

This object groups together all fields which contain important numerical information, as defined in the Truth-In-Lending laws (Regulation Z).

Fields: 🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice

Objects: 🟥 APR, 🟦 MAPR

🔸 Data.FedBox.AmtFin

TypeRequiredValue
StringyesCurrency > 0.0

The Regulation Z Amount Financed, which is defined as the amount of credit provided to the borrower or on their behalf.

🔸 Data.FedBox.FinChg

TypeRequiredValue
StringyesCurrency

This element contains the Regulation Z Finance Charge, described as the dollar amount the credit extension will cost the borrower.

🔸 Data.FedBox.TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

The amount which the borrower will have paid when the borrower has made all scheduled payments.

🔹 Data.FedBox.TotalSalePrice

TypeRequiredValue
StringyesCurrency > 0.0

The sum of the total of payments plus the total down payment. Please note that if no TotalDown field was included in the request, then this element will not be present.


🟥 Data.FedBox.APR

TypeRequired
Objectyes

The APR object contains fields which return the value and APR method used.

Fields: 🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type

Objects: None

🔸 Data.FedBox.APR.Value

TypeRequiredValue
StringyesNumber

The computed APR, which is the cost of the extension of credit expressed as a yearly rate.

🔹 Data.FedBox.APR.Max

TypeRequiredValueDefault
StringnoNumbern/a

This field returns the maximum APR as configured in the account's setup files. If no maximum APR has been specified, then this field will not be present in the response. The value of this field should be displayed as a percentage.

🔹 Data.FedBox.APR.MaxExceeded

TypeRequiredValueDefault
Booleannotrue, falsen/a

If a maximum APR is configured in the account's setup files, then the value of this field indicates whether or not the current loan exceeds the maximum APR. If no maximum APR has been specified, then this field will not be present in the response.

🔸 Data.FedBox.APR.Type

TypeRequiredValue
StringyesText

This field returns the APR method used to compute the reported APR.


🟦 Data.FedBox.MAPR

TypeRequired
Objectno

The MAPR (military APR) object is only returned with the response if the value of the Apr.UseMAPR request field is true.

Fields: 🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded

Objects: None

🔸 Data.FedBox.MAPR.Value

TypeRequiredValue
StringyesNumber

The computed military APR.

🔸 Data.FedBox.MAPR.Advance

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the equivalent of the Amount Financed for the Military APR. Specifically, it is the principal balance less any MAPR fees, debt protection, etc.

🔸 Data.FedBox.MAPR.Max

TypeRequiredValue
StringyesNumber

This field holds the maximum Military APR as specified in the input XML (see Apr.MAPR_Max). If not specified, a default value of 36% is assumed. The value of this field should be displayed as a percentage. As an example, for "Max" :"36.000", you would disclose a maximum Military APR of 36%.

🔸 Data.FedBox.MAPR.MaxExceeded

TypeRequiredValue
Booleanyestrue, false

The value of this field indicates whether or not the current loan exceeds the maximum allowed Military APR. As an example, if the maximum APR has been set to 36% and the Military APR for the returned loan was 37.125%, the MAPR object would be:

{
  "MAPR" : {
    "Value" : "37.125",
    "Advance" : "1350.00",
    "Max" : "36.000",
    "MaxExceeded" : true
 }
}


🟦 Data.TILARESPA2015

TypeRequired
Objectno

This object contains fields which are of interest to fulfilling the 2015 TILA RESPA rule. It will only be present if the Settings.TILARESPA2015 field in the request is set to true.

Fields: 🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP

Objects: 🟥 LoanCosts[], 🟥 In5Years, 🟥 MaxPnIPmt, 🟥 MinRate, 🟥 MaxRate, 🟥 ProjectedPaymentsTable[]

🔸 Data.TILARESPA2015.TotalLoanCost

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field is the sum of all borrower paid loan costs. Since all LoanCost values are rounded dollar amounts, the value of this element will also be a rounded dollar amount.

🔸 Data.TILARESPA2015.CD_TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the sum of the total of payments, all borrower paid loan costs, and any odd days interest that is prepaid at loan closing. This value should be disclosed on the Closing Disclosure form in the Total of Payments field.

🔸 Data.TILARESPA2015.TIP

TypeRequiredValue
StringyesNumber

The total interest percentage, rounded to three or fewer decimal places - as required.


🟥 Data.TILARESPA2015.LoanCosts[]

TypeRequired
Array of LoanCost Objectsyes

For every object in the Fees[] array present in the request which has its IsLoanCost field set to true (and hence, is a borrower paid loan cost) and whose amount is greater than zero (except odd days interest fee types, as explained in the previous documentation of the Fee and object), there will be a corresponding LoanCost object.

Fields: 🔹Name, 🔹In5Years, 🔸Value

Objects: None

🔹 Data.TILARESPA2015.LoanCosts[].Name

TypeRequiredValueDefault
StringnoTextn/a

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔹 Data.TILARESPA2015.LoanCosts[].In5Years

TypeRequiredValueDefault
StringnoCurrency >= 0Same as Value

If the entire amount of the fee is different from the amount collected over the first five years (for example, a service charge), then this field will be present and disclose the portion of this loan coast that is accrued during the first five years.

🔸 Data.TILARESPA2015.LoanCosts[].Value

TypeRequiredValue
StringyesCurrency >= 0

The value of this field is the numerical value of the fee, rounded to the nearest dollar.


🟥 Data.TILARESPA2015.In5Years

TypeRequired
Objectyes

This object contains all important values required for the new "In 5 Years" section of the disclosure.

Fields: 🔸PaidTotal, 🔸PaidPrincipal

Objects: None

🔸 Data.TILARESPA2015.In5Years.PaidTotal

TypeRequiredValue
StringyesCurrency >= 0

This field holds the sum of all "principal, interest, mortgage insurance, and borrower paid loan costs scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.

🔸 Data.TILARESPA2015.In5Years.PaidPrincipal

TypeRequiredValue
StringyesCurrency >= 0

This field holds "the principal scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.


🟥 Data.TILARESPA2015.MaxPnIPmt

TypeRequired
Objectyes

The fields of this object hold the maximum sceduled principal and interest payment during the term of the loan, as well as the date on which that payment is made.

Fields: 🔸Date, 🔸Amount

Objects: None

🔸 Data.TILARESPA2015.MaxPnIPmt.Date

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field returns the date on which the maximum scheduled principal and interest payment is made. If the maximum scheduled payment occurs more than once, then the date returned is that of the first instance.

🔸 Data.TILARESPA2015.MaxPnIPmt.Amount

TypeRequiredValue
StringyesCurrency >= 0

The maximum sceduled principal and interest payment during the term of the loan.


🟥 Data.TILARESPA2015.MinRate

TypeRequired
Objectyes

The fields of this object hold information regarding the minimum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MinRate.Rate

TypeRequiredValue
StringyesNumber

The value of the minimum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MinRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the minimum rate is first applicable.


🟥 Data.TILARESPA2015.MaxRate

TypeRequired
Objectyes

The fields of this object hold information regarding the maximum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MaxRate.Rate

TypeRequiredValue
StringyesNumber

The value of the maximum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MaxRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the maximum rate is first applicable.


🟥 Data.TILARESPA2015.ProjectedPaymentsTable[]

TypeRequired
Array of PPCol Objectsyes

Fields: 🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax

Objects: None

This field returns an Array of projected payment table columns (PPCol), with each array member detailing a single column. Per the regulation, there will be a minimum of one column and a maximum of four columns, depending upon the parameters of the loan.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Num

TypeRequiredValue
StringyesInteger in [1...4]

The value of this field identifies the number of the column to which the following fields apply. The value will be from 1 to 4.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Title

TypeRequiredValue
StringyesText

The value of this field is the title for the column. Most of the time, it will be in the form of Years X - Y, or Year X, or Final Payment in the case of a final balloon payment.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearStart

TypeRequiredValue
StringyesInteger

The beginning year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearEnd

TypeRequiredValue
StringyesInteger

The ending year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMin

TypeRequiredValue
StringyesCurrency > 0

The minimum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMax

TypeRequiredValue
StringyesCurrency > 0

The maximum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].IntOnly

TypeRequiredValue
Stringyesnone, some, all

If none of the payments associated with this column are interest only payments, then the value of this field will be none. A value of some means that some of the payments (but not all) associated with this columnt are interest only. Finally, a value of all indicates that all payments associated with this columnt are interest only.

Note that for the purposes of this field, a scheduled payment is considered an interest only payment if the payment amount pays off all interest due at the time of the payment, with no reduction in the principal balance.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Balloon

TypeRequiredValue
Booleanyestrue, false

If any of the payments associated with this column are balloon payments (e.g. isolated payments that are more than twice the value of a regular periodic payment), then the value of this field will be true.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].MIPmt

TypeRequiredValue
StringyesCurrency > 0

The value of this field holds the mortgage insurance premium associated with this column, rounded to the nearest dollar. If no mortgage insurance is present or coverage has been dropped, a value of zero will be present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMin

TypeRequiredValue
StringyesCurrency > 0

This field returns the minimum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMax

TypeRequiredValue
StringyesCurrency > 0

This field returns the maximum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.


🟦 Data.Moneys

TypeRequired
Objectno

This element groups together those other major cash result amounts not disclosed under the FedBox object, such as the principal balance, interest charge, and fee amounts.

Fields: 🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹MinIntChgAdj, 🔹MinFinChgAdj

Objects: 🟦 ODI, 🟦 Fees[], 🟦 ServiceCharges[], 🟦 Protection

🔸 Data.Moneys.Principal

TypeRequiredValue
StringyesCurrency >= 0

The principal balance is the amount on which interest is accrued. The principal balance consists of all advances requested by the borrower, as well as any fees and/or protection products which are financed.

🔸 Data.Moneys.Interest

TypeRequiredValue
StringyesCurrency

This value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments.

🔹 Data.Moneys.ConstructInterest

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If the requested loan is a construction loan with a permanent loan attached and the account specified is set up to compute construction loans via the "Simple" method, then this field will contain the construction interest for the requested loan.

Note that if a permanent loan is attached to a construction loan and the account is set up to use the "LaserPro" method, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

If the requested loan is a construction loan without a permanent loan attached, then the construction interest will be disclosed in the Moneys.Interest field.

If the requested loan was not a construction loan, or if construction loans have not been set up for the given account, then this field will not appear in the response.

🔹 Data.Moneys.FinFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field contains the sum of all fees having AddToPrin set to true and occuring on the date of an advance. If this value is zero, the field will not appear in the response.

🔹 Data.Moneys.Prepaid

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field represents all prepaid finance charges and contains the sum of all fees occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will not be found in the response.

🔹 Data.Moneys.PocketFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are neither financed, nor added to the finance charge. In essence, they are paid out of the borrower's pocket. If no out of pocket fees were requested, then this field will not show up in the response.

🔹 Data.Moneys.MAPRFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are Military APR fees (including protection products), and will only appear if the Military APR has been requested.

🔹 Data.Moneys.MinIntChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum interest charge is configured in the account's setup files and the final payment was adjusted to meet this minimum interest charge, then this field will be returned in the response and will contain the value of the minimum interest charge adjustment.

🔹 Data.Moneys.MinFinChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum finance charge is configured in the account's setup files and the final payment was adjusted to meet this minimum finance charge, then this field will be returned in the response and will contain the value of the minimum finance charge adjustment.


🟦 Data.Moneys.ODI

TypeRequired
Objectno

This object, if present, contains information regarding odd days interest. If no odd days interest was requested, then this object will not be present in the response.

Fields: 🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost

Objects: None

🔹 Data.Moneys.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsen/a

If the odd days interest has been added to the first payment, then this field will be present in the response with a value of true. If the odd days interest has been treated as a prepaid finance charge, then this field will not be present and a default value of false should be assumed.

🔸 Data.Moneys.ODI.Count

TypeRequiredValues
StringyesInteger >= 0

Discloses the number of odd days computed by the SCE for the requested loan.

🔸 Data.Moneys.ODI.Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total amount odd days interest charge.

🔹 Data.Moneys.ODI.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field holds the number of odd months computed by the SCE for the requested loan when using odd days accrual method 250. If the odd days accrual method is a value other than 250, then this field will not be present in the ODI object of the response.

🔹 Data.Moneys.ODI.DailyCost

TypeRequiredValueDefault
StringnoCurrency >= 0.0n/a

If the odd days interest fee is computed using a rounded daily cost, then the value of this field will hold that value. If the odd days interest is not computed using a rounded daily cost, then this field will not be present in the response.


🟦 Data.Moneys.Fees[]

TypeRequired
Array of Fee Objectsno

If the requested loan included fees, then for each fee in the loan there will be a Fee object in this array containing the name of the fee and the computed fee amount.

If there were no fees requested with the loan, then the Moneys.Fees[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.Fees[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed fee amount.


🟦 Data.Moneys.ServiceCharges[]

TypeRequired
Array of ServiceCharge Objectsno

If the requested loan included service charges, then for each service charge in the loan there will be a ServiceCharge object in this array containing the name of the service charge and the computed service charge amount.

If there were no service charges requested with the loan, then the Moneys.ServiceCharges[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.ServiceCharges[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the service charge, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.ServiceCharges[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed service charge amount.


🟦 Data.Moneys.Protection

TypeRequired
Objectno

This object returns summary information on all payment protection products computed with the loan. If no protection products were included with the loan, then this object will be omitted from the response.

Fields: 🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory

Objects: None

🔸 Data.Moneys.Protection.Cost

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total cost of all protection plans included with the computed loan. For the individual plan costs, see the Protection field described below.

🔸 Data.Moneys.Protection.PerPmt

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per payment.

🔸 Data.Moneys.Protection.PerDay

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per day.

🔸 Data.Moneys.Protection.Category

TypeRequiredValues
StringyesNone, SP, MOB, TrueMOB, PaidSP

Te value of this field specifies the category under which the computed loan protection falls. The categories are described below:

CategoryDescription
NoneNo loan protection products were computed with this loan.
SPFinanced single premium coverage.
MOBMonthly outstanding balance coverage.
TrueMOBTruStage's monthly outstanding balance method.
PaidSPNon-financed single premium coverage.

🔹 Data.Moneys.Protection.IsDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field indicates if the specified account's protection is set up as debt protection. If this field is not present, then the default value of false should be used (which indicates that the account's protection is set up as insurance instead).

🔹 Data.Moneys.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field should only appear in the response if the value of the is true. If this field does not appear in the output, then the value should default to false.

If the value of the Mandatory field is true, then the total premium / fee amount for all insurance / debt protection products has been treated as a part of the Finance Charge, and hence will affect the effective APR.


🟦 Data.Accrual

TypeRequired
Objectno

This object groups together interest accrual information, such as the accrual method(s) used, days to the first payment and the loan's maturity date.

Fields: 🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity

Objects: None

🔸 Data.Accrual.Method

TypeRequiredValues
StringyesText

The Method field contains a textual description of the interest accrual method used to compute the loan (e.g. "Unit Period 365 Simple".)

🔸 Data.Accrual.Days1Pmt

TypeRequiredValues
StringyesInteger >= 0

This field contains the number of days between the date of the first advance and the date of first payment, computed by one of two methods as specified in by Accrual.DayCount (below).

🔸 Data.Accrual.DayCount

TypeRequiredValues
StringyesTrue360, Actual

This field specifies the method used to compute the number of days from the date of the first advance until the first payment date. Actual means that the actual number of days between these two dates are used, whereas the True360 method use a 360 day calendar.

🔸 Data.Accrual.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

Holds the maturity date of the loan, which is the date on which the last payment is scheduled. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.PmtStreams[]

TypeRequired
Objectno

The PmtStreams[] array is made up of one or more PmtStream objects (there will always be at least one of these elements, and there may be more than one depending upon the loan type). The PmtStream objects describe the scheduled stream of payments for the computed loan. Instead of disclosing each and every payment individually (which can be done with the AmTable object), the payment stream groups together consecutive equal payments at the same interest rate to produce output along the lines of:

{
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "50.13",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "10",
        "Pmt" : "37.59",
        "Rate" : "4.500",
        "Begin" : "2022-11-01"
      },
      {
        "Term" : "1",
        "Pmt" : "10062.59",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ]
}

Each object describes a single stream of equal payments at the same interest rate, using the following fields to define the important properties of each payment stream.

Fields: 🔸Term, 🔸Pmt, 🔸Rate, 🔸Begin

Objects: Note

🔸 Data.PmtStreams[].Term

TypeRequiredValues
StringyesInteger >= 0

The Term field holds the number of payments that make up the given payment stream.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValues
StringyesCurrency > 0

The Pmt field holds the computed payment amount for this payment stream.

🔹 Data.PmtStreams[].Rate

TypeRequiredValues
StringyesNumber

Contains the interest rate used for the duration of this payment stream. If this payment stream accrued interest using split-rate tiers, then this field will not be returned.

🔸 Data.PmtStreams[].Begin

TypeRequiredValues
StringyesYYYY-MM-DD

This field identifies the date on which the first payment for this given payment stream is scheduled to be made. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.Protection

TypeRequired
Objectno

If protection products are requested, then this object will be present in the response, along with a field for each requested protection product.

Fields : None

Objects: 🟦 Life, 🟦 Level, 🟦 Disability


🟦 Data.Protection.Life

TypeRequired
Objectno

If life protection was requested with the loan and decreasing life was configured for this loan type, then the Life object will be present in the response to return information on decreasing life coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Life.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Life.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Life.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Life.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Life.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Life.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Life.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Life.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Life.Cost.Premium2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary life product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Life.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Life.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Life.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Life.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Life.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Life.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Life.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Term

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Level

TypeRequired
Objectno

If level protection was requested with the loan and decreasing level was configured for this loan type, then the Life object will be present in the response to return information on decreasing level coverage.

Fields: 🔸Result, 🔸Formula,

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Level.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Level.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🟦 Data.Protection.Level.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Level.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Level.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Level.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Level.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Level.Cost.Premium2

TypeRequiredValuesDefault
StringyesCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary Level product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Level.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Level.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Level.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Level.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Level.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Level.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Level.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Disability

TypeRequired
Objectno

If disability protection was requested with the loan and decreasing disability was configured for this loan type, then the Life object will be present in the response to return information on decreasing disability coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Disability.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Disability.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Disability.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Disability.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Disability.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Disability.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Disability.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Disability.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Disability.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Disability.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Disability.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Disability.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Disability.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Disability.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Disability.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower2

TypeRequired
Objectno

The borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Disability.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.AmTable

TypeRequired
Objectno

This object contains fields which summarize and describe the loan's amortization schedule. If Settings.ShowAmTable is set to false, then this object will not be found in the response.

Fields: 🔹Months, 🔹Weeks, 🔹OddDays

Objects: 🟦 GrandTotals, 🟦 SubTotals[], 🟥 AmLines[]

🔹 Data.AmTable.AvgBal

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the average balance of the loan used in the Canadian APR calculation.

🔹 Data.AmTable.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of months in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.Weeks

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of weeks in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.OddDays

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the number of odd days in the term of the loan used in the Canadian APR calculation. Odd days are computed by moving backwards from the maturity date the number of disclosed months or weeks, and then counting the additional number of days required to land on the loan date.

🟦 Data.AmTable.GrandTotals

TypeRequired
Objectno

This object describes the total amounts of various categories throughout the life of the loan. As an example, the total amount paid to interest and principal, as well as the total of payments are all contained in fields of this object.

Fields: 🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot

Objects: None


🔸 Data.AmTable.GrandTotals.PmtTot

TypeRequiredValues
StringyesCurrency

The total of payments scheduled for the computed loan.

🔸 Data.AmTable.GrandTotals.IntTot

TypeRequiredValues
StringyesCurrency

The total amount paid to interest over the life of the loan, assuming all payments are made as scheduled.

🔸 Data.AmTable.GrandTotals.PrinTot

TypeRequiredValues
StringyesCurrency

This field contains the total amount paid to principal during the loan term, assuming all payments are made as scheduled.

🔹 Data.AmTable.GrandTotals.CLTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLTot field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life over the duration of the loan.

🔹 Data.AmTable.GrandTotals.AHTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHTot field will only appear on loans with certain types of disability or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.


🟦 Data.AmTable.SubTotals[]

TypeRequired
Array of SubTotal Objectsno

Describes the total amounts of various categories paid during a given calendar year. For each year in which the computed loan has scheduled payments, there will be a SubTotal object in the array.

Fields: 🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub

Objects: None

🔸 Data.AmTable.SubTotals[].Year

TypeRequiredValues
StringyesInteger >= 0

The calendar year for which the subtotal data is applicable.

🔸 Data.AmTable.SubTotals[].Start

TypeRequiredValues
StringyesInteger >= 0

This field defines the first amortization event which falls in the specified calendar year. To find the AmLines[] object which corresponds to this value, match the Idx field of the AmLine object.

🔸 Data.AmTable.SubTotals[].Events

TypeRequiredValues
StringyesInteger >= 0

This field defines the number of amortization events which belong to this calendar year.

🔸 Data.AmTable.SubTotals[].PmtSub

TypeRequiredValues
StringyesCurrency

Contains the total of payments scheduled for the calendar year.

🔸 Data.AmTable.SubTotals[].IntSub

TypeRequiredValues
StringyesCurrency

Holds the total amount paid to interest over the calendar year, assuming all payments are made as scheduled.

🔸 Data.AmTable.SubTotals[].PrinSub

TypeRequiredValues
StringyesCurrency

Contains the total amount paid to principal during the calendar year, assuming all payments are made as scheduled.

🔹 Data.AmTable.SubTotals[].CLSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLSub field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life during the year.

🔹 Data.AmTable.SubTotals[].AHSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHSub field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection during the year.


🟥 Data.AmTable.AmLines[]

TypeRequired
Array of AmLine Objectsyes

There is one AmLine object for each amortization event which occurs during the life of a loan. Most of the time, each event will describe a payment, and detail how that payment is applied (to interest, principal, loan protection products, etc.). Some events, such as capitalizing interest, will not have payments but will show how the loan amortizes.

Fields: 🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹UnpaidInt, 🔸EndBal

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValues
StringyesInteger >= 0

The index of the amortization event, which is either the payment number, or zero. A value of zero designates an event that is either not a payment or is a skipped payment.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The date on which the amortization event is scheduled to occur. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 AmData.AmTable.AmLines[]ine.BegBal

TypeRequiredValues
StringyesCurrency >= 0

The principal balance before the amortization event occurs.

🔸 Data.AmTable.AmLines[].Pmt

TypeRequiredValues
StringyesCurrency

The payment amount for this event.

🔸 Data.AmTable.AmLines[].Int

TypeRequiredValues
StringyesCurrency

The amount of interest paid at this event.

🔸 Data.AmTable.AmLines[].Prin

TypeRequiredValues
StringyesCurrency

The amount of principal paid at this event.

🔹 Data.AmTable.AmLines[].CL

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CL field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for life coverage.

🔹 Data.AmTable.AmLines[].AH

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AH field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for disability / debt protection coverage.

🔹 Data.AmTable.AmLines[].UnpaidInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear on an amortization line when interest has been accrued, but has not yet been paid or added to the principal balance. If the interest accrued has not yet been rounded, then the unpaid interest will be displayed to four (4) decimal placed. If rounded, then the unpaid interest is displayed to two (2) decimal places.

🔸 Data.AmTable.AmLines[].EndBal

TypeRequiredValues
StringyesCurrency

The principal balance amount, after the amortization event has taken place.


Adjustable Rate Mortgages (ARMs)

An adjustable rate mortgage is a loan whose interest rate varies during the repayment term. These types of loans are most often found in the real estate market, hence their name. In this chapter, we will refer to adjustable rate mortgages as ARMs.

Sample Request

The following example is a request for an ARM loan with proceeds of $10,000, interest will accrue at a teaser rate of 4.0% for a term of 12 months, after which the rate will adjust annually to the index + margin of 8.0%, with a maximum annual rate increase of 2.0%. The interest accrual method requested is unit period / 365 U. S. Rule accrual method (accrual code 302).

{
  "Module" : "Arm",
  "Data" : {
    "CalcType" : "Payments",
    "LoanDate" : "2022-11-15",
    "PmtDate" : "2023-01-01",
    "Proceeds" : "10000.00",
    "Term" : "120",
    "PPY" : "monthly",
    "TeaserTerm" : "12",
    "TeaserRate" : "4.000",
    "Index" : "6.00",
    "Margin" : "2.00",
    "TermStep" : "12",
    "AnnualRateIncrease" : "2.00",
    "Settings" : {
      "AccrualCode" : "302"
    }
  }
}

Sample Response

The following example is the response returned from the SCE for the request provided at the beginning of the previous section.

{
  "Result" : 200,
  "Module" : "Arm",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Results" : {
      "Number of Groups" : "3"
    },
    "FedBox" : {
      "AmtFin" : "10000.00",
      "FinChg" : "3930.08",
      "TotPmts" : "13930.08",
      "APR" : {
        "Value" : "6.778",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Principal" : "10000.00",
      "Interest" : "3930.08"
    },
    "Accrual" : {
      "Method" : "Unit Period 365 US Rule",
      "Days1Pmt" : "47",
      "DayCount" : "Actual",
      "Maturity" : "2032-12-01"
    },
    "PmtStreams" : [
      {
        "Term" : "12",
        "Pmt" : "101.43",
        "Rate" : "4.000",
        "Begin" : "2023-01-01"
      },
      {
        "Term" : "12",
        "Pmt" : "110.29",
        "Rate" : "6.000",
        "Begin" : "2024-01-01"
      },
      {
        "Term" : "96",
        "Pmt" : "118.64",
        "Rate" : "8.000",
        "Begin" : "2025-01-01"
      }
    ],
    "AmTable" : {
      "GrandTotals" : {
        "PmtTot" : "13930.08",
        "IntTot" : "3930.68",
        "PrinTot" : "9999.40"
      },
      "SubTotals" : [
        {
          "Year" : "2023",
          "Start" : "1",
          "Events" : "12",
          "PmtSub" : "1217.16",
          "IntSub" : "403.71",
          "PrinSub" : "813.45"
        },
        ...,
        {
          "Year" : "2032",
          "Start" : "109",
          "Events" : "12",
          "PmtSub" : "1423.68",
          "IntSub" : "59.89",
          "PrinSub" : "1363.79"
        }
      ],
      "AmLines" : [
        {
          "Idx" : "1",
          "Date" : "2023-01-01",
          "BegBal" : "10000.00",
          "Pmt" : "101.43",
          "Int" : "51.51",
          "Prin" : "49.92",
          "EndBal" : "9950.08"
        },
        {
          "Idx" : "2",
          "Date" : "2023-02-01",
          "BegBal" : "9950.08",
          "Pmt" : "101.43",
          "Int" : "33.17",
          "Prin" : "68.26",
          "EndBal" : "9881.82"
        },
        ...,
        {
          "Idx" : "120",
          "Date" : "2032-12-01",
          "BegBal" : "118.45",
          "Pmt" : "118.64",
          "Int" : "0.79",
          "Prin" : "117.85",
          "EndBal" : "0.60"
        }
      ]
    }
  }
}

ARM Loan Module - Request

The fields of the Data object supported by a Arm module request are defined in alphabetical order below:

ObjectFields
🟥 Data🔹AdjFirstInc, 🔹AmortTerm, 🔸AnnualRateIncrease, 🔹BlendedIntOnly, 🔹CalcType, 🔹Country, 🔹ExemptPostTeaserMax, 🔹ExemptTeaserMax, 🔹ExemptPostTeaserMin, 🔹ExemptTeaserMin, 🔹FirstRateIncrease, 🔹ForceTeaserSegment, 🔸Index, 🔹InterestPmtRate, 🔹InterestPmts, 🔹IntStartDate, 🔸LoanDate, 🔹Margin, 🔹MaxRate, 🔹MaxRateIncrease, 🔹MinRate, 🔸PmtDate, 🔹PPY, 🔸Proceeds, 🔹Round, 🔹RoundRate, 🔹StairStepDown, 🔸TeaserRate, 🔸TeaserTerm, 🔹Term, 🔸TermStep, 🔹TotalDown, 🔹UseMarginAsMin
|- 🟦 Apr🔹MAPR_Max, 🔹Method, 🔹UseMAPR
|- 🟦 Construction🔹HalfCommitment, 🔹PPY, 🔸Rate, 🔸Term
|- 🟦 Fees[]🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost,🔹MAPR, 🔹Max, 🔹Min, 🔹Name
|- 🟦 Format🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator
|- 🟦 MI🔹CashDown, 🔹LoanAmt, 🔸PropertyValue, 🔹Type
|- |- 🟦 Periodic🔹DropLTV, 🔹Term, 🔹WarnLTV
|- |- 🟥 Rates[]🔸Rate, 🔹Switch
|- |- 🟦 UpFront🔹Paid, 🔹Reduce, 🔹Units, 🔹Value
|- 🟦 ODI🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI
|- 🟦 Protection🔹Birthday1, 🔹Birthday2, 🔹Financed, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps
|- |- 🟦 Disability🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table
|- |- 🟦 Life🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates
|- |- 🟦 Unemployment🔹Benefit, 🔹Covers, 🔹CovTerm
|- 🟦 Settings🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY
|- |- 🟦 TILARESPA2015MaxPnIDetails, MinPnIDetails

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹AdjFirstInc, 🔹AmortTerm, 🔸AnnualRateIncrease, 🔹BlendedIntOnly, 🔹CalcType, 🔹Country, 🔹ExemptPostTeaserMax, 🔹ExemptTeaserMax, 🔹ExemptPostTeaserMin, 🔹ExemptTeaserMin, 🔹FirstRateIncrease, 🔹ForceTeaserSegment, 🔸Index, 🔹InterestPmtRate, 🔹InterestPmts, 🔹IntStartDate, 🔸LoanDate, 🔹Margin, 🔹MaxRate, 🔹MaxRateIncrease, 🔹MinRate, 🔸PmtDate, 🔹PPY, 🔸Proceeds, 🔹Round, 🔹RoundRate, 🔹StairStepDown, 🔸TeaserRate, 🔸TeaserTerm, 🔸Term, 🔸TermStep, 🔹TotalDown, 🔹UseMarginAsMin

Objects: 🟦 Apr, 🟦 Construction, 🟦 Fees[], 🟦 Format, 🟦 MI, 🟦 ODI, 🟦 Protection, 🟦 Settings

The fields of the Data object supported by an Equal Pmt module request are defined in alphabetical order below:

🔹 Data.AdjFirstInc

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is false, then the first rate increase following the teaser term is equal to annual rate increase. If true, then the first rate increase following the teaser term is equal to periodic rate increase (see TermStep).

🔹 Data.AmortTerm

TypeRequiredValuesDefault
StringnoInteger >= Term0

The value of the AmortTerm field contains the desired amortization term (specified as the number of payments) to be used to compute the regular payment. The amortization term must be greater than the balloon loan term (e.g. Term), or else the balloon loan will not be able to be computed.

🔸 Data.AnnualRateIncrease

TypeRequiredValues
StringyesNumber in [-99.999...600]

Just how much the interest rate increases when a rate increase is due depends upon this field, in conjunction with the TermStep field. In our example, the annual rate increase is specified as 2%, with rate adjustments every twelve monthly payments. Thus, each rate adjustment will see the interest rate increase by 2%.

🔹 Data.BlendedIntOnly

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Blended interest only payments do not consider the initial stream of interest payments to be outside the scheme of rate increases. For example, if the value of this field is set to true with InterestPmts set to 12 and TeaserTerm set to 48, the payment stream resulting will be 12 interest only payments followed by 36 principal and interest payments (and the rest of the tiered P&I payments). If set to false, then the payment stream would be 12 interest only payments (accrued at a rate determined by the InterestPmtRate field) followed by 48 P&I payments.

If the value of this field is set to true, then the InterestPmtRate field is ignored. Please note that blended interest only payments are not allowed with ARM loans computed using a CalcType of Balloon.

🔹 Data.CalcType

TypeRequiredValuesDefault
StringnoPayments, BalloonPayments

This field specifies how the payment stream is adjusted for rate changes during the term of the loan. If this field holds a value of Payments, then the disclosed payment will change with each rate change. A value of Balloon indicates that the payment computed for the teaser term will be used for all but the last payment, with the final payment equal to the amount needed to pay off the loan.

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

This field allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see the Countries Appendix for the list of supported countries and their associated codes.

Specifying the Country will also set the default value for the APR.Method and Format.CurrencyDecimals fields, as appropriate for the country specified.

🔹 Data.ExemptPostTeaserMax

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field determines whether or not the post teaser rate (if one has been specified) is excluded from the maximum rate constraint (see MaxRate). If the value of this field is set to true, then the post teaser rate may be greater than the specified maximum rate. If the value of this field is set to false, then the rate during the post teaser term can not be greater than the specified maximum rate.

🔹 Data.ExemptTeaserMax

TypeRequiredValuesDefault
Booleannotrue, falsetrue

This field determines whether or not the teaser rate is excluded from the maximum rate constraint (see MaxRate). If the value of this field is set to true, then the teaser rate may be greater than the specified maximum rate. If the value of this field is set to false, then rate during the teaser term can not be greater than the specified maximum rate.

🔹 Data.ExemptPostTeaserMin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field determines whether or not the post teaser rate (if one has been specified) is excluded from the minimum rate constraint (see MinRate). If the value of this field is set to true, then the post teaser rate may be less than the specified minimum rate. If the value of this field is set to false, then the rate during the post teaser term can not be less than the specified minimum rate.

🔹 Data.ExemptTeaserMin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field determines whether or not the teaser rate is excluded from the minimum rate constraint (see MinRate). If the value of this field is set to true, then the teaser rate may be less than the specified minimum rate. If the value of this field is set to false, then the rate during the teaser term can not be less than the specified minimum rate.

🔹 Data.FirstRateIncrease

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]0

If the value contained in this field is greater than zero and less than or equal to ten, then the first rate adjustment (which occurs at the conclusion of the teaser term) for the first TermStep number of payments will be in this amount. After that, the rate will adjust as described in AnnualRateIncrease. Note that this adjustment is always from the teaser rate towards the sum of the specified index and margin. Thus, if the sum of the index and margin is greater than the teaser rate, then the teaser rate will increase by the specified value. Similarly, if the sum of the index and margin is less than the teaser rate (and if rates are allowed to stair step down [see the StairStepDown field]), then the rate will decrease by the specified value.

Note that the calling application may specify either the FirstRateIncrease or the PostTeaserRate (see below), but not both.

🔹 Data.ForceTeaserSegment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the ARM loan has a constant rate over the term of the loan, should the teaser term portion of the loan be disclosed as a separate payment stream?

🔸 Data.Index

TypeRequiredValues
StringnoNumber in [-99.999...600]

This field holds the current value of the rate index at loan closing. When added together with the value of the Margin field, it produces the interest rate for the loan.

🔹 Data.InterestPmtRate

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]0

If this loan has interest only payments preceding the ARM loan (i.e. the value contained in the InterestPmts field is greater than zero), then this field determines the interest rate charged during the interest only payment stream if the BlendedIntOnly field is false.

If no interest only payments precede the irregular loan, or if the interest only payments are blended (e.g BlendedIntOnly is set to true), then this element need not be specified and will be ignored if present.

🔹 Data.InterestPmts

TypeRequiredValuesDefault
StringnoInteger0

If present, this field determines the number of interest only payments made at the start of the ARM loan. After the specified number of interest only payments are made, then the loan continues with P&I payments.

🔹 Data.IntStartDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDsame value as LoanDate

This field contains the date on which interest begins to accrue on the loan's principal balance. If this field is not specified, then the interest start date is set equal the loan date. Also note that the interest start date must be equal to the loan date when computing a construction loan.

The interest start date (when specified) must be on or after the loan date, as well as on or before the first payment date.

🔸 Data.LoanDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field holds the date on which the loan amount is disbursed and interest begins to accrue. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.Margin

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]0

As noted in the documentation for the Index field, the Margin is closely tied with the Index, and represents the difference between the interest rate and index rate. The lender determines the margin at the time of loan closing, and it remains fixed for the duration of the loan.

🔹 Data.MaxRate

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]0

This is another optional field which allows the calling application to specify an absolute interest rate maximum during the term of the ARM. If the interest rate ever exceeds this rate maximum, then it will be capped at this value. If left unspecified (or zero), then no absolute rate maximum will be enforced.

Note that there are three different ways to specify interest rate maximums: (i) Index + Margin, (ii) TeaserRate + MaxRateIncrease, and (iii) MaxRate.

🔹 Data.MaxRateIncrease

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]0

This optional field allows the calling application to specify a maximum value that the interest rate may increase from the specified teaser rate, during the term of the loan. If an interest rate adjustment would exceed the maximum rate increase, then the interest rate will be capped at a value equal to the teaser rate plus the maximum rate increase. If left unspecified (or zero), then no maximum rate increase will be enforced.

🔹 Data.MinRate

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]0

The contents of this optional field allow you to specify a minimum interest rate for the ARM. Should the interest rate ever dip below this value, then the minimum rate specified will be used instead. If left unspecified (or zero), then no rate minimum will be enforced.

🔸 Data.PmtDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field specifies the first (and for single payment notes, only) payment date in the loan's repayment schedule. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.PostTeaserRate

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]0

Instead of specifying a first rate adjustment using the FirstRateIncrease field above, the calling application can instead specify an interest rate that applies following the teaser term. This will allow for loans with a teaser rate, followed by a post teaser rate less than the teaser rate, which will then adjust to the sum of the index and margin greater than the teaser rate.

Note that the calling application may either specify the FirstRateIncrease (see above) or the PostTeaserRate, but not both.

🔹 Data.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for payments per year, and determines the payment frequency for the requested loan. The default value of 12 will result in a loan with 12 payments per year. If you require a loan with a payment frequency other than monthly, specify it using this field.

🔸 Data.Proceeds

TypeRequiredValues
StringyesCurrency > 0

The proceeds specified indicate the amount of money the borrower is requesting, and does not include financed fees, financed insurances, etc.

🔹 Data.Round

TypeRequiredValuesDefault
Stringnoup, down, nearestnearest

If a value is specified for the RoundRate field (see below), then the value of this field determines how the rounding will be performed.

🔹 Data.RoundRate

TypeRequiredValuesDefault
StringnoNumber0

If the value of this field is greater than zero, then the sum of the specified index and margin (i.e. the sum of the unrounded values specified in the response) will be rounded according to this value and the Round field defined above.

As an example, if the sum of the specified index and margin is 5.01 and the value of this element is 0.125 (1/8th of a percent), then the computed index + margin will be rounded to either 5.0 or 5.125 depending upon the value of the Round field specified.

If no value is specified for this element, then no rounding of the index plus margin (nor any other rates) will occur.

🔹 Data.StairStepDown

TypeRequiredValuesDefault
Booleannotrue, false, defaultdefault

If the final rate is less than the teaser rate, a value of false will keep the rate at the teaser rate for the duration of the loan. If your institution allows the rate to decrease below the teaser rate over the term of the loan, then set the value of this field to true. A default value instructs the SCE to use the value stored in the setup file.

🔸 Data.TeaserRate

TypeRequiredValues
StringyesNumber in [-99.999...600]

The teaser rate is the interest rate initially applied to the loan during the TeaserTerm. These rates are in effect for a given number of payments (see TeaserTerm below), after which regular rate adjustments will take place during the life of the loan. In our sample above, the teaser rate is set to 4%.

🔸 Data.TeaserTerm

TypeRequiredValues
StringyesInteger

This field specifies the number of payments that the TeaserRate (see above) is in effect. No interest rate increase will take place during the teaser term. In our sample above, the teaser rate of 4% is applicable for the first twelve months of the loan. After the twelfth payment, the rates will be adjusted as dictated to the Index + Margin.

🔸 Data.Term

TypeRequiredValues
StringyesInteger > 1

The Term field indicates the the number of payments to be made at the specified payment frequency (see the PPY field above), after which the loan is scheduled to be paid off.

🔸 Data.TermStep

TypeRequiredValues
StringyesInteger

This field specifies the number of payments between interest rate increases after the teaser term has passed. In our sample above, the teaser term is 12 months, with a term step of 12 months. This means that the first 12 months will use the teaser rate as the interest rate. Then, the next twelve months will use an increased rate, with the next twelve months increasing the rate again, etc.

If the value of this field is greater than the number of payments per year, then any value is valid, and the rate increase per step is equal to the annual rate increase.

If the value of this field is less than or equal to the number of payments per year, then the value of the TermStep field must evenly divide the number of payments per year. In this case, the rate increase per step is equal to the annual rate increase multiplied by the term step divided by the number of payments per year.

🔹 Data.TotalDown

TypeRequiredValuesDefault
StringnoCurrency > 00

This optional field represents the total down payment that the borrower has applied to reduce the requested proceeds. It may consist of a cash down payment, net trade-in value, or rebate. You only need to specify a total down payment if the loan needs to disclose a total sale price. Typical examples of these loan types are auto and boat loans.

🔹 Data.UseMarginAsMin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the MinRate field is not present in the request and the value of this field is true, then the value of the Margin field will be treated as the specified minimum rate for all purposes, including the TILA RESPA 2015 disclosures.


🟦 Data.Apr

TypeRequired
Objectno

Settings related to the computed effective rate returned by the SCE (most commonly, the Regulation Z APR in the United States of America) are contained in the fields of this object.

Fields: 🔹MAPR_Max, 🔹Method, 🔹UseMAPR

Objects: None

🔹 Data.Apr.MAPR_Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]36.0

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this field.

🔹 Data.Apr.Method

TypeRequiredValuesDefault
Stringnodefault, actuarial, eu, ca, xirr, xirr360, irrdefault

This field allows the calling application to specify an APR calculation method which will override the default value found in the setup file for the given Account. If this field is set to a valid value, then the specified method will be used to compute the APR for this loan calculation.

If the Country field has been set by the calling application and this field is not set, then the APR method used will be determined by the specified country. For the United States of America, the default APR method is actuarial. For a country in the European Union, the default value is eu (European Union APR). For Canada, the default APR method is ca (Canadian APR).

The xirr value implements the internal rate of return method as implemented in Microsoft\textregistered Excel via the XIRR() function, and is based on an actual day calendar with a 365 day divisor.

The xirr360 value implements the internal rate of return method based upon a unit period calendar with a 360 day divisor.

The irr value implements a common spreadsheet internal rate of return method which assumes strict regular periods. Deviating from a strict regular periodicity may produce unreliable results.

If this field is not specified and the Country field is not specified, then the value of default will be used which informs the SCE to use the APR method defined in the setup file for the specified Account.

🔹 Data.Apr.UseMAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will compute the Military APR in addition to the Regulation Z APR. The MAPR object will be included in the loan response.


🟦 Data.Construction

TypeRequired
Objectno

The Construction object determines if this loan is a construction to permanent loan request. If you wish to compute a construction loan without an attached permanent loan, you will need to use either the Construction or Loan modules.

Fields: 🔹HalfCommitment, 🔹PPY, 🔸Rate, 🔸Term

Objects: None

🔹 Data.Construction.HalfCommitment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

During the term of the construction loan, the estimated interest for disclosure purposes may be either computed on the full or half commitment amounts. By setting this field to true, interest will be estimated using half of the initial commitment amount (i.e. the principal balance). The default value of false will cause interest to be estimated using the entire initial commitment amount.

🔹 Data.Construction.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

The PPY field allows the calling application to specify the payment frequency during the construction period. The default value of 12 will result in a construction loan with 12 payments per year. If you require a payment frequency during the construction period other than monthly, then specify it using this field. Note that the permanent loan's payment frequency may differ from the construction period's payment frequency.

🔸 Data.Construction.Rate

TypeRequiredValues
StringyesNumber in [-99.999...600]

This field determines the rate applied to the appropriate commitment amount during the term of the construction loan.

🔸 Data.Construction.Term

TypeRequiredValues
StringyesInteger > 0

The term of the construction loan (in payments) is specified using this field. Please note that the term may not exceed five years.


🟦 Data.Fees[]

TypeRequired
Array of Fee Objectsno

This array of Fee objects allows the calling application to specify one ore more Fee objects to be included with the loan.

Fields: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name

Objects: None

🔹 Data.Fees[].AddToFinChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be included in the computed Finance Charge (and hence, affect the APR), then set this field to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 Data.Fees[].AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this field to true. If set to false, then the fee is paid up front out of the borrower's pocket.

🔹 Data.Fees[].Adjust

TypeRequiredValuesDefault
StringnoCurrency0

The optional Adjust field allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This field has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCE is as follows:

{
  "Fees" : [
    {
      "Name" : "TN Fee",
      "CalcType" : "OnAmtFin",
      "Adjust" : "-2000.00",
      "Entry" : "0.115",
      "AddToPrin" : true,
      "AddToFinChg" : false
    }
  ]
}

🔹 Data.Fees[].CalcType

TypeRequiredValuesDefault
StringnoDollar, OnProceeds, OnPrincipal, OnAmtFinDollar

This field specifies how the fee is to be computed, as described in the following table.

Fee Calc TypeDescription
DollarThe Entry field is understood as a flat dollar amount.
OnProceedsThe Entry field is understood as a percentage value, to be applied to the loan's proceeds, defined as the sum of advances. An Entry of 0.25 would represent a fee of 0.25% of the total proceeds.
OnPrincipalThe Entry field is understood as a percentage value, to be applied to the loan's principal balance. An Entry of 0.125 would represent a fee of 0.125% of the principal balance.
OnAmtFinThe Entry field is understood as a percentage value, to be applied to the loan's Regulation Z Amount Financed. An Entry of 0.33 would represent a fee of 0.33% of the amount financed.

🔹 Data.Fees[].Entry

TypeRequiredValuesDefault
StringnoNumber >= 00

How this field is interpreted depends upon the Fee.CalcType field. Please see the documentation for this field for further information.

🔹 Data.Fees[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which fees need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.Fees[].MAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this field to true.

Fees which are added to the finance charge (e.g. "AddToFinChg" : true) are always considered MAPR fees, regardless of the stated value of this field.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Data.Fees[].Max

TypeRequiredValuesDefault
StringnoCurrency > 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Min

TypeRequiredValuesDefault
StringnoCurrency > 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value will be determined by the value of the Country field. For most countries, the default value is 2. If no country code is specified, then the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.MI

TypeRequired
Objectno

The MI object determines if this loan includes one of the supported types of mortgage insurance (MI): PMI or FHA. This object contains fields which further specify mortgage insurance options.

Fields: 🔹CashDown 🔹LoanAmt, 🔸PropertyValue, 🔹Type

Objects: 🟦 Periodic, 🟥 Rates[], 🟦 UpFront

🔹 Data.MI.CashDown

TypeRequiredValuesDefault
StringnoCurrency >= 00

The CashDown field represents a cash down payment made at closing. If specified and greater than zero, this amount will be deducted from the principal balance. If not specified, the cash down payment will default to zero.

🔹 Data.MI.LoanAmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

This field represents the amount by which the PMI rates are multiplied to produce a level PMI premium. If not specified, then the principal balance will be used to compute the annual premium.

🔸 Data.MI.PropertyValue

TypeRequiredValues
StringyesCurrency >= 0

This field's value represents the appraised property value, and will be used in the calculation of the loan to value ratio.

🔹 Data.MI.Type

TypeRequiredValuesDefault
Stringnofha, pmipmi

This field determines the type of mortgage insurance to include with the loan. If the value of this field is set to fha, then a different MI premium is computed every twelve months based upon the average outstanding principal balance during that same term. The MI calculation adheres strictly to the HUD regulation.

If the value of this field is set to pmi, then each defined MI rate produces a level MI premium based upon the inital loan amount.


🟦 Data.MI.Periodic

TypeRequired
Objectno

The fields of this object determine the conditions when MI is no longer included.

Fields: 🔹DropLTV, 🔹Term, 🔹WarnLTV

Objects: None

🔹 Data.MI.Periodic.DropLTV

TypeRequiredValuesDefault
StringnoNumber >= 00

The value of this field determines the loan to value ratio at which MI should be removed, and is expressed as a percentage. For example, if you wish to automatically drop MI when the loan to value ratio first equals or falls below 78%, then you would specify "DropLTV" : "78.0".

🔹 Data.MI.Periodic.Term

TypeRequiredValuesDefault
StringnoInteger >= 00

The value of this field represents the the term (in payments) beyond which MI will be removed.

As an example, if mortgage insurance must be removed after the 180th payment, then the calling application should specify

{
  "MI" : {
    "Periodic" : { "Term" : "180"}
 }
}

🔹 Data.MI.Periodic.WarnLTV

TypeRequiredValuesDefault
StringnoNumber >= 00

The value of this field determines the loan to value ratio at which a warning should be issued, and is expressed as a percentage of LTV (loan to value). For example,if you wish to know when the loan to value ratio first equals or falls below 80%, then you would specify "WarnLTV" : "80.0".


🟥 Data.MI.Rates[]

TypeRequired
Array of Rate Objectsyes

This array if Rate objects defines the rates used to compute MI on the loan. There must be at least one Rate object in the Rates[] array, and there can be more than one if rates are set to switch at a specified payment number.

Fields: 🔸Rate, 🔹Switch

Objects: None

🔸 Data.MI.Rates[].Rate

TypeRequiredValues
StringyesNumber>= 0.0

The value of this field specifies the cost of mortgage insurance per $100 of the loan amount. As an example, a loan computed with a MI rate of $1.50 per $100 would be specified as

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"}
    ]
 }
}

🔹 Data.MI.Rates[].Switch

TypeRequiredValuesDefault
StringnoInteger >= 00

This optional field defines the payment number beyond which the associated MI rate will apply. If not specified, the value will default to zero.

Thus, if there is only a single MI rate, one may omit this field (see example above).

Example of a MI multiple rate structure (use a rate of $1.50 for the first 10 years, with a rate of $0.20 for coverage beyond 10 years):

{
  "MI" : {
    "Rates" : [
      { "Rate" : "1.50"},
      { "Rate" : "0.20" , "Switch" : "120"}
    ]
 }
}

🟦 Data.MI.UpFront

TypeRequired
Objectno

This object determines if there is an up front fee for mortgage insurance, and if so, how it is computer. If this object is not present in the request, then no up front fee will be computed. Note that ZOMP (zero option monthly premium) products do not have an up front fee, which means that this object should be omitted.

Fields: 🔹Paid, 🔹Reduce, 🔹Units, 🔹Value

Objects: None

🔹 Data.MI.UpFront.Paid

TypeRequiredValuesDefault
Stringnoatclosing, bylender, financedatclosing

If the value of this field is set to financed, then the computed up front fee will be added to the principal balance and the finance charge. A value of atclosing will cause the value of the fee to be added to the finance charge alone. Finally, a value of bylender means that the up front fee is to be paid by the lender, hence the value of the fee is not added to either the principal balance nor the finance charge.

🔹 Data.MI.UpFront.Reduce

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the specified number of periodic premiums to include as an up front fee is greater than zero, then this field determines if the term of coverage for PMI will be reduced by the same amount.

🔹 Data.MI.UpFront.Units

TypeRequiredValuesDefault
Stringnomonths, points, yearsmonths

If the Units field is set to months, then UpFront.Value represents the number of periodic MI premiums to be paid at closing.

If the Units field is set to Years, then UpFront.Value represents the number of annual MI premiums to be paid at closing. Many single premium products define the up front fee as a number of years of MI to be paid up front.

Finally, if the Units field is set to Points, then UpFront.Value represents the percentage of principal to be paid up front. As of October 3, 2011, FHA loans use points.

🔹 Data.MI.UpFront.Value

TypeRequiredValuesDefault
StringnoCurrency >= 00

If part of the MI fees are to be paid up front, then value of this field must be grater than zero. How the value of this field is interpreted depends upon the Units field (see below).

The default value of zero means that no up front fee will be computed.


🟦 Data.ODI

TypeRequired
Objectno

If odd days should be treated as a prepaid finance charge or added to the first payment in a manner different from how interest is accruing, then the request needs to define how odd days interest is computed and handled using the fields of this object.

Fields: 🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

Objects: None

🔹 Data.ODI.AccrualCode

TypeRequiredValuesDefault
Stringno204, 205, 210, 211, 220, 221, 230, 231, 250default

The accrual code defines how the odd days interest is computed. The meaning of the allowed accrual codes is defined below.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

Accrual CodeDescription
204True360/360
205True360/365
210Actual/360
211True365/360
220Actual/365
221True365/365
230Actual/Actual
231Midnight 366
250Actual/Variable Days Per Year

🔹 Data.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application wants the odd days interest to be added to the first payment, then set the value of this field to true. A value of false indicates that the odd days interest will be treated as a prepaid finance charge.

🔹 Data.ODI.AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If any odd days interest should be treated as a financed prepaid fee, then set the value of this field to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCE and the value of AddToPrin will be set to false.

🔹 Data.ODI.AnchorDate

TypeRequiredValuesDefault
StringnoBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This field determines how to arrive at the anchor date. A value of BackUnitPeriod means that the anchor date is one unit period prior to the specified first payment date. A value of BackDaysPerPeriod means that the anchor date is the number of days per period prior to the first payment date. Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 Data.ODI.ForceUnitPeriod

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Some unit period methods will not use a strict unit period interest accrual factor in the period to the first payment. For example, code 302 will count the days to the first payment and divide by 365. For a monthly loan, setting this field to true will use a 1/12 factor instead of Days/365.

🔹 Data.ODI.NoCap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When the odd days interest is financed, setting this field to true prevents interest from being computed on interest. The default is false, which means interest will be computed on interest.

🔹 Data.ODI.UseDailyCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 Data.ODI.UseNegODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If there are negative odd days in the loan, then the value of this field determines if a negative odd days interest fee is computed. If the value of this field is false, then negative odd days fees are not allowed, the SCE will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes and odd days interest credit) when there are negative odd days in a loan.


🟦 Data.Protection

TypeRequired
Objectno

The Protection object is used by the calling application to request one or more payment protection products (e.g. life, disability, involuntary unemployment, or personal property) be included in the loan calculation. Each of these products is requested by including its own child object, along with the borrower birthdays.

Fields: 🔹Birthday1, 🔹Birthday2, 🔹LineOfCredit, 🔹Mandatory, 🔹ShowBorrowerInfo, 🔹ShowCaps

Objects: 🟦 Disability, 🟦 Life, 🟦 Unemployment

🔹 Data.Protection.Birthday1

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the secondary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday2" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower2 or both.

🔹 Data.Protection.Birthday2

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This field holds the date of birth for the primary borrower. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a birthday of April 9, 1972 would be specified as "Birthday1" : "1972-04-09". Note that this element must be set if the Covers field of any of the four payment protection objects is set to borrower1 or both.

🔹 Data.Protection.Financed

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If the computed premiums for single premium debt protection products should be financed along with the proceeds, then this field should be set to true (which is the default value if not specified). A value of false indicates that the computed premiums will not be financed with the proceeds, and hence will be paid out of pocket by the borrower. Note that this applies to single premium insurance products only!

🔹 Data.Protection.LineOfCredit

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this is an account using TruStage's MOB insurance, and if this loan is a line of credit where product term caps should be ignored, then set this field to true. Otherwise, omit this field or set it to false.

🔹 Data.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is set to true, then any computed payment protection premium or fee will be considered a mandatory fee which will be included as a part of the Finance Charge, and hence affect the disclosed APR.

If the Mandatory field is set to false, then the loan will treat any premiums / fees as normal.

🔹 Data.Protection.ShowBorrowerInfo

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have data returned for each specified borrower instead of a single Term object, then set the value of this field to true. Otherwise, omit this field or set it to false. See the Borrower and Term objects defined in the response section for more information.

🔹 Data.Protection.ShowCaps

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application would like to have cap information (e.g. maximum terms, coverage amounts, ages, etc.) returned for each product offered, set the value of this field to true. Otherwise, omit this field or set it to false. See the Caps object defined in the response section for more information.


🟦 Data.Protection.Disability

TypeRequired
Objectno

The Disability object determines what type of disability coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm, 🔹Table

Objects: None

🔹 Data.Protection.Disability.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Disability.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Disability object altogether or specify a value of none.

🔹 Data.Protection.Disability.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Disability.Table

TypeRequiredValuesDefault
StringnoInteger in [0...19]0

If the specified account has been set up with multiple disability or debt cancellation plans, then this field determines which plan number will be used. If no table number is specified, the first table (table zero) will be used.


🟦 Data.Protection.Life

TypeRequired
Objectno

The Life object determines what type of life coverage is requested for the loan.

Fields: 🔹CovAmount, 🔹Covers, 🔹CovTerm, 🔹Dismemberment, 🔹Method, 🔹UseLevelRates

Objects: None

🔹 Data.Protection.Life.CovAmount

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a coverage amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum coverage amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified coverage amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Life.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Life object altogether or specify a value of none.

🔹 Data.Protection.Life.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.

🔹 Data.Protection.Life.Dismemberment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer life protection products with optional dismemberment coverage, and if the optional dismemberment coverage is desired, then set this field's value to true. Otherwise, use the default value of false.

🔹 Data.Protection.Life.Method

TypeRequiredValuesDefault
StringnoDefault, Gross, NetDefault

Some accounts are configured to offer different types of credit life products (usually gross and net). In these accounts, this field allows the calling application to specify which method to use for a given loan. If no method is present in the request, then the default method will be used.

🔹 Data.Protection.Life.UseLevelRates

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the account specified has been set up to offer single premium credit life using level rates instead of the normal decreasing rates, and if you wish to use level rates instead of decreasing, then set this field's value to true. Otherwise, use the default value of false.


🟦 Data.Protection.Unemployment

TypeRequired
Objectno

The Unemployment object determines what type of unemployment coverage is requested for the loan.

Fields: 🔹Benefit, 🔹Covers, 🔹CovTerm

Objects: None

🔹 Data.Protection.Unemployment.Benefit

TypeRequiredValuesDefault
StringnoCurrency >= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this field. Omitting this field will ensure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user-specified benefit amounts for the product in question, then this field will be ignored.

🔹 Data.Protection.Unemployment.Covers

TypeRequiredValuesDefault
Stringnonone, borrower1, both, borrower2borrower1

The value of this field determines what type of coverage is being requested on the loan. The values borrower1 and borrower2 represent single coverage on the appropriate borrower (whose birthdays are contained in appropriate Birthday objects described above). A request for joint coverage on both borrowers is indicated by a value of both. Finally, if no coverage is desired, simple omit the Unemployment object altogether or specify a value of none.

🔹 Data.Protection.Unemployment.CovTerm

TypeRequiredValuesDefault
StringnoInteger >= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this field. If this field is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this field will be ignored.


🟦 Data.Settings

TypeRequired
Objectno

The Settings object allows the calling application to alter the default loan calculation options.

Fields: 🔹Account, 🔹AccrualCode, 🔹ConMethod, 🔹DataPath, 🔹Lastday, 🔹PmtDollarRound, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

Objects: 🟦 TILARESPA2015

🔹 Data.Settings.Account

TypeRequiredValuesDefault
StringnoInteger in [1..9999]1

The Account field specifies the numeric setup file account number that will be used to compute the requested loan. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which may affect the loan calculation, such as the accrual method, insurance methods / rates / caps, etc.

🔹 Data.Settings.AccrualCode

TypeRequiredValuesDefault
Stringnosee tabledefault

The method of interest accrual is defined by this field. A value of default informs the SCE to use the interest accrual method defined in the setup file for the specified Account. All other valid accrual codes are described in the table below.

🔹 Data.Settings.ConMethod

TypeRequiredValuesDefault
Stringnodefault, simple, interestonlydefault

When computing a construction loan, there are two supported methods for computing interest during the constrcution period:

If the value of this field is simple, then the estimated construction interets will be computed and disclosed as a lup-sum prepaid fee (see the Moneys.ConstructInterest response field).

If the value of this field is interestonly, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

A value of default instructs the SCE to use the construction method specified in the setup file for the given account.

🔹 Data.Settings.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.Settings.Lastday

TypeRequiredValuesDefault
Booleannotrue, falseas configured in setup file

If present, this field overrides the Last Day setting in the setup files, which only applies to loans computed with an actual day accrual calendar where the first payment date falls at the end of a month with fewer than 31 days. As an example, if the first payment date is on April 30, should the following payment dates be made on the 30th of each month, or on the last day of the month?

If no value is specified for this field, then the setup file setting will be used. If true is specified, then conditions triggering a last day situation will result in payments which fall at the end of the month. A value of false indicates that when dictated, subsequent payment dates will not be moved to the last day of the month.

🔹 Data.Settings.OddFinal

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Following the last payment of an amortization schedule, the ending balance is unlikely to be zero due to the rounding of the payment. In order to assure perfect amortization, lenders will use an odd final payment to perfectly amortize the loan.

Set OddFinal to true to ensure perfect amortization with a payment that pays off the loan.

🔹 Data.Settings.PmtDollarRound

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Payments are normally rounded to the penny, according to the method specified by in the setup file, or vy theSettings.PmtRound field. If the payment should be rounded to the dollar instead of the penny, then set the value of this field to true.

Note that for some loans (such as those with longer terms or relatively small proceeds), rounding the payment up or to the nearest dollar may require a shortened loan term to prevent one or more negative payments at the end of the loan.

🔹 Data.Settings.PmtRound

TypeRequiredValuesDefault
Stringnodefault, nearest, up, down, bestdefault

How are calculated payments to be rounded at and beyond this event? best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen. default means that the setting should be configured as specified in the setup file.

🔹 Data.Settings.ShowAmTable

TypeRequiredValuesDefault
Booleannotrue, falsetrue

To supress the entire amortization schedule from the response, set value of this field to false; otherwise, the amortization schedule will be returned with the response.

🔹 Data.Settings.TILARESPA2015

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This setting can defined as a TILARESPA2015 object or as a boolean field, described here. If the Min and Max payments at each line of the amortization table need to be broken up into their principal and interest components, use the object version of this setting to request disclosure of these components.

If the value of this field is true, then the SCE will include data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015.

If the field is omitted or set to false, then the TILA RESPA outputs will not be generated.

As of the 2024-10 release, the TILARESPA2015 field may also be passed in as an object, with "TILARESPA2015" : {} equivalent to "TILARESPA2015" : true.

🔹 Data.Settings.YieldPPY

TypeRequiredValuesDefault
Stringno0, 2, 4, 6, 120

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than `0', this field determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this field with a value other than zero, the calling application must include an odd days prepaid fee in the request.


🟦 Data.Settings.TILARESPA2015

As of the 2024-10 release, the TILARESPA2015 field may also be passed in as an object, with "TILARESPA2015" : {} equivalent to "TILARESPA2015" : true.

The purpose of including TILARESPA2015 as an object, rather than a boolean field would be to include extra information with the maximum and minimum PnI payments.

Fields: MaxPnIDetails, MinPnIDetails

Objects: None

🔹 Data.Settings.TILARESPA2015.MaxPnIDetails

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the ARM loan specified a maximum lifetime interest rate (see MaxRate), and if the calling application requires the principal and interest breakdown for each MaxPnI payment returned in the amortization schedule, then set the value of this field to true.

Doing so will return MaxInt and MaxPrin fields of the AmLine object associated with each MaxPnI payment.

🔹 Data.Settings.TILARESPA2015.MinPnIDetails

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the ARM loan specified a minimum lifetime interest rate (see MinRate), and if the calling application requires the principal and interest breakdown for each MinPnI payment returned in the amortization schedule, then set the value of this field to true.

Doing so will return MinInt and MinPrin fields of the AmLine object associated with each MinPnI payment.


ARM Loan Module - Response

The Data object for a response from the Arm module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data🔹Country
|- 🟥 Errors[]
|- 🟥 Warnings[]
|- 🟦 Results🔸Number of Groups
|- 🟦 FedBox🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice
|- |- 🟥 APR🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type
|- |- 🟦 MAPR🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded
|- 🟦 TILARESPA2015🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP
|- |- 🟥 LoanCosts[]🔹Name, 🔹In5Years, 🔸Value
|- |- 🟥 In5Years🔸PaidTotal, 🔸PaidPrincipal
|- |- 🟥 MaxPnIPmt🔸Date, 🔸Amount
|- |- 🟥 MinRate🔸Rate, 🔸Idx
|- |- 🟥 MaxRate🔸Rate, 🔸Idx
|- |- 🟥 ProjectedPaymentsTable[]🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax
|- 🟦 Moneys🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹PMI_Fee, 🔹MinIntChgAdj, 🔹MinFinChgAdj
|- |- 🟦 ODI🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost
|- |- 🟦 Fees[]🔹Name, 🔸Fee
|- |- 🟦 Protection🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory
|- 🟦 Accrual🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity
|- 🟦 PMI🔸Rate, 🔸LTV, 🔸PremiumPerYear, 🔸PremiumPerPeriod, 🔹IndexToWarn, 🔹IndexToRemove
|- 🟦 PmtStreams[]🔸Term, 🔸Pmt, 🔹Rate, 🔸Begin
|- 🟦 Protection
|- |- 🟦 Life🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟦 Level🔸Result, 🔸Formula
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Disability🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- |- 🟥 Unemployment🔸Result, 🔸Formula, 🔸RateType
|- |- |- 🟥 Cost🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor
|- |- |- 🟥 Coverage🔸Amount, 🔸Note
|- |- |- 🟥 Benefit🔸Amount, 🔹Periodic, 🔸Note
|- |- |- 🟦 Term🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower1🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Borrower2🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note
|- |- |- 🟦 Caps🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge
|- 🟦 AmTable🔹Months, 🔹Weeks, 🔹OddDays
|- |- 🟦 GrandTotals🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot, 🔹PMITot
|- |- 🟦 SubTotals[]🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub, 🔹PMISub
|- |- 🟥 AmLines[]🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹PMI, 🔹UnpaidInt, 🔸EndBal, 🔹MinPnI, 🔹MinInt, 🔹MinPrin, 🔹MaxPnI, 🔹MaxInt, 🔹MaxPrin

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔹Country

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Results, 🟦 FedBox, 🟦 TILARESPA2015, 🟦 Moneys, 🟦 Accrual, 🟦 PMI, 🟦 PmtStreams[], 🟦 Protection, 🟦 AmTable

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

If the request specified a two-character or three-digit Country code, then this field will be present and will contain the full name of the country associated with the specified code. Please see the Countries Appendix for the list of supported countries and their associated codes.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Arm",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "Arm",
  "Data" : {
    "Errors" : [
      "Data.LoanDate (StringDate) not found.",
      "Data.PmtDate (StringDate) not found.",
      "Data.Term (StringInt) not found.",
      "Data.Proceeds (StringFloat) not found.",
      "Data.TeaserTerm (StringInt) not found.",
      "Data.TeaserRate (StringFloat) not found.",
      "Data.Index (StringFloat) not found.",
      "Data.TermStep (StringInt) not found.",
      "Data.AnnualRateIncrease (StringFloat) not found."
    ],
    "Warnings" : [
      "Data.Margin (StringFloat) not found.",
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

🟦 Data.Results

TypeRequired
Objectno

This field(s) of this object represent the most important numerical results for the loan request.

Fields: 🔸Number of Groups

Objects: None

🔸 Data.Results.Number of Groups

TypeRequiredValues
StringnoInteger

ARM loans are characterized by variable payment streams. The Number of Groups field reports the number of PmtStreams[] objects.


🟦 Data.FedBox

TypeRequired
Objectno

This object groups together all fields which contain important numerical information, as defined in the Truth-In-Lending laws (Regulation Z).

Fields: 🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice

Objects: 🟥 APR, 🟦 MAPR

🔸 Data.FedBox.AmtFin

TypeRequiredValue
StringyesCurrency > 0.0

The Regulation Z Amount Financed, which is defined as the amount of credit provided to the borrower or on their behalf.

🔸 Data.FedBox.FinChg

TypeRequiredValue
StringyesCurrency

This element contains the Regulation Z Finance Charge, described as the dollar amount the credit extension will cost the borrower.

🔸 Data.FedBox.TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

The amount which the borrower will have paid when the borrower has made all scheduled payments.

🔹 Data.FedBox.TotalSalePrice

TypeRequiredValue
StringyesCurrency > 0.0

The sum of the total of payments plus the total down payment. Please note that if no TotalDown field was included in the request, then this element will not be present.


🟥 Data.FedBox.APR

TypeRequired
Objectyes

The APR object contains fields which return the value and APR method used.

Fields: 🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type

Objects: None

🔸 Data.FedBox.APR.Value

TypeRequiredValue
StringyesNumber

The computed APR, which is the cost of the extension of credit expressed as a yearly rate.

🔹 Data.FedBox.APR.Max

TypeRequiredValueDefault
StringnoNumbern/a

This field returns the maximum APR as configured in the account's setup files. If no maximum APR has been specified, then this field will not be present in the response. The value of this field should be displayed as a percentage.

🔹 Data.FedBox.APR.MaxExceeded

TypeRequiredValueDefault
Booleannotrue, falsen/a

If a maximum APR is configured in the account's setup files, then the value of this field indicates whether or not the current loan exceeds the maximum APR. If no maximum APR has been specified, then this field will not be present in the response.

🔸 Data.FedBox.APR.Type

TypeRequiredValue
StringyesText

This field returns the APR method used to compute the reported APR.


🟦 Data.FedBox.MAPR

TypeRequired
Objectno

The MAPR (military APR) object is only returned with the response if the value of the Apr.UseMAPR request field is true.

Fields: 🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded

Objects: None

🔸 Data.FedBox.MAPR.Value

TypeRequiredValue
StringyesNumber

The computed military APR.

🔸 Data.FedBox.MAPR.Advance

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the equivalent of the Amount Financed for the Military APR. Specifically, it is the principal balance less any MAPR fees, debt protection, etc.

🔸 Data.FedBox.MAPR.Max

TypeRequiredValue
StringyesNumber

This field holds the maximum Military APR as specified in the input XML (see Apr.MAPR_Max). If not specified, a default value of 36% is assumed. The value of this field should be displayed as a percentage. As an example, for "Max" :"36.000", you would disclose a maximum Military APR of 36%.

🔸 Data.FedBox.MAPR.MaxExceeded

TypeRequiredValue
Booleanyestrue, false

The value of this field indicates whether or not the current loan exceeds the maximum allowed Military APR. As an example, if the maximum APR has been set to 36% and the Military APR for the returned loan was 37.125%, the MAPR object would be:

{
  "MAPR" : {
    "Value" : "37.125",
    "Advance" : "1350.00",
    "Max" : "36.000",
    "MaxExceeded" : true
 }
}


🟦 Data.TILARESPA2015

TypeRequired
Objectno

This object contains fields which are of interest to fulfilling the 2015 TILA RESPA rule. It will only be present if the Settings.TILARESPA2015 field in the request is set to true.

Fields: 🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP

Objects: 🟥 LoanCosts[], 🟥 In5Years, 🟥 MaxPnIPmt, 🟥 MinRate, 🟥 MaxRate, 🟥 ProjectedPaymentsTable[]

🔸 Data.TILARESPA2015.TotalLoanCost

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field is the sum of all borrower paid loan costs. Since all LoanCost values are rounded dollar amounts, the value of this element will also be a rounded dollar amount.

🔸 Data.TILARESPA2015.CD_TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the sum of the total of payments, all borrower paid loan costs, and any odd days interest that is prepaid at loan closing. This value should be disclosed on the Closing Disclosure form in the Total of Payments field.

🔸 Data.TILARESPA2015.TIP

TypeRequiredValue
StringyesNumber

The total interest percentage, rounded to three or fewer decimal places - as required.


🟥 Data.TILARESPA2015.LoanCosts[]

TypeRequired
Array of LoanCost Objectsyes

For every object in the Fees[] array present in the request which has its IsLoanCost field set to true (and hence, is a borrower paid loan cost) and whose amount is greater than zero (except odd days interest fee types, as explained in the previous documentation of the Fee and object), there will be a corresponding LoanCost object.

Fields: 🔹Name, 🔹In5Years, 🔸Value

Objects: None

🔹 Data.TILARESPA2015.LoanCosts[].Name

TypeRequiredValueDefault
StringnoTextn/a

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔹 Data.TILARESPA2015.LoanCosts[].In5Years

TypeRequiredValueDefault
StringnoCurrency >= 0Same as Value

If the entire amount of the fee is different from the amount collected over the first five years (for example, a service charge), then this field will be present and disclose the portion of this loan coast that is accrued during the first five years.

🔸 Data.TILARESPA2015.LoanCosts[].Value

TypeRequiredValue
StringyesCurrency >= 0

The value of this field is the numerical value of the fee, rounded to the nearest dollar.


🟥 Data.TILARESPA2015.In5Years

TypeRequired
Objectyes

This object contains all important values required for the new "In 5 Years" section of the disclosure.

Fields: 🔸PaidTotal, 🔸PaidPrincipal

Objects: None

🔸 Data.TILARESPA2015.In5Years.PaidTotal

TypeRequiredValue
StringyesCurrency >= 0

This field holds the sum of all "principal, interest, mortgage insurance, and borrower paid loan costs scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.

🔸 Data.TILARESPA2015.In5Years.PaidPrincipal

TypeRequiredValue
StringyesCurrency >= 0

This field holds "the principal scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.


🟥 Data.TILARESPA2015.MaxPnIPmt

TypeRequired
Objectyes

The fields of this object hold the maximum sceduled principal and interest payment during the term of the loan, as well as the date on which that payment is made.

Fields: 🔸Date, 🔸Amount

Objects: None

🔸 Data.TILARESPA2015.MaxPnIPmt.Date

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field returns the date on which the maximum scheduled principal and interest payment is made. If the maximum scheduled payment occurs more than once, then the date returned is that of the first instance.

🔸 Data.TILARESPA2015.MaxPnIPmt.Amount

TypeRequiredValue
StringyesCurrency >= 0

The maximum sceduled principal and interest payment during the term of the loan.


🟥 Data.TILARESPA2015.MinRate

TypeRequired
Objectyes

The fields of this object hold information regarding the minimum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MinRate.Rate

TypeRequiredValue
StringyesNumber

The value of the minimum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MinRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the minimum rate is first applicable.


🟥 Data.TILARESPA2015.MaxRate

TypeRequired
Objectyes

The fields of this object hold information regarding the maximum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MaxRate.Rate

TypeRequiredValue
StringyesNumber

The value of the maximum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MaxRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the maximum rate is first applicable.


🟥 Data.TILARESPA2015.ProjectedPaymentsTable[]

TypeRequired
Array of PPCol Objectsyes

Fields: 🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax

Objects: None

This field returns an Array of projected payment table columns (PPCol), with each array member detailing a single column. Per the regulation, there will be a minimum of one column and a maximum of four columns, depending upon the parameters of the loan.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Num

TypeRequiredValue
StringyesInteger in [1...4]

The value of this field identifies the number of the column to which the following fields apply. The value will be from 1 to 4.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Title

TypeRequiredValue
StringyesText

The value of this field is the title for the column. Most of the time, it will be in the form of Years X - Y, or Year X, or Final Payment in the case of a final balloon payment.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearStart

TypeRequiredValue
StringyesInteger

The beginning year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearEnd

TypeRequiredValue
StringyesInteger

The ending year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMin

TypeRequiredValue
StringyesCurrency > 0

The minimum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMax

TypeRequiredValue
StringyesCurrency > 0

The maximum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].IntOnly

TypeRequiredValue
Stringyesnone, some, all

If none of the payments associated with this column are interest only payments, then the value of this field will be none. A value of some means that some of the payments (but not all) associated with this columnt are interest only. Finally, a value of all indicates that all payments associated with this columnt are interest only.

Note that for the purposes of this field, a scheduled payment is considered an interest only payment if the payment amount pays off all interest due at the time of the payment, with no reduction in the principal balance.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Balloon

TypeRequiredValue
Booleanyestrue, false

If any of the payments associated with this column are balloon payments (e.g. isolated payments that are more than twice the value of a regular periodic payment), then the value of this field will be true.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].MIPmt

TypeRequiredValue
StringyesCurrency > 0

The value of this field holds the mortgage insurance premium associated with this column, rounded to the nearest dollar. If no mortgage insurance is present or coverage has been dropped, a value of zero will be present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMin

TypeRequiredValue
StringyesCurrency > 0

This field returns the minimum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMax

TypeRequiredValue
StringyesCurrency > 0

This field returns the maximum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.


🟦 Data.Moneys

TypeRequired
Objectno

This element groups together those other major cash result amounts not disclosed under the FedBox object, such as the principal balance, interest charge, and fee amounts.

Fields: 🔸Principal, 🔸Interest, 🔹ConstructInterest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹PMI_Fee, 🔹MinIntChgAdj, 🔹MinFinChgAdj

Objects: 🟦 ODI, 🟦 Fees[], 🟦 Protection

🔸 Data.Moneys.Principal

TypeRequiredValue
StringyesCurrency >= 0

The principal balance is the amount on which interest is accrued. The principal balance consists of all advances requested by the borrower, as well as any fees and/or protection products which are financed.

🔸 Data.Moneys.Interest

TypeRequiredValue
StringyesCurrency

This value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments.

🔹 Data.Moneys.ConstructInterest

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If the requested loan is a construction loan with a permanent loan attached and the account specified is set up to compute construction loans via the "Simple" method, then this field will contain the construction interest for the requested loan.

Note that if a permanent loan is attached to a construction loan and the account is set up to use the "LaserPro" method, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

If the requested loan is a construction loan without a permanent loan attached, then the construction interest will be disclosed in the Moneys.Interest field.

If the requested loan was not a construction loan, or if construction loans have not been set up for the given account, then this field will not appear in the response.

🔹 Data.Moneys.FinFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field contains the sum of all fees having AddToPrin set to true and occuring on the date of an advance. If this value is zero, the field will not appear in the response.

🔹 Data.Moneys.Prepaid

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field represents all prepaid finance charges and contains the sum of all fees occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will not be found in the response.

🔹 Data.Moneys.PocketFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are neither financed, nor added to the finance charge. In essence, they are paid out of the borrower's pocket. If no out of pocket fees were requested, then this field will not show up in the response.

🔹 Data.Moneys.MAPRFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are Military APR fees (including protection products), and will only appear if the Military APR has been requested.

🔹 Data.Moneys.PMI_Fee

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If PMI has been requested on the loan, and if a number of UpFront payments have been specified, then this field will return the total PMI fee for all up front payments.

🔹 Data.Moneys.MinIntChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum interest charge is configured in the account's setup files and the final payment was adjusted to meet this minimum interest charge, then this field will be returned in the response and will contain the value of the minimum interest charge adjustment.

🔹 Data.Moneys.MinFinChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum finance charge is configured in the account's setup files and the final payment was adjusted to meet this minimum finance charge, then this field will be returned in the response and will contain the value of the minimum finance charge adjustment.


🟦 Data.Moneys.ODI

TypeRequired
Objectno

This object, if present, contains information regarding odd days interest. If no odd days interest was requested, then this object will not be present in the response.

Fields: 🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost

Objects: None

🔹 Data.Moneys.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsen/a

If the odd days interest has been added to the first payment, then this field will be present in the response with a value of true. If the odd days interest has been treated as a prepaid finance charge, then this field will not be present and a default value of false should be assumed.

🔸 Data.Moneys.ODI.Count

TypeRequiredValues
StringyesInteger >= 0

Discloses the number of odd days computed by the SCE for the requested loan.

🔸 Data.Moneys.ODI.Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total amount odd days interest charge.

🔹 Data.Moneys.ODI.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field holds the number of odd months computed by the SCE for the requested loan when using odd days accrual method 250. If the odd days accrual method is a value other than 250, then this field will not be present in the ODI object of the response.

🔹 Data.Moneys.ODI.DailyCost

TypeRequiredValueDefault
StringnoCurrency >= 0.0n/a

If the odd days interest fee is computed using a rounded daily cost, then the value of this field will hold that value. If the odd days interest is not computed using a rounded daily cost, then this field will not be present in the response.


🟦 Data.Moneys.Fees[]

TypeRequired
Array of Fee Objectsno

If the requested loan included fees, then for each fee in the loan there will be a Fee object in this array containing the name of the fee and the computed fee amount.

If there were no fees requested with the loan, then the Moneys.Fees[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.Fees[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed fee amount.


🟦 Data.Moneys.Protection

TypeRequired
Objectno

This object returns summary information on all payment protection products computed with the loan. If no protection products were included with the loan, then this object will be omitted from the response.

Fields: 🔸Cost, 🔸PerPmt, 🔸PerDay, 🔸Category, 🔹IsDP, 🔹Mandatory

Objects: None

🔸 Data.Moneys.Protection.Cost

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total cost of all protection plans included with the computed loan. For the individual plan costs, see the Protection field described below.

🔸 Data.Moneys.Protection.PerPmt

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per payment.

🔸 Data.Moneys.Protection.PerDay

TypeRequiredValue
StringyesCurrency >= 0

The cost of all loan protection products expressed as dollars per day.

🔸 Data.Moneys.Protection.Category

TypeRequiredValues
StringyesNone, SP, MOB, TrueMOB, PaidSP

Te value of this field specifies the category under which the computed loan protection falls. The categories are described below:

CategoryDescription
NoneNo loan protection products were computed with this loan.
SPFinanced single premium coverage.
MOBMonthly outstanding balance coverage.
TrueMOBTruStage's monthly outstanding balance method.
PaidSPNon-financed single premium coverage.

🔹 Data.Moneys.Protection.IsDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field indicates if the specified account's protection is set up as debt protection. If this field is not present, then the default value of false should be used (which indicates that the account's protection is set up as insurance instead).

🔹 Data.Moneys.Protection.Mandatory

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field should only appear in the response if the value of the is true. If this field does not appear in the output, then the value should default to false.

If the value of the Mandatory field is true, then the total premium / fee amount for all insurance / debt protection products has been treated as a part of the Finance Charge, and hence will affect the effective APR.


🟦 Data.Accrual

TypeRequired
Objectno

This object groups together interest accrual information, such as the accrual method(s) used, days to the first payment and the loan's maturity date.

Fields: 🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity

Objects: None

🔸 Data.Accrual.Method

TypeRequiredValues
StringyesText

The Method field contains a textual description of the interest accrual method used to compute the loan (e.g. "Unit Period 365 Simple".)

🔸 Data.Accrual.Days1Pmt

TypeRequiredValues
StringyesInteger >= 0

This field contains the number of days between the date of the first advance and the date of first payment, computed by one of two methods as specified in by Accrual.DayCount (below).

🔸 Data.Accrual.DayCount

TypeRequiredValues
StringyesTrue360, Actual

This field specifies the method used to compute the number of days from the date of the first advance until the first payment date. Actual means that the actual number of days between these two dates are used, whereas the True360 method use a 360 day calendar.

🔸 Data.Accrual.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

Holds the maturity date of the loan, which is the date on which the last payment is scheduled. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.PMI

TypeRequired
Objectno

The PMI object will only appear if PMI has been computed with the loan. Please note that the PMI premiums are not reflected in the amount reported in the the PmtStreams[] array, the FedBox.TotPmts field, nor the Pmt field of the AmLines[] objects.

Fields: 🔸Rate, 🔸LTV, 🔸PremiumPerYear, 🔸PremiumPerPeriod, 🔹IndexToWarn, 🔹IndexToRemove

Objects: None

🔸 Data.PMI.Rate

TypeRequiredValues
Stringyes% >= 0

The percentage rate used in the PMI calculation.

🔸 Data.PMI.LTV

TypeRequiredValues
Stringyes% >= 0

The loan to value ratio of the computed loan, expressed as a percentage.

🔸 Data.PMI.PremiumPerYear

TypeRequiredValues
StringyesCurrency >= 0

The annual PMI premium amount.

🔸 Data.PMI.PremiumPerPeriod

TypeRequiredValues
StringyesCurrency >= 0

The periodic PMI premium amount.

🔹 Data.PMI.IndexToWarn

TypeRequiredValuesDefault
StringnoInteger > 0n/a

This field only appears if the WarnLTV PMI input field is specified, and indicates that the payment index on which the remaining principal balance to home value ratio drops below the specified percentage.

🔹 Data.PMI.IndexToRemove

TypeRequiredValuesDefault
StringnoInteger > 0n/a

This field only appears if the DropLTV PMI input field is specified, and indicates that the payment index on which the remaining principal balance to home value ratio drops below the specified percentage. PMI coverage stops after this payment.


🟦 Data.PmtStreams[]

TypeRequired
Objectno

The PmtStreams[] array is made up of one or more PmtStream objects (there will always be at least one of these elements, and there may be more than one depending upon the loan type). The PmtStream objects describe the scheduled stream of payments for the computed loan. Instead of disclosing each and every payment individually (which can be done with the AmTable object), the payment stream groups together consecutive equal payments at the same interest rate to produce output along the lines of:

{
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "50.13",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "10",
        "Pmt" : "37.59",
        "Rate" : "4.500",
        "Begin" : "2022-11-01"
      },
      {
        "Term" : "1",
        "Pmt" : "10062.59",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ]
}

Each object describes a single stream of equal payments at the same interest rate, using the following fields to define the important properties of each payment stream.

Fields: 🔸Term, 🔸Pmt, 🔸Rate, 🔸Begin

Objects: Note

🔸 Data.PmtStreams[].Term

TypeRequiredValues
StringyesInteger >= 0

The Term field holds the number of payments that make up the given payment stream.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValues
StringyesCurrency > 0

The Pmt field holds the computed payment amount for this payment stream.

🔹 Data.PmtStreams[].Rate

TypeRequiredValues
StringyesNumber

Contains the interest rate used for the duration of this payment stream. If this payment stream accrued interest using split-rate tiers, then this field will not be returned.

🔸 Data.PmtStreams[].Begin

TypeRequiredValues
StringyesYYYY-MM-DD

This field identifies the date on which the first payment for this given payment stream is scheduled to be made. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.Protection

TypeRequired
Objectno

If protection products are requested, then this object will be present in the response, along with a field for each requested protection product.

Fields : None

Objects: 🟦 Life, 🟦 Level, 🟦 Disability, 🟦 Unemployment


🟦 Data.Protection.Life

TypeRequired
Objectno

If life protection was requested with the loan and decreasing life was configured for this loan type, then the Life object will be present in the response to return information on decreasing life coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Life.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Life.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Life.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Life.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Life.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Life.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Life.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Life.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Life.Cost.Premium2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary life product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Life.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Life.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Life.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Life.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Life.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Life.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Life.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Life.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Life.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Life.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Life.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Life.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Life.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Life.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Life.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.Term

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Life.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Level

TypeRequired
Objectno

If level protection was requested with the loan and decreasing level was configured for this loan type, then the Life object will be present in the response to return information on decreasing level coverage.

Fields: 🔸Result, 🔸Formula,

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Level.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Level.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🟦 Data.Protection.Level.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor, 🔹Premium2, 🔹PerPmt2, 🔹PerDay2, 🔹Factor2

Objects: None

🔸 Data.Protection.Level.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Level.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Level.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Level.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.

🔹 Data.Protection.Level.Cost.Premium2

TypeRequiredValuesDefault
StringyesCurrency >= 0n/a

The only time the Premium2 field will be present is when the account has been setup to use an ordinary Level product and the user has requested joint coverage. If this is the case, then the Premium2 field is provided so that the calling application can disclose two premiums instead of a single aggregate joint premium.

🔹 Data.Protection.Life.Cost.PerPmt2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per payment. See Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.PerDay2

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The cost of coverage for the secondary ordinary life borrower, expressed as currency per dey. Please see Cost.Premium2 above for further information.

🔹 Data.Protection.Life.Cost.Factor2

TypeRequiredValuesDefault
StringnoNumber >= 0n/a

The rate factor used to compute the premium for the secondary ordinary life borrower. Please see Cost.Premium2 above for further information.


🟦 Data.Protection.Level.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔸Note

Objects: None

🔸 Data.Protection.Level.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Level.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Level.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Level.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Level.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Level.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Level.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Level.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Level.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Level.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Level.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Level.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Level.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Level.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Level.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Disability

TypeRequired
Objectno

If disability protection was requested with the loan and decreasing disability was configured for this loan type, then the Life object will be present in the response to return information on decreasing disability coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Disability.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Disability.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Disability.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Disability.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Disability.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Disability.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Disability.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Disability.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Disability.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Disability.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Disability.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Disability.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Disability.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Disability.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Disability.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Disability.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Borrower2

TypeRequired
Objectno

The borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Disability.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Disability.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Disability.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Disability.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Disability.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Disability.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Disability.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Disability.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Disability.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Disability.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.Protection.Unemployment

TypeRequired
Objectno

If unemployment protection was requested with the loan and decreasing unemployment was configured for this loan type, then the Life object will be present in the response to return information on decreasing unemployment coverage.

Fields: 🔸Result, 🔸Formula, 🔸RateType

Objects: 🟦 Cost, 🟦 Coverage, 🟦 Term, 🟦 Borrower1, 🟦 Borrower2

🔸 Data.Protection.Unemployment.Result

TypeRequiredValues
StringyesText - See below

This field contains the calculation result for the requested protection product. If it contains a value of Valid Calculation, then the requested product was computed and factored into the loan. Parse the other fields and child objects for further details.

A value other than Valid Calculation means that the requested product was not computed with the loan, and the value describes why. In this case, there is no need to parse through the other fields or child objects, as the product was not computed.

🔸 Data.Protection.Unemployment.Formula

TypeRequiredValues
StringyesText - See table

The Formula field contains an abbreviated description of the formula used to compute the desired protection product. The formula codes are for the use of the J. L. Sherman and Associates, Inc. support team.

🔸 Data.Protection.Unemployment.RateType

TypeRequiredValues
StringyesFixed, Variable

This field will only be present in the response if the protection product has been configured to allow for coverage to switch from joint to single during the term of coverage, should one of the borrowers exceed an age at termination cap. If the field is not present, then a value of Fixed should be assumed as only one rate has been used in the protection calculation.

If this field is present, then there is the possibility that the rate used to compute the protection may have changed (in the case of coverage for one borrower ending while coverage for the other borrower continues). If this is the case, then the field will indicate this rate change with a value of Variable.


🟦 Data.Protection.Unemployment.Cost

TypeRequired
Objectyes

Fields of this object provide the cost of the protection product in total, per payment, and per day. It also provides the rate factor used to compute the premiums.

Fields: 🔸Premium, 🔸PerPmt, 🔸PerDay, 🔸Factor,

Objects: None

🔸 Data.Protection.Unemployment.Cost.Premium

TypeRequiredValues
StringyesCurrency >= 0

The total cost for this protection over the term of the loan.

🔸 Data.Protection.Unemployment.Cost.PerPmt

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per payment.

🔸 Data.Protection.Unemployment.Cost.PerDay

TypeRequiredValues
StringyesCurrency >= 0

The cost of coverage expressed as currency per dey.

🔸 Data.Protection.Unemployment.Cost.Factor

TypeRequiredValues
StringyesNumber >= 0

The rate factor used to compute the premium for the requested protection product.


🟦 Data.Protection.Unemployment.Coverage

TypeRequired
Objectyes

The aggregate coverage amount and note are provided in the following fields of this object:

Fields: 🔸Amount 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Coverage.Amount

TypeRequiredValues
StringyesCurrency >= 0

The aggregate coverage amount for this protection product.

🔸 Data.Protection.Unemployment.Coverage.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full coverage has been provided on the aggregate coverage, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Unemployment.Benefit

TypeRequired
Objectyes

The protection product's benefit amount and note are provided in the following fields of this object:

Fields: 🔸Amount, 🔹Periodic, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Benefit.Amount

TypeRequiredValues
StringyesCurrency >= 0

The monthly benefit amount for this protection product.

🔹 Data.Protection.Unemployment.Benefit.Periodic

TypeRequiredValues
StringnoCurrency >= 0

If the account has been configured to disclose periodic benefits (as opposed to monthly benefit amounts, which are returned in the Amount field described above), and if the specified payment frequency is other than monthly, then this field will be present and will hold the periodic benefit amount.

🔸 Data.Protection.Unemployment.Benefit.Note

TypeRequiredValues
StringyesText - See below

The Note field describes the type of coverage provided. If full coverage has been provided on the benefit, then the note will contain Full Coverage. Otherwise, the note will describe the type of partial coverage used.


🟦 Data.Protection.Unemployment.Term

TypeRequired
Objectno

The Term object provides the calling application with data about the term of coverage for the requested product. If the input request has specified "ShowBorrowerInfo" : true, then this object will not be present.

Fields: 🔸InMonths, 🔸InPmts, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Term.InMonths

TypeRequiredValues
StringyesInteger >= 0

Contains the term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Term.InPmts

TypeRequiredValues
StringyesInteger >= 0

Contains the number of payments covered.

🔸 Data.Protection.Unemployment.Term.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the maturity date for the requested coverage.

🔸 Data.Protection.Unemployment.Term.Note

TypeRequiredValues
StringyesText - See below

The Note field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Borrower1

TypeRequired
Objectno

The Borrower1 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Borrower1.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Unemployment.Borrower1.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Unemployment.Borrower1.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Unemployment.Borrower1.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Unemployment.Borrower1.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Borrower1.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Unemployment.Borrower1.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Borrower2

TypeRequired
Objectno

The Borrower2 object provides the calling application with data about the term of coverage of a borrower, for the requested product. Note that this object will only be present if the request has specified "ShowBorrowerInfo" : true, and a valid birthdate was provided.

Fields: 🔸Birthday, 🔸AgeAtIssue, 🔸AgeAtMaturity, 🔸Pmts, 🔸Months, 🔸Maturity, 🔸Note

Objects: None

🔸 Data.Protection.Unemployment.Borrower2.Birthday

TypeRequiredValues
StringyesYYYY-MM-DD

The birthday associated with the borrower, as specified in the request.

🔸 Data.Protection.Unemployment.Borrower2.AgeAtIssue

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at issue of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage begins.

🔸 Data.Protection.Unemployment.Borrower2.AgeAtMaturity

TypeRequiredValues
StringyesYYYY-MM-DD

If coverage is written on this borrower, then the value of this field represents the age at maturity of the borrower in a special date-like format of YYYY-MM-DD, where the borrower is YYYY years, MM months, and DD days old when coverage terminates.

🔸 Data.Protection.Unemployment.Borrower2.Pmts

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of payments.

🔸 Data.Protection.Unemployment.Borrower2.Months

TypeRequiredValues
StringyesInteger >= 0

The term of coverage expressed as a number of months.

🔸 Data.Protection.Unemployment.Borrower2.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The coverage maturity date for this particular borrower.

🔸 Data.Protection.Unemployment.Borrower2.Note

TypeRequiredValues
StringyesText - See below

The value of this field will describe the type of coverage provided. If full term coverage has been provided, then the note will contain Full Coverage. Otherwise, the note will describe the type of truncated coverage used.


🟦 Data.Protection.Unemployment.Caps

TypeRequired
Objectno

The Caps object provides the calling application with data about the maximum terms, amounts, and ages associated with the requested product. This object will only be present if the ShowCaps field of the Protection request object is set to true.

Fields: 🔸Cov, 🔸Ben, 🔸Term, 🔸InceptAge, 🔸AttainAge

Objects: None

🔸 Data.Protection.Unemployment.Caps.Cov

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum aggregate coverage amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.Ben

TypeRequiredValues
StringyesCurrency >= 0

Contains the maximum monthly benefit amount. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.Term

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum coverage term, expressed in months. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.InceptAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may be at loan inception, expressed in years. If no cap is present or applicable, then a value of zero is returned.

🔸 Data.Protection.Unemployment.Caps.AttainAge

TypeRequiredValues
StringyesInteger >= 0

Contains the maximum age a borrower may attain during the term of the loan, expressed in years. If no cap is present or applicable, then a value of zero is returned.


🟦 Data.AmTable

TypeRequired
Objectno

This object contains fields which summarize and describe the loan's amortization schedule. If Settings.ShowAmTable is set to false, then this object will not be found in the response.

Fields: 🔹Months, 🔹Weeks, 🔹OddDays

Objects: 🟦 GrandTotals, 🟦 SubTotals[], 🟥 AmLines[]

🔹 Data.AmTable.AvgBal

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the average balance of the loan used in the Canadian APR calculation.

🔹 Data.AmTable.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of months in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.Weeks

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of weeks in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.OddDays

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the number of odd days in the term of the loan used in the Canadian APR calculation. Odd days are computed by moving backwards from the maturity date the number of disclosed months or weeks, and then counting the additional number of days required to land on the loan date.

🟦 Data.AmTable.GrandTotals

TypeRequired
Objectno

This object describes the total amounts of various categories throughout the life of the loan. As an example, the total amount paid to interest and principal, as well as the total of payments are all contained in fields of this object.

Fields: 🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot, 🔹PMITot

Objects: None


🔸 Data.AmTable.GrandTotals.PmtTot

TypeRequiredValues
StringyesCurrency

The total of payments scheduled for the computed loan.

🔸 Data.AmTable.GrandTotals.IntTot

TypeRequiredValues
StringyesCurrency

The total amount paid to interest over the life of the loan, assuming all payments are made as scheduled.

🔸 Data.AmTable.GrandTotals.PrinTot

TypeRequiredValues
StringyesCurrency

This field contains the total amount paid to principal during the loan term, assuming all payments are made as scheduled.

🔹 Data.AmTable.GrandTotals.CLTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLTot field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life over the duration of the loan.

🔹 Data.AmTable.GrandTotals.AHTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHTot field will only appear on loans with certain types of disability or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.IUTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUTot field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.PMITot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The PMITot field will only appear on loans with PMI insurance where the PMI premiums were requested in the amortization schedule. It contains the total PMI amount paid (not including any up front periodic PMI premiums)for PMI over the duration of the loan.


🟦 Data.AmTable.SubTotals[]

TypeRequired
Array of SubTotal Objectsno

Describes the total amounts of various categories paid during a given calendar year. For each year in which the computed loan has scheduled payments, there will be a SubTotal object in the array.

Fields: 🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub, 🔹PMISub

Objects: None

🔸 Data.AmTable.SubTotals[].Year

TypeRequiredValues
StringyesInteger >= 0

The calendar year for which the subtotal data is applicable.

🔸 Data.AmTable.SubTotals[].Start

TypeRequiredValues
StringyesInteger >= 0

This field defines the first amortization event which falls in the specified calendar year. To find the AmLines[] object which corresponds to this value, match the Idx field of the AmLine object.

🔸 Data.AmTable.SubTotals[].Events

TypeRequiredValues
StringyesInteger >= 0

This field defines the number of amortization events which belong to this calendar year.

🔸 Data.AmTable.SubTotals[].PmtSub

TypeRequiredValues
StringyesCurrency

Contains the total of payments scheduled for the calendar year.

🔸 Data.AmTable.SubTotals[].IntSub

TypeRequiredValues
StringyesCurrency

Holds the total amount paid to interest over the calendar year, assuming all payments are made as scheduled.

🔸 Data.AmTable.SubTotals[].PrinSub

TypeRequiredValues
StringyesCurrency

Contains the total amount paid to principal during the calendar year, assuming all payments are made as scheduled.

🔹 Data.AmTable.SubTotals[].CLSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLSub field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life during the year.

🔹 Data.AmTable.SubTotals[].AHSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHSub field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection during the year.

🔹 Data.AmTable.SubTotals[].IUSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUSub field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for involuntary unemployment during the year.

🔹 Data.AmTable.SubTotals[].PMISub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The PMISub field will only appear on loans with PMI insurance where the PMI premiums were requested in the amortization schedule. It contains the total PMI amount paid (not including any up front periodic PMI premiums) for PMI during the year.


🟥 Data.AmTable.AmLines[]

TypeRequired
Array of AmLine Objectsyes

There is one AmLine object for each amortization event which occurs during the life of a loan. Most of the time, each event will describe a payment, and detail how that payment is applied (to interest, principal, loan protection products, etc.). Some events, such as capitalizing interest, will not have payments but will show how the loan amortizes.

Fields: 🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹PMI, 🔹UnpaidInt, 🔸EndBal 🔹MinPnI, 🔹MinInt, 🔹MinPrin, 🔹MaxPnI, 🔹MaxInt, 🔹MaxPrin

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValues
StringyesInteger >= 0

The index of the amortization event, which is either the payment number, or zero. A value of zero designates an event that is either not a payment or is a skipped payment.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The date on which the amortization event is scheduled to occur. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 AmData.AmTable.AmLines[]ine.BegBal

TypeRequiredValues
StringyesCurrency >= 0

The principal balance before the amortization event occurs.

🔸 Data.AmTable.AmLines[].Pmt

TypeRequiredValues
StringyesCurrency

The payment amount for this event.

🔸 Data.AmTable.AmLines[].Int

TypeRequiredValues
StringyesCurrency

The amount of interest paid at this event.

🔸 Data.AmTable.AmLines[].Prin

TypeRequiredValues
StringyesCurrency

The amount of principal paid at this event.

🔹 Data.AmTable.AmLines[].CL

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CL field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for life coverage.

🔹 Data.AmTable.AmLines[].AH

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AH field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for disability / debt protection coverage.

🔹 Data.AmTable.AmLines[].IU

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IU field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for this coverage.

🔹 Data.AmTable.AmLines[].PMI

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field contains the PMI premium for this payment, and will only show up if PMI has been computed for this payment and if PMI premiums should be displayed in the amortization schedule.

🔹 Data.AmTable.AmLines[].UnpaidInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear on an amortization line when interest has been accrued, but has not yet been paid or added to the principal balance. If the interest accrued has not yet been rounded, then the unpaid interest will be displayed to four (4) decimal placed. If rounded, then the unpaid interest is displayed to two (2) decimal places.

🔸 Data.AmTable.AmLines[].EndBal

TypeRequiredValues
StringyesCurrency

The principal balance amount, after the amortization event has taken place.

🔹 Data.AmTable.AmLines[].MinPnI

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

If the ARM loan specified a minimum lifetime interest rate (see MinRate), and if TILA RESPA data has been requested (using the Settings.TILARESPA2015 field), then this field will be present in each AmLine object that represents a payment. The value of this field represents the minimum principal and interest payment possible, should the index + margin rate trend towards the minimum lifetime rate after the teaser term has expired.

🔹 Data.AmTable.AmLines[].MinInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The value of this field represents the amount of the MinPnI payment which has been used to pay interest. This field will only be present if the MinPnI field is present and if the request included "TILARESPA2015.MinPnIDetails" : true.

🔹 Data.AmTable.AmLines[].MinPrin

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The value of this field represents the amount of the MinPnI payment which has been used to pay down the principal balance. This field will only be present if the MinPnI field is present and if the request included "TILARESPA2015.MinPnIDetails" : true.

🔹 Data.AmTable.AmLines[].MaxPnI

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

If the ARM loan specified a maximum lifetime interest rate (see MaxRate), and if TILA RESPA data has been requested (using the Settings.TILARESPA2015 field), then this field will be present in each AmLine object that represents a payment. The value of this field represents the maximum principal and interest payment possible, should the index + margin rate trend towards the minimum lifetime rate after the teaser term has expired.

🔹 Data.AmTable.AmLines[].MaxInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The value of this field represents the amount of the MaxPnI payment which has been used to pay interest. This field will only be present if the MaxPnI field is present and if the request included "TILARESPA2015.MaxPnIDetails" : true.

🔹 Data.AmTable.AmLines[].MaxPrin

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The value of this field represents the amount of the MaxPnI payment which has been used to pay down the principal balance. This field will only be present if the MaxPnI field is present and if the request included "TILARESPA2015.MaxPnIDetails" : true.


Construction Loans

Construction loans are multiple advance loans to finance construction of a dwelling that may be permanently financed by the same creditor either as a single transaction or as more than one transaction. This module should be used if the creditor chooses to disclose the construction phase separately. If the creditor chooses to disclose the construction and the permanent financing as one transaction, please see the Construction field for the appropriate Loan module which supports the permanent loan's repayment structure.

Sample Request

The following example is a request for a construction loan with no permanent loan attached, with a proceeds of $100,000, interest will accrue at a 4.5% rate using a unit period / 360 U. S. Rule accrual method (accrual code 301). There will be 11 monthly interest only payments with an additional final payment paying off the loan. As the schedule of advances are not known at this time and interest is only due on the outstanding balance, we will assume that half the commitment amount is outstanding during the term of the loan. Furthermore, we will ask the SCE to return the individual interest only payments instead of using the Simple method which returs a single lump sum interest amount.

{
  "Module" : "Construction",
  "Data" : {
    "LoanDate" : "2022-08-24",
    "PmtDate" : "2022-10-01",
    "IntRate" : "4.500",
    "Term" : "12",
    "PPY" : "12",
    "Proceeds" : "100000.00",
    "HalfCommitment" : true,
    "Settings" : {
      "AccrualCode" : "301",
      "ConMethod" : "InterestOnly"
    }
  }
}

Sample Response

The following example is the response returned from the SCE for the request provided at the beginning of the previous section.

{
  "Result" : 200,
  "Module" : "Construction",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Results" : {
      "Payment" : "100000.00"
    },
    "FedBox" : {
      "AmtFin" : "100000.00",
      "FinChg" : "2306.25",
      "TotPmts" : "102306.25",
      "APR" : {
        "Value" : "4.509",
        "Type" : "Actuarial"
      }
    },
    "Moneys" : {
      "Principal" : "100000.00",
      "Interest" : "2306.25"
    },
    "Accrual" : {
      "Method" : "Unit Period 360 US Rule",
      "Days1Pmt" : "38",
      "DayCount" : "Actual",
      "Maturity" : "2023-09-01"
    },
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "237.50",
        "Rate" : "4.500",
        "Begin" : "2022-10-01"
      },
      {
        "Term" : "10",
        "Pmt" : "187.50",
        "Rate" : "4.500",
        "Begin" : "2022-11-01"
      },
      {
        "Term" : "1",
        "Pmt" : "100193.75",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ],
    "AmTable" : {
      "GrandTotals" : {
        "PmtTot" : "102306.25",
        "IntTot" : "2306.25",
        "PrinTot" : "100000.00"
      },
      "SubTotals" : [
        {
          "Year" : "2022",
          "Start" : "1",
          "Events" : "3",
          "PmtSub" : "612.50",
          "IntSub" : "612.50",
          "PrinSub" : "0.00"
        },
        {
          "Year" : "2023",
          "Start" : "4",
          "Events" : "9",
          "PmtSub" : "101693.75",
          "IntSub" : "1693.75",
          "PrinSub" : "100000.00"
        }
      ],
      "AmLines" : [
        {
          "Idx" : "1",
          "Date" : "2022-10-01",
          "BegBal" : "50000.00",
          "Pmt" : "237.50",
          "Int" : "237.50",
          "Prin" : "0.00",
          "EndBal" : "50000.00"
        },
        {
          "Idx" : "2",
          "Date" : "2022-11-01",
          "BegBal" : "50000.00",
          "Pmt" : "187.50",
          "Int" : "187.50",
          "Prin" : "0.00",
          "EndBal" : "50000.00"
        },
        ...,
        {
          "Idx" : "12",
          "Date" : "2023-09-01",
          "BegBal" : "100000.00",
          "Pmt" : "100193.75",
          "Int" : "193.75",
          "Prin" : "100000.00",
          "EndBal" : "0.00"
        }
      ]
    }
  }
}

Construction Loan Module - Request

The fields of the Data object supported by a Construction module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Country, 🔹HalfCommitment, 🔸IntRate, 🔹IntStartDate, 🔸LoanDate, 🔸PmtDate, 🔹PPY, 🔸Proceeds, 🔸Term, 🔹TotalDown

Objects: 🟦 Apr, 🟦 Fees[], 🟦 Format, 🟦 ODI, 🟦 Settings

The fields of the Data object supported by an Equal Pmt module request are defined in alphabetical order below:

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

This field allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see the Countries Appendix for the list of supported countries and their associated codes.

Specifying the Country will also set the default value for the APR.Method and Format.CurrencyDecimals fields, as appropriate for the country specified.

🔹 Data.HalfCommitment

TypeRequiredValuesDefault
Booleannotrue, falsefalse

During the term of the construction loan, the estimated interest for disclosure purposes may be either computed on the full or half commitment amounts. By setting this field to true, interest will be estimated using half of the initial commitment amount (i.e. the principal balance). The default value of false will cause interest to be estimated using the entire initial commitment amount.

🔸 Data.IntRate

TypeRequiredValues
StringyesNumber in [-99.999...600]

Determine the interest rate used for the loan. The interest rate should be expressed as a percentage. For example, a loan computed with a rate of 5.125% would be specified as "IntRate" : "5.125".

🔹 Data.IntStartDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDsame value as LoanDate

This field contains the date on which interest begins to accrue on the loan's principal balance. If this field is not specified, then the interest start date is set equal the loan date. Also note that the interest start date must be equal to the loan date when computing a construction loan.

The interest start date (when specified) must be on or after the loan date, as well as on or before the first payment date.

🔸 Data.LoanDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field holds the date on which the loan amount is disbursed and interest begins to accrue. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔸 Data.PmtDate

TypeRequiredValues
StringyesYYYY-MM-DD

This field specifies the first (and for single payment notes, only) payment date in the loan's repayment schedule. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for payments per year, and determines the payment frequency for the requested loan. The default value of 12 will result in a loan with 12 payments per year. If you require a loan with a payment frequency other than monthly, specify it using this field.

🔸 Data.Proceeds

TypeRequiredValues
StringyesCurrency > 0

The proceeds specified indicate the amount of money the borrower is requesting, and does not include financed fees, financed insurances, etc.

🔸 Data.Term

TypeRequiredValues
StringyesInteger > 1

The Term field indicates the the number of payments to be made at the specified payment frequency (see the PPY field above), after which the loan is scheduled to be paid off.

🔹 Data.TotalDown

TypeRequiredValues
StringnoCurrency > 0

This optional field represents the total down payment that the borrower has applied to reduce the requested proceeds. It may consist of a cash down payment, net trade-in value, or rebate. You only need to specify a total down payment if the loan needs to disclose a total sale price. Typical examples of these loan types are auto and boat loans.


🟦 Data.Apr

TypeRequired
Objectno

Settings related to the computed effective rate returned by the SCE (most commonly, the Regulation Z APR in the United States of America) are contained in the fields of this object.

Fields: 🔹MAPR_Max, 🔹Method, 🔹UseMAPR

Objects: None

🔹 Data.Apr.MAPR_Max

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]36.0

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this field.

🔹 Data.Apr.Method

TypeRequiredValuesDefault
Stringnodefault, actuarial, eu, ca, xirr, xirr360, irrdefault

This field allows the calling application to specify an APR calculation method which will override the default value found in the setup file for the given Account. If this field is set to a valid value, then the specified method will be used to compute the APR for this loan calculation.

If the Country field has been set by the calling application and this field is not set, then the APR method used will be determined by the specified country. For the United States of America, the default APR method is actuarial. For a country in the European Union, the default value is eu (European Union APR). For Canada, the default APR method is ca (Canadian APR).

The xirr value implements the internal rate of return method as implemented in Microsoft\textregistered Excel via the XIRR() function, and is based on an actual day calendar with a 365 day divisor.

The xirr360 value implements the internal rate of return method based upon a unit period calendar with a 360 day divisor.

The irr value implements a common spreadsheet internal rate of return method which assumes strict regular periods. Deviating from a strict regular periodicity may produce unreliable results.

If this field is not specified and the Country field is not specified, then the value of default will be used which informs the SCE to use the APR method defined in the setup file for the specified Account.

🔹 Data.Apr.UseMAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will compute the Military APR in addition to the Regulation Z APR. The MAPR object will be included in the loan response.


🟦 Data.Fees[]

TypeRequired
Array of Fee Objectsno

This array of Fee objects allows the calling application to specify one ore more Fee objects to be included with the loan.

Fields: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹CalcType, 🔹Entry, 🔹IsLoanCost, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name

Objects: None

🔹 Data.Fees[].AddToFinChg

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this fee should be included in the computed Finance Charge (and hence, affect the APR), then set this field to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 Data.Fees[].AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsetrue

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this field to true. If set to false, then the fee is paid up front out of the borrower's pocket.

🔹 Data.Fees[].Adjust

TypeRequiredValuesDefault
StringnoCurrency0

The optional Adjust field allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This field has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCE is as follows:

{
  "Fees" : [
    {
      "Name" : "TN Fee",
      "CalcType" : "OnAmtFin",
      "Adjust" : "-2000.00",
      "Entry" : "0.115",
      "AddToPrin" : true,
      "AddToFinChg" : false
    }
  ]
}

🔹 Data.Fees[].CalcType

TypeRequiredValuesDefault
StringnoDollar, OnProceeds, OnPrincipal, OnAmtFinDollar

This field specifies how the fee is to be computed, as described in the following table.

Fee Calc TypeDescription
DollarThe Entry field is understood as a flat dollar amount.
OnProceedsThe Entry field is understood as a percentage value, to be applied to the loan's proceeds, defined as the sum of advances. An Entry of 0.25 would represent a fee of 0.25% of the total proceeds.
OnPrincipalThe Entry field is understood as a percentage value, to be applied to the loan's principal balance. An Entry of 0.125 would represent a fee of 0.125% of the principal balance.
OnAmtFinThe Entry field is understood as a percentage value, to be applied to the loan's Regulation Z Amount Financed. An Entry of 0.33 would represent a fee of 0.33% of the amount financed.

🔹 Data.Fees[].Entry

TypeRequiredValuesDefault
StringnoNumber >= 00

How this field is interpreted depends upon the Fee.CalcType field. Please see the documentation for this field for further information.

🔹 Data.Fees[].IsLoanCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When requesting TILA RESPA outputs (via the Settings.TILARESPA2015 field), the SCE needs to know which fees need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCE. If it is sent, then the value of this field should be set to false.

🔹 Data.Fees[].MAPR

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this field to true.

Fees which are added to the finance charge (e.g. "AddToFinChg" : true) are always considered MAPR fees, regardless of the stated value of this field.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Data.Fees[].Max

TypeRequiredValuesDefault
StringnoCurrency > 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Min

TypeRequiredValuesDefault
StringnoCurrency > 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this field is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Data.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

This field is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this field will be used to identify the fee in the response, and hence it is highly recommended that you name your fees accordingly.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value will be determined by the value of the Country field. For most countries, the default value is 2. If no country code is specified, then the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.ODI

TypeRequired
Objectno

If odd days should be treated as a prepaid finance charge or added to the first payment in a manner different from how interest is accruing, then the request needs to define how odd days interest is computed and handled using the fields of this object.

Fields: 🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

Objects: None

🔹 Data.ODI.AccrualCode

TypeRequiredValuesDefault
Stringno204, 205, 210, 211, 220, 221, 230, 231, 250default

The accrual code defines how the odd days interest is computed. The meaning of the allowed accrual codes is defined below.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

Accrual CodeDescription
204True360/360
205True360/365
210Actual/360
211True365/360
220Actual/365
221True365/365
230Actual/Actual
231Midnight 366
250Actual/Variable Days Per Year

🔹 Data.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the calling application wants the odd days interest to be added to the first payment, then set the value of this field to true. A value of false indicates that the odd days interest will be treated as a prepaid finance charge.

🔹 Data.ODI.AddToPrin

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If any odd days interest should be treated as a financed prepaid fee, then set the value of this field to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCE and the value of AddToPrin will be set to false.

🔹 Data.ODI.AnchorDate

TypeRequiredValuesDefault
StringnoBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This field determines how to arrive at the anchor date. A value of BackUnitPeriod means that the anchor date is one unit period prior to the specified first payment date. A value of BackDaysPerPeriod means that the anchor date is the number of days per period prior to the first payment date. Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 Data.ODI.ForceUnitPeriod

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Some unit period methods will not use a strict unit period interest accrual factor in the period to the first payment. For example, code 302 will count the days to the first payment and divide by 365. For a monthly loan, setting this field to true will use a 1/12 factor instead of Days/365.

🔹 Data.ODI.NoCap

TypeRequiredValuesDefault
Booleannotrue, falsefalse

When the odd days interest is financed, setting this field to true prevents interest from being computed on interest. The default is false, which means interest will be computed on interest.

🔹 Data.ODI.UseDailyCost

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 Data.ODI.UseNegODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If there are negative odd days in the loan, then the value of this field determines if a negative odd days interest fee is computed. If the value of this field is false, then negative odd days fees are not allowed, the SCE will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes and odd days interest credit) when there are negative odd days in a loan.


🟦 Data.Settings

TypeRequired
Objectno

The Settings object allows the calling application to alter the default loan calculation options.

Fields: 🔹Account, 🔹AccrualCode, 🔹ConAccrual, 🔹ConMethod, 🔹ConUnitPeriodDivisor, 🔹DataPath, 🔹Lastday, 🔹PmtRound, 🔹ShowAmTable, 🔹TILARESPA2015, 🔹YieldPPY

Objects: None

🔹 Data.Settings.Account

TypeRequiredValuesDefault
StringnoInteger in [1..9999]1

The Account field specifies the numeric setup file account number that will be used to compute the requested loan. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which may affect the loan calculation, such as the accrual method, insurance methods / rates / caps, etc.

🔹 Data.Settings.AccrualCode

TypeRequiredValuesDefault
Stringnosee tabledefault

The method of interest accrual is defined by this field. A value of default informs the SCE to use the interest accrual method defined in the setup file for the specified Account. All other valid accrual codes are described in the table below.

🔹 Data.Settings.ConAccrual

TypeRequiredValuesDefault
Stringnodefault, unitperiod, actual360, actual365default

If the loan request is a construction loan where interest is computed using the Simple method (see Settings.ConMethod), then this field allows the calling application to specify the simple accrual method used.

A value of default indicates that the accrual method used will be that which is specified in the setup files for the given account. unitperiod computes interest on a pure unit period basis, with odd days optionally taken into account (see Settings.ConUnitPeriodDivisor field below for more information). actual360 uses an actual day calendar and divides the day count by 360 to determine the appropriate interest factor. actual365 does the same thing, but uses a 365 divisor instead.

🔹 Data.Settings.ConMethod

TypeRequiredValuesDefault
Stringnodefault, simple, interestonlydefault

When computing a construction loan, there are two supported methods for computing interest during the constrcution period:

If the value of this field is simple, then the estimated construction interets will be computed and disclosed as a lup-sum prepaid fee (see the Moneys.ConstructInterest response field).

If the value of this field is interestonly, then the construction and permanent loans are combined into a single loan, with the construction (and permanent) loan's interest being reflected in the Moneys.Interest field, and both loans reflected in a single, combined amortization schedule.

A value of default instructs the SCE to use the construction method specified in the setup file for the given account.

🔹 Data.Settings.ConUnitPeriodDivisor

TypeRequiredValuesDefault
StringnoIgnore, 360, 365, VarDPYIgnore

When specifying a Settings.ConAccrual field value of unitperiod (see above), this field allows the calling application to specify how odd days between the loan and first payment dates are taken into account.

🔹 Data.Settings.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.Settings.Lastday

TypeRequiredValuesDefault
Booleannotrue, falseas configured in setup file

If present, this field overrides the Last Day setting in the setup files, which only applies to loans computed with an actual day accrual calendar where the first payment date falls at the end of a month with fewer than 31 days. As an example, if the first payment date is on April 30, should the following payment dates be made on the 30th of each month, or on the last day of the month?

If no value is specified for this field, then the setup file setting will be used. If true is specified, then conditions triggering a last day situation will result in payments which fall at the end of the month. A value of false indicates that when dictated, subsequent payment dates will not be moved to the last day of the month.

🔹 Data.Settings.PmtRound

TypeRequiredValuesDefault
Stringnodefault, nearest, up, down, bestdefault

How are calculated payments to be rounded at and beyond this event? best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen. default means that the setting should be configured as specified in the setup file.

🔹 Data.Settings.ShowAmTable

TypeRequiredValuesDefault
Booleannotrue, falsetrue

To supress the entire amortization schedule from the response, set value of this field to false; otherwise, the amortization schedule will be returned with the response.

🔹 Data.Settings.TILARESPA2015

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will include data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015. If the field is omitted or set to false, then the TILA RESPA outputs will not be generated.

Note that this field is supported for equal payment loans, balloon payment loans, single payment notes, interest only loans, fixed principal plus interest loans, skips, pickups and irregulars, and ARMs.

🔹 Data.Settings.YieldPPY

TypeRequiredValuesDefault
Stringno0, 2, 4, 6, 120

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than `0', this field determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this field with a value other than zero, the calling application must include an odd days prepaid fee in the request.


Construction Loan Module - Response

The Data object for a response from the Construction module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data🔹Country
|- 🟥 Errors[]
|- 🟥 Warnings[]
|- 🟦 Results🔸Payment
|- 🟦 FedBox🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice
|- |- 🟥 APR🔸Value, 🔹Max, 🔹MaxExceeded
|- |- 🟦 MAPR🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded
|- 🟦 TILARESPA2015🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP
|- |- 🟥 LoanCosts[]🔹Name, 🔹In5Years, 🔸Value
|- |- 🟥 In5Years🔸PaidTotal, 🔸PaidPrincipal
|- |- 🟥 MaxPnIPmt🔸Date, 🔸Amount
|- |- 🟥 MinRate🔸Rate, 🔸Idx
|- |- 🟥 MaxRate🔸Rate, 🔸Idx
|- |- 🟥 ProjectedPaymentsTable[]🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax
|- 🟦 Moneys🔸Principal, 🔸Interest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹MinIntChgAdj, 🔹MinFinChgAdj
|- |- 🟦 ODI🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost
|- |- 🟦 Fees[]🔹Name, 🔸Fee
|- 🟦 Accrual🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity
|- 🟦 PmtStreams[]🔸Term, 🔸Pmt, 🔹Rate, 🔸Begin
|- 🟦 AmTable🔹Months, 🔹Weeks, 🔹OddDays
|- |- 🟦 GrandTotals🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot
|- |- 🟦 SubTotals[]🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub
|- |- 🟥 AmLines[]🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹UnpaidInt, 🔸EndBal

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔹Country

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Results, 🟦 FedBox, 🟦 TILARESPA2015, 🟦 Moneys, 🟦 Accrual, 🟦 PmtStreams[], 🟦 AmTable

🔹 Data.Country

TypeRequiredValuesDefault
StringnoAlpha-2 or Numeric-3 codeUS

If the request specified a two-character or three-digit Country code, then this field will be present and will contain the full name of the country associated with the specified code. Please see the Countries Appendix for the list of supported countries and their associated codes.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Construction",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "Construction",
  "Data" : {
    "Errors" : [
      "Data.LoanDate (StringDate) not found.",
      "Data.PmtDate (StringDate) not found.",
      "Data.Term (StringInt) not found.",
      "Data.IntRate (StringFloat) not found.",
      "Data.Proceeds (StringFloat) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

🟦 Data.Results

TypeRequired
Objectno

This field(s) of this object represent the most important numerical results for the loan request.

Fields: 🔸Payment,

Objects: None

🔸 Data.Results.Payment

TypeRequiredValues
StringyesCurrency

The loan payment is shown here.


🟦 Data.FedBox

TypeRequired
Objectno

This object groups together all fields which contain important numerical information, as defined in the Truth-In-Lending laws (Regulation Z).

Fields: 🔸AmtFin, 🔸FinChg, 🔸TotPmts, 🔹TotalSalePrice

Objects: 🟥 APR, 🟦 MAPR

🔸 Data.FedBox.AmtFin

TypeRequiredValue
StringyesCurrency > 0.0

The Regulation Z Amount Financed, which is defined as the amount of credit provided to the borrower or on their behalf.

🔸 Data.FedBox.FinChg

TypeRequiredValue
StringyesCurrency

This element contains the Regulation Z Finance Charge, described as the dollar amount the credit extension will cost the borrower.

🔸 Data.FedBox.TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

The amount which the borrower will have paid when the borrower has made all scheduled payments.

🔹 Data.FedBox.TotalSalePrice

TypeRequiredValue
StringyesCurrency > 0.0

The sum of the total of payments plus the total down payment. Please note that if no TotalDown field was included in the request, then this element will not be present.


🟥 Data.FedBox.APR

TypeRequired
Objectyes

The APR object contains fields which return the value and APR method used.

Fields: 🔸Value, 🔹Max, 🔹MaxExceeded, 🔸Type

Objects: None

🔸 Data.FedBox.APR.Value

TypeRequiredValue
StringyesNumber

The computed APR, which is the cost of the extension of credit expressed as a yearly rate.

🔹 Data.FedBox.APR.Max

TypeRequiredValueDefault
StringnoNumbern/a

This field returns the maximum APR as configured in the account's setup files. If no maximum APR has been specified, then this field will not be present in the response. The value of this field should be displayed as a percentage.

🔹 Data.FedBox.APR.MaxExceeded

TypeRequiredValueDefault
Booleannotrue, falsen/a

If a maximum APR is configured in the account's setup files, then the value of this field indicates whether or not the current loan exceeds the maximum APR. If no maximum APR has been specified, then this field will not be present in the response.

🔸 Data.FedBox.APR.Type

TypeRequiredValue
StringyesText

This field returns the APR method u sed to compute the reported APR.


🟦 Data.FedBox.MAPR

TypeRequired
Objectno

The MAPR (military APR) object is only returned with the response if the value of the Apr.UseMAPR request field is true.

Fields: 🔸Value, 🔸Advance, 🔸Max, 🔸MaxExceeded

Objects: None

🔸 Data.FedBox.MAPR.Value

TypeRequiredValue
StringyesNumber

The computed military APR.

🔸 Data.FedBox.MAPR.Advance

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the equivalent of the Amount Financed for the Military APR. Specifically, it is the principal balance less any MAPR fees, debt protection, etc.

🔸 Data.FedBox.MAPR.Max

TypeRequiredValue
StringyesNumber

This field holds the maximum Military APR as specified in the input XML (see Apr.MAPR_Max). If not specified, a default value of 36% is assumed. The value of this field should be displayed as a percentage. As an example, for "Max" :"36.000", you would disclose a maximum Military APR of 36%.

🔸 Data.FedBox.MAPR.MaxExceeded

TypeRequiredValue
Booleanyestrue, false

The value of this field indicates whether or not the current loan exceeds the maximum allowed Military APR. As an example, if the maximum APR has been set to 36% and the Military APR for the returned loan was 37.125%, the MAPR object would be:

{
  "MAPR" : {
    "Value" : "37.125",
    "Advance" : "1350.00",
    "Max" : "36.000",
    "MaxExceeded" : true
 }
}


🟦 Data.TILARESPA2015

TypeRequired
Objectno

This object contains fields which are of interest to fulfilling the 2015 TILA RESPA rule. It will only be present if the Settings.TILARESPA2015 field in the request is set to true.

Fields: 🔸TotalLoanCost, 🔸CD_TotPmts, 🔸TIP

Objects: 🟥 LoanCosts[], 🟥 In5Years, 🟥 MaxPnIPmt, 🟥 MinRate, 🟥 MaxRate, 🟥 ProjectedPaymentsTable[]

🔸 Data.TILARESPA2015.TotalLoanCost

TypeRequiredValue
StringyesCurrency > 0.0

The value of this field is the sum of all borrower paid loan costs. Since all LoanCost values are rounded dollar amounts, the value of this element will also be a rounded dollar amount.

🔸 Data.TILARESPA2015.CD_TotPmts

TypeRequiredValue
StringyesCurrency > 0.0

This field returns the sum of the total of payments, all borrower paid loan costs, and any odd days interest that is prepaid at loan closing. This value should be disclosed on the Closing Disclosure form in the Total of Payments field.

🔸 Data.TILARESPA2015.TIP

TypeRequiredValue
StringyesNumber

The total interest percentage, rounded to three or fewer decimal places - as required.


🟥 Data.TILARESPA2015.LoanCosts[]

TypeRequired
Array of LoanCost Objectsyes

For every object in the Fees[] array present in the request which has its IsLoanCost field set to true (and hence, is a borrower paid loan cost) and whose amount is greater than zero (except odd days interest fee types, as explained in the previous documentation of the Fee and object), there will be a corresponding LoanCost object.

Fields: 🔹Name, 🔹In5Years, 🔸Value

Objects: None

🔹 Data.TILARESPA2015.LoanCosts[].Name

TypeRequiredValueDefault
StringnoTextn/a

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔹 Data.TILARESPA2015.LoanCosts[].In5Years

TypeRequiredValueDefault
StringnoCurrency >= 0Same as Value

If the entire amount of the fee is different from the amount collected over the first five years (for example, a service charge), then this field will be present and disclose the portion of this loan coast that is accrued during the first five years.

🔸 Data.TILARESPA2015.LoanCosts[].Value

TypeRequiredValue
StringyesCurrency >= 0

The value of this field is the numerical value of the fee, rounded to the nearest dollar.


🟥 Data.TILARESPA2015.In5Years

TypeRequired
Objectyes

This object contains all important values required for the new "In 5 Years" section of the disclosure.

Fields: 🔸PaidTotal, 🔸PaidPrincipal

Objects: None

🔸 Data.TILARESPA2015.In5Years.PaidTotal

TypeRequiredValue
StringyesCurrency >= 0

This field holds the sum of all "principal, interest, mortgage insurance, and borrower paid loan costs scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.

🔸 Data.TILARESPA2015.In5Years.PaidPrincipal

TypeRequiredValue
StringyesCurrency >= 0

This field holds "the principal scheduled to be paid through the end of the 60th month after the due date of the first periodic payment". Note that this value is rounded to the nearest whole dollar.


🟥 Data.TILARESPA2015.MaxPnIPmt

TypeRequired
Objectyes

The fields of this object hold the maximum sceduled principal and interest payment during the term of the loan, as well as the date on which that payment is made.

Fields: 🔸Date, 🔸Amount

Objects: None

🔸 Data.TILARESPA2015.MaxPnIPmt.Date

TypeRequiredValue
StringyesYYYY-MM-DD

The value of this field returns the date on which the maximum scheduled principal and interest payment is made. If the maximum scheduled payment occurs more than once, then the date returned is that of the first instance.

🔸 Data.TILARESPA2015.MaxPnIPmt.Amount

TypeRequiredValue
StringyesCurrency >= 0

The maximum sceduled principal and interest payment during the term of the loan.


🟥 Data.TILARESPA2015.MinRate

TypeRequired
Objectyes

The fields of this object hold information regarding the minimum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MinRate.Rate

TypeRequiredValue
StringyesNumber

The value of the minimum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MinRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the minimum rate is first applicable.


🟥 Data.TILARESPA2015.MaxRate

TypeRequired
Objectyes

The fields of this object hold information regarding the maximum possible interest rate applied during the term of the loan.

Fields: 🔸Rate, 🔸Idx

Objects: None

🔸 Data.TILARESPA2015.MaxRate.Rate

TypeRequiredValue
StringyesNumber

The value of the maximum interest rate applied during the term of the loan.

🔸 Data.TILARESPA2015.MaxRate.Idx

TypeRequiredValue
StringyesInteger > 0

This field returns the payment number for which the maximum rate is first applicable.


🟥 Data.TILARESPA2015.ProjectedPaymentsTable[]

TypeRequired
Array of PPCol Objectsyes

Fields: 🔸Num, 🔸Title, 🔸YearStart, 🔸YearEnd, 🔸PnIPmtMin, 🔸PnIPmtMax, 🔸IntOnly, 🔸Balloon, 🔸MIPmt, 🔸TotalPmtMin, 🔸TotalPmtMax

Objects: None

This field returns an Array of projected payment table columns (PPCol), with each array member detailing a single column. Per the regulation, there will be a minimum of one column and a maximum of four columns, depending upon the parameters of the loan.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Num

TypeRequiredValue
StringyesInteger in [1...4]

The value of this field identifies the number of the column to which the following fields apply. The value will be from 1 to 4.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Title

TypeRequiredValue
StringyesText

The value of this field is the title for the column. Most of the time, it will be in the form of Years X - Y, or Year X, or Final Payment in the case of a final balloon payment.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearStart

TypeRequiredValue
StringyesInteger

The beginning year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].YearEnd

TypeRequiredValue
StringyesInteger

The ending year number for which this column data applies.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMin

TypeRequiredValue
StringyesCurrency > 0

The minimum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].PnIPmtMax

TypeRequiredValue
StringyesCurrency > 0

The maximum principal and interest payment for this column.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].IntOnly

TypeRequiredValue
Stringyesnone, some, all

If none of the payments associated with this column are interest only payments, then the value of this field will be none. A value of some means that some of the payments (but not all) associated with this columnt are interest only. Finally, a value of all indicates that all payments associated with this columnt are interest only.

Note that for the purposes of this field, a scheduled payment is considered an interest only payment if the payment amount pays off all interest due at the time of the payment, with no reduction in the principal balance.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].Balloon

TypeRequiredValue
Booleanyestrue, false

If any of the payments associated with this column are balloon payments (e.g. isolated payments that are more than twice the value of a regular periodic payment), then the value of this field will be true.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].MIPmt

TypeRequiredValue
StringyesCurrency > 0

The value of this field holds the mortgage insurance premium associated with this column, rounded to the nearest dollar. If no mortgage insurance is present or coverage has been dropped, a value of zero will be present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMin

TypeRequiredValue
StringyesCurrency > 0

This field returns the minimum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.

🔸 Data.TILARESPA2015.ProjectedPaymentsTable[].TotalPmtMax

TypeRequiredValue
StringyesCurrency > 0

This field returns the maximum estimated total payment for this column. Note that this value does not include any estimated escrow, as the SCE does not support escrow calculations. The calling application will need to increase these values by the estimated escrow amounts if any are present.


🟦 Data.Moneys

TypeRequired
Objectno

This element groups together those other major cash result amounts not disclosed under the FedBox object, such as the principal balance, interest charge, and fee amounts.

Fields: 🔸Principal, 🔸Interest, 🔹FinFees, 🔹Prepaid, 🔹PocketFees, 🔹MAPRFees, 🔹MinIntChgAdj, 🔹MinFinChgAdj

Objects: 🟦 ODI, 🟦 Fees[]

🔸 Data.Moneys.Principal

TypeRequiredValue
StringyesCurrency >= 0

The principal balance is the amount on which interest is accrued. The principal balance consists of all advances requested by the borrower, as well as any fees and/or protection products which are financed.

🔸 Data.Moneys.Interest

TypeRequiredValue
StringyesCurrency

This value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments.

🔹 Data.Moneys.FinFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field contains the sum of all fees having AddToPrin set to true and occuring on the date of an advance. If this value is zero, the field will not appear in the response.

🔹 Data.Moneys.Prepaid

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field represents all prepaid finance charges and contains the sum of all fees occurring on an advance and having AddToFinChg set to true. If this value is zero, the field will not be found in the response.

🔹 Data.Moneys.PocketFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are neither financed, nor added to the finance charge. In essence, they are paid out of the borrower's pocket. If no out of pocket fees were requested, then this field will not show up in the response.

🔹 Data.Moneys.MAPRFees

TypeRequiredValueDefault
StringnoCurrency >= 0.00

This field holds the sum of all fees which are Military APR fees (including protection products), and will only appear if the Military APR has been requested.

🔹 Data.Moneys.MinIntChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum interest charge is configured in the account's setup files and the final payment was adjusted to meet this minimum interest charge, then this field will be returned in the response and will contain the value of the minimum interest charge adjustment.

🔹 Data.Moneys.MinFinChgAdj

TypeRequiredValueDefault
StringnoCurrency >= 0.00

If a minimum finance charge is configured in the account's setup files and the final payment was adjusted to meet this minimum finance charge, then this field will be returned in the response and will contain the value of the minimum finance charge adjustment.


🟦 Data.Moneys.ODI

TypeRequired
Objectno

This object, if present, contains information regarding odd days interest. If no odd days interest was requested, then this object will not be present in the response.

Fields: 🔹AddToPmt, 🔸Count, 🔸Fee, 🔹Months, 🔹DailyCost

Objects: None

🔹 Data.Moneys.ODI.AddToPmt

TypeRequiredValuesDefault
Booleannotrue, falsen/a

If the odd days interest has been added to the first payment, then this field will be present in the response with a value of true. If the odd days interest has been treated as a prepaid finance charge, then this field will not be present and a default value of false should be assumed.

🔸 Data.Moneys.ODI.Count

TypeRequiredValues
StringyesInteger >= 0

Discloses the number of odd days computed by the SCE for the requested loan.

🔸 Data.Moneys.ODI.Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the total amount odd days interest charge.

🔹 Data.Moneys.ODI.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field holds the number of odd months computed by the SCE for the requested loan when using odd days accrual method 250. If the odd days accrual method is a value other than 250, then this field will not be present in the ODI object of the response.

🔹 Data.Moneys.ODI.DailyCost

TypeRequiredValueDefault
StringnoCurrency >= 0.0n/a

If the odd days interest fee is computed using a rounded daily cost, then the value of this field will hold that value. If the odd days interest is not computed using a rounded daily cost, then this field will not be present in the response.


🟦 Data.Moneys.Fees[]

TypeRequired
Array of Fee Objectsno

If the requested loan included fees, then for each fee in the loan there will be a Fee object in this array containing the name of the fee and the computed fee amount.

If there were no fees requested with the loan, then the Moneys.Fees[] array will not be included in the response.

Fields: 🔹Name, 🔸Fee

Objects: None

🔹 Data.Moneys.Fees[].Name

TypeRequiredValuesDefault
StringnoTextempty

If a name was provided for the fee, then it will be included here in the disclosure for identification purposes.

🔸 Data.Moneys.Fees[].Fee

TypeRequiredValue
StringyesCurrency >= 0

Discloses the computed fee amount.


🟦 Data.Accrual

TypeRequired
Objectno

This object groups together interest accrual information, such as the accrual method(s) used, days to the first payment and the loan's maturity date.

Fields: 🔸Method, 🔸Days1Pmt, 🔸DayCount, 🔸Maturity

Objects: None

🔸 Data.Accrual.Method

TypeRequiredValues
StringyesText

The Method field contains a textual description of the interest accrual method used to compute the loan (e.g. "Unit Period 365 Simple".)

🔸 Data.Accrual.Days1Pmt

TypeRequiredValues
StringyesInteger >= 0

This field contains the number of days between the date of the first advance and the date of first payment, computed by one of two methods as specified in by Accrual.DayCount (below).

🔸 Data.Accrual.DayCount

TypeRequiredValues
StringyesTrue360, Actual

This field specifies the method used to compute the number of days from the date of the first advance until the first payment date. Actual means that the actual number of days between these two dates are used, whereas the True360 method use a 360 day calendar.

🔸 Data.Accrual.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

Holds the maturity date of the loan, which is the date on which the last payment is scheduled. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.PmtStreams[]

TypeRequired
Objectno

The PmtStreams[] array is made up of one or more PmtStream objects (there will always be at least one of these elements, and there may be more than one depending upon the loan type). The PmtStream objects describe the scheduled stream of payments for the computed loan. Instead of disclosing each and every payment individually (which can be done with the AmTable object), the payment stream groups together consecutive equal payments at the same interest rate to produce output along the lines of:

{
    "PmtStreams" : [
      {
        "Term" : "1",
        "Pmt" : "10062.59",
        "Rate" : "4.500",
        "Begin" : "2023-09-01"
      }
    ]
}

Each object describes a single stream of equal payments at the same interest rate, using the following fields to define the important properties of each payment stream.

Fields: 🔸Term, 🔸Pmt, 🔸Rate, 🔸Begin

Objects: Note

🔸 Data.PmtStreams[].Term

TypeRequiredValues
StringyesInteger >= 0

The Term field holds the number of payments that make up the given payment stream.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValues
StringyesCurrency > 0

The Pmt field holds the computed payment amount for this payment stream.

🔹 Data.PmtStreams[].Rate

TypeRequiredValues
StringyesNumber

Contains the interest rate used for the duration of this payment stream. If this payment stream accrued interest using split-rate tiers, then this field will not be returned.

🔸 Data.PmtStreams[].Begin

TypeRequiredValues
StringyesYYYY-MM-DD

This field identifies the date on which the first payment for this given payment stream is scheduled to be made. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.


🟦 Data.AmTable

TypeRequired
Objectno

This object contains fields which summarize and describe the loan's amortization schedule. If Settings.ShowAmTable is set to false, then this object will not be found in the response.

Fields: 🔹Months, 🔹Weeks, 🔹OddDays

Objects: 🟦 GrandTotals, 🟦 SubTotals[], 🟥 AmLines[]

🔹 Data.AmTable.AvgBal

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the average balance of the loan used in the Canadian APR calculation.

🔹 Data.AmTable.Months

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of months in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.Weeks

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the whole number of weeks in the term of the loan used in the Canadian APR calculation. Note that the term is expressed in monthly or weekly units, but never both.

🔹 Data.AmTable.OddDays

TypeRequiredValuesDefault
StringnoInteger >= 0n/a

This field will only appear if a Canadian APR is disclosed for the computed loan. The value of this field is the number of odd days in the term of the loan used in the Canadian APR calculation. Odd days are computed by moving backwards from the maturity date the number of disclosed months or weeks, and then counting the additional number of days required to land on the loan date.

🟦 Data.AmTable.GrandTotals

TypeRequired
Objectno

This object describes the total amounts of various categories throughout the life of the loan. As an example, the total amount paid to interest and principal, as well as the total of payments are all contained in fields of this object.

Fields: 🔸PmtTot, 🔸IntTot, 🔸PrinTot, 🔹CLTot, 🔹AHTot, 🔹IUTot

Objects: None


🔸 Data.AmTable.GrandTotals.PmtTot

TypeRequiredValues
StringyesCurrency

The total of payments scheduled for the computed loan.

🔸 Data.AmTable.GrandTotals.IntTot

TypeRequiredValues
StringyesCurrency

The total amount paid to interest over the life of the loan, assuming all payments are made as scheduled.

🔸 Data.AmTable.GrandTotals.PrinTot

TypeRequiredValues
StringyesCurrency

This field contains the total amount paid to principal during the loan term, assuming all payments are made as scheduled.

🔹 Data.AmTable.GrandTotals.CLTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLTot field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life over the duration of the loan.

🔹 Data.AmTable.GrandTotals.AHTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHTot field will only appear on loans with certain types of disability or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.

🔹 Data.AmTable.GrandTotals.IUTot

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUTot field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection over the duration of the loan.


🟦 Data.AmTable.SubTotals[]

TypeRequired
Array of SubTotal Objectsno

Describes the total amounts of various categories paid during a given calendar year. For each year in which the computed loan has scheduled payments, there will be a SubTotal object in the array.

Fields: 🔸Year, 🔸Start, 🔸Events, 🔸PmtSub, 🔸IntSub, 🔸PrinSub, 🔹CLSub, 🔹AHSub, 🔹IUSub

Objects: None

🔸 Data.AmTable.SubTotals[].Year

TypeRequiredValues
StringyesInteger >= 0

The calendar year for which the subtotal data is applicable.

🔸 Data.AmTable.SubTotals[].Start

TypeRequiredValues
StringyesInteger >= 0

This field defines the first amortization event which falls in the specified calendar year. To find the AmLines[] object which corresponds to this value, match the Idx field of the AmLine object.

🔸 Data.AmTable.SubTotals[].Events

TypeRequiredValues
StringyesInteger >= 0

This field defines the number of amortization events which belong to this calendar year.

🔸 Data.AmTable.SubTotals[].PmtSub

TypeRequiredValues
StringyesCurrency

Contains the total of payments scheduled for the calendar year.

🔸 Data.AmTable.SubTotals[].IntSub

TypeRequiredValues
StringyesCurrency

Holds the total amount paid to interest over the calendar year, assuming all payments are made as scheduled.

🔸 Data.AmTable.SubTotals[].PrinSub

TypeRequiredValues
StringyesCurrency

Contains the total amount paid to principal during the calendar year, assuming all payments are made as scheduled.

🔹 Data.AmTable.SubTotals[].CLSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CLSub field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for life during the year.

🔹 Data.AmTable.SubTotals[].AHSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AHSub field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for this protection during the year.

🔹 Data.AmTable.SubTotals[].IUSub

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IUSub field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the total amount paid for involuntary unemployment during the year.


🟥 Data.AmTable.AmLines[]

TypeRequired
Array of AmLine Objectsyes

There is one AmLine object for each amortization event which occurs during the life of a loan. Most of the time, each event will describe a payment, and detail how that payment is applied (to interest, principal, loan protection products, etc.). Some events, such as capitalizing interest, will not have payments but will show how the loan amortizes.

Fields: 🔸Idx, 🔸Date, 🔸BegBal, 🔸Pmt, 🔸Int, 🔸Prin, 🔹CL, 🔹AH, 🔹IU, 🔹UnpaidInt, 🔸EndBal

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValues
StringyesInteger >= 0

The index of the amortization event, which is either the payment number, or zero. A value of zero designates an event that is either not a payment or is a skipped payment.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The date on which the amortization event is scheduled to occur. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 AmData.AmTable.AmLines[]ine.BegBal

TypeRequiredValues
StringyesCurrency >= 0

The principal balance before the amortization event occurs.

🔸 Data.AmTable.AmLines[].Pmt

TypeRequiredValues
StringyesCurrency

The payment amount for this event.

🔸 Data.AmTable.AmLines[].Int

TypeRequiredValues
StringyesCurrency

The amount of interest paid at this event.

🔸 Data.AmTable.AmLines[].Prin

TypeRequiredValues
StringyesCurrency

The amount of principal paid at this event.

🔹 Data.AmTable.AmLines[].CL

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The CL field will only appear on loans with certain types of life protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for life coverage.

🔹 Data.AmTable.AmLines[].AH

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The AH field will only appear on loans with certain types of accident and health or debt protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for disability / debt protection coverage.

🔹 Data.AmTable.AmLines[].IU

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The IU field will only appear on loans with certain types of involuntary unemployment protection products, such as those based on a monthly outstanding balance. It contains the amount of the payment which is marked for this coverage.

🔹 Data.AmTable.AmLines[].UnpaidInt

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

This field will only appear on an amortization line when interest has been accrued, but has not yet been paid or added to the principal balance. If the interest accrued has not yet been rounded, then the unpaid interest will be displayed to four (4) decimal placed. If rounded, then the unpaid interest is displayed to two (2) decimal places.

🔸 Data.AmTable.AmLines[].EndBal

TypeRequiredValues
StringyesCurrency

The principal balance amount, after the amortization event has taken place.


Apr Verification and Calculation Module

If a loan is computed outside of the SCE and does not provide the Regulation Z / EU APR, or if you wish to validate a computed APR, then the APR Verification and Calculation functionality found in the SCE and described here will be of interest to you. The SCE supports APR calculation and verification for loans with a single advance, as well as multiple advance loans. For the United States of America, all references to Appendix J of Regulation Z are put in italics at the end of the field's description. For example, Section (a)(1) refers to Appendix J, Section a, Subsection 1 of Regulation Z.

Sample Request

The following is a sample SCE request for an APR check calculation with an Amount Financed of $10,000, and 36 monthly payments of $322.67.

{
  "Module" : "Apr",
  "Data" : {
    "TestApr" : "10.125",
    "TestFinChg" : "1616.12",
    "TestTotPmt" : "11616.12",
    "Advances" : [
      {
        "Date" : "2022-03-16",
        "AmtFin" : "10000.00"
      }
    ],
    "PmtStreams" : [
      {
        "Begin" : "2022-04-16",
        "Term" : "36",
        "Pmt" : "322.67"
      }
    ]
  }
}

Sample Response

{
  "Result" : 200,
  "Module" : "Apr",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Apr" : {
      "Value" : "10.000",
      "Method" : "Actuarial",
      "UnitPeriod" : "1_Month",
      "UnitPeriodBase" : "Month",
      "UnitPeriodMult" : "1",
      "PeriodsPerYear" : "12"
    },
    "TestResults" : {
      "Apr" : {
        "LoanType" : "Regular",
        "MultAdv" : false,
        "IrregPeriod" : false,
        "IrregPmt" : false,
        "Value" : "10.000",
        "TestValue" : "10.125",
        "Difference" : "0.125",
        "Tolerance" : "0.125",
        "InCompliance" : true,
        "OnCusp" : true
      },
      "FinChg" : {
        "Value" : "1616.12",
        "TestValue" : "1616.12",
        "Difference" : "0.00"
      },
      "TotPmt" : {
        "Value" : "11616.12",
        "TestValue" : "11616.12",
        "Difference" : "0.00"
      }
    },
    "Loan" : {
      "TransactionDate" : "2022-03-16",
      "AmountFinanced" : "10000.00",
      "NumAdvances" : "1",
      "AdvPresVal" : "10000.00",
      "FinChg" : "1616.12",
      "TotPmt" : "11616.12",
      "NumPmts" : "36",
      "TotPmtPresVal" : "9999.942"
    },
    "AmTable" : {
      "Error" : "0.058",
      "ErrorDown" : "-0.0875",
      "ErrorUp" : "0.2035",
      "AmLines" : [
        {
          "Idx" : "0",
          "Date" : "2022-03-16",
          "Unit" : "0",
          "Frac" : "0",
          "Adv" : "10000.00",
          "PresVal" : "10000.00",
          "PresValSum" : "10000.00"
        },
        {
          "Idx" : "1",
          "Date" : "2022-04-16",
          "Unit" : "1",
          "Frac" : "0",
          "Pmt" : "322.67",
          "PresVal" : "320.0033",
          "PresValSum" : "9679.9967"
        },
        ...
      ]
    }
  }
}

Apr Module - Request

The fields of the Data object supported by the Apr module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Decimals, 🔹Method, 🔹TestApr, 🔹TestFinChg, 🔹TestTotPmt, 🔹TransactionDate

Objects: 🟦 ActuarialOpts, 🟦 AmTableOpts, 🟥 Advances[], 🟦 Construction, 🟦 PmtStreams[], 🟦 Premiums[], 🟦 UnitPeriod, 🟦 UsRuleOpts

🔹 Data.Decimals

TypeRequiredValuesDefault
StringnoInteger in [1..5]Text - See below

The number of decimal places of accuracy for the disclosed APR is determined by this field. The default value of this field depends upon the selected Method. For all methods other than EU_APR, the default value is 3. For EU_APR, the default value is 1.

🔹 Data.Method

TypeRequiredValuesDefault
StringnoActuarial, USRUle, EU_APR, IRR, YieldIRR, XIRR, XIRR360Actuarial

In the United States of American, Regulation Z allows for APRs to be computed using two different methods: the actuarial method (Actuarial) or the US Rule method (USRule). In the European Union, there is a different method used (EU_APR) to compute the APR. The SCE also supports the calculation of the internal rate of return as defined by Microsoft® Excel's XIRR() function (XIRR), as well as the internal rate of return based upon a unit period 360 days calendar (XIRR360). The IRR method implements a common spreadsheet internal rate of return method which assumes strict regular periods. Deviating from a strict regular periodicity may produce unreliable results. The YieldIRR method is similar to the IRR method, except the rate is converted to an annual yield equivalent, according to the payment frequency.

Use this field to specify the method used to compute the APR. If a value of USRule is specified, make sure to include the USRule object as appropriate.

🔹 Data.TestApr

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600.000]n/a

The SCE will compute an APR for the given loan, then compare the APR it has computed against this value. The difference between the computed and test APRs will be compared. The SCE will inform the calling application whether or not the provided APR is within compliance. If you do not have a test APR to compare, omit this field. The test APR should be expressed as a percentage.

🔹 Data.TestFinChg

TypeRequiredValuesDefault
StringnoCurrencyn/a

If this field is present and contains a value greater than zero, then the SCE will compute the Regulation Z Finance Charge for the given loan and compare it to the value specified in this field. The magnitude of the difference between the computed and test values will be returned in the response.

If this field is not present, or if it is present but contains a value less than or equal to zero, then the Finance Charge will not be returned in the response.

🔹 Data.TestTotPmt

TypeRequiredValuesDefault
StringnoCurrencyn/a

If this field is present and contains a value greater than zero, then the SCE will compute the Regulation Z Total of Payments for the given loan and compare it to the value specified in this field. The magnitude of the difference between the computed and test values will be returned in the response.

If this field is not present, or if it is present but contains a value less than or equal to zero, then the Total of Payments is still returned in the results, however no Difference or TestValue fields will be present.

🔹 Data.TransactionDate

TypeRequiredValuesDefault
StringyesYYYY-MM-DDDate of earliest Advance

The transaction date is generally the date of the earliet Advance. If, for instance, the finance charge begins beyond the date of the first advance, use this element to define the date the finance charge begins.

See Section (b)(2) Term of the Transaction.


🟦 Data.ActuarialOpts

TypeRequired
Objectno

This object is only considered if the APR Method specified is Actuarial.

Fields: 🔹ForceSemiMonth, 🔹ODI, 🔹SemiMonthlyFixedFraction, 🔹SinglePayFraction

Objects: None

🔹 Data.ActuarialOpts.ForceSemiMonth

TypeRequiredValuesDefault
Booleannotrue, falsefalse

The SCE strictly defines a semimonthly unit period as a majority of periods that have "every other payment a month apart and 15 days between payments" as the most common period of time. Since Appendix J loosely defines what a semimonthly period is and a reasonable use of the APR Tool application would allow a looser definition, the SCE now allows for overriding the strict definition with, for example, payments on the 1st and 15th being classified as having a unit period of Semimonth. If an institution wishes a looser definition of semimonth, this setting should be set to true. Otherwise, the strict rule applies.

🔹 Data.ActuarialOpts.ODI

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Loans that have used an odd days interest prepaid charge, common with mortgage loans, may use this field to adjust the APR to assume one unit period to the first payment. Otherwise, choose false.

🔹 Data.ActuarialOpts.SemiMonthlyFixedFraction

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field reflects an unintended consequence of Appendix J to Regulation Z's characterization of the fraction of a unit period for semimonthly loans. Applying the rules of Appendix J strictly to each payment in the payment stream results in an oscillating fraction of a unit period. For a constant fraction of a unit period, choose true. To apply the Federal Calendar to each payment, choose false. The latter should typically be selected with an irregular loan.

See Section (b)(5)(iii).

🔹 Data.ActuarialOpts.SinglePayFraction

TypeRequiredValuesDefault
StringnoInDays, InMonthsInDays

This field only applies to single advance, single payment transactions of term less than one year. For these loans, when the term of the loan is a number of months, Appendix J allows for the term of the loan to be expressed as either a number of months over twelve, or the number of actual 24-hour days in the loan over 365. For the former, use InMonths. For the latter, use InDays.

See Section (b)(5)(vi, vii).


🟦 Data.AmTableOpts

TypeRequired
Objectno

The fiedls of this object allow the calculation and disclosure of the APR to be adjusted in rarely-needed ways.

Fields: 🔹DollarDec, 🔹ForceDay 🔹RoundInt

Objects: None

🔹 Data.AmTableOpts.DollarDec

TypeRequiredValuesDefault
StringnoInteger in [3..9]4

Currency amounts within lines of the amortization schedule are disclosed as full floating numbers, which can produce long lines of amortization in the disclosure. The number of decimals for currency quantities may be trimmed to the number of decimal places indicated by this field. Note that this number does not affect the calculation. It merely affects to what number of decimals places to which the floating point number is disclosed. 9 means "do not trim".

🔹 Data.AmTableOpts.ForceDay

TypeRequiredValuesDefault
Stringno0, 29, 30, 310

End of month considerations may require that a payment's day was intended to be another day. For instance, if payments were intended to be made on the end of the month, and the first payment is in April, making this setting 31 causes the fed calendar to compute time as if the day of the payment was 31, rather than 30.

🔹 Data.AmTableOpts.RoundInt

TypeRequiredValuesDefault
StringnoNone, Down, Nearest, UpNone

If interest is rounded within the amortization schedule for US Rule APRs, set the rounding method here.


🟥 Data.Advances[]

TypeRequired
array of Advance Objectsyes

This array of Advance objects must have at least one member, and is used to specify the advances made to the borrower. The amount of each advance is equal to the total amount earning interest less any prepaid fees. One may think of these entries as streams of Amounts Financed (in the RegulationZ sense).

Fields: 🔸AmtFin, 🔸Date, 🔹LastDay, 🔹PPY, 🔹Term

Objects: None

🔸 Data.Advances[].AmtFin

TypeRequiredValues
StringyesCurrency

The proceeds to be advanced to the borrower less any prepaid fees for each of the Term advances is defined using this field.

🔸 Data.Advances[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

This field's value holds the date on which the advance is made. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, an advance date of January 2, 2021 would be specified as "Date" : "2021-01-02".

🔹 Data.Advances[].LastDay

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field is used to resolve ambiguitiess in subsequent advance dates when the Date falls on the last day of a month with fewer than 31 days. If the value of the Term field is 1, then the value of this field is ignored.

Set this field's value to true if the intent was to make subsequent advances occur on the last day of the month. A value of false indicates that subsequent advance dates will fall on the day number specified by the Date field.

🔹 Data.Advances[].PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for "payments per year", and in the case of the Advance object, determines the frequency for the advance stream. If the value of the Term field is 1, then this field is ignored.

🔹 Data.Advances[].Term

TypeRequiredValuesDefault
StringnoInteger1

The Term field determines the the number of advances to be included at the specified frequency (see Advance.PPY above), after which the advance stream is completed. The default value is 1.


🟦 Data.Construction

TypeRequired
Objectno

Loans which have a construction period require data to be passed using this object. All of the information used to define the construction period is contained in the following fields of the object:

Fields: 🔹AsPrepaid, 🔸EndDate, 🔹HalfCommitment, 🔸Interest, 🔸PermanentAttached, 🔹Prepaid

Objects: None

🔹 Data.Construction.AsPrepaid

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field is only applicable when the PermanentAttached field is true. If the permanent loan treats the construction interest as a prepaid finance fee, then set the value of this field to true.

On the other had, if the construction interest is not treated as a prepaid finance fee and is instead included as a stream of interest only payments during the construction period, then set the value of this field to false.

🔸 Data.Construction.EndDate

TypeRequiredValues
StringyesYYYY-MM-DD

The date on which the construction period terminates.

All dates must be in the form of "YYYY-MM-DD", and be 10 characters long. Hence, to end the construction period on July 4, 2021, the field would be specified as "EndDate" : "2021-07-04".

🔹 Data.Construction.HalfCommitment

TypeRequiredValuesDefault
Booleannotrue, falsetrue

During the construction period, if estimated interest is disclosed based upon half of the commitment amount, then set the value of this field to true. If interest is due on the entire commitment amount during the construction period, then set this value to false. Multiple advance construction loans are computed with this field set as true.

🔸 Data.Construction.Interest

TypeRequiredValues
StringyesCurrency

The total amount of construction interest.

🔸 Data.Construction.PermanentAttached

TypeRequiredValues
Booleantruetrue, false

Construction loans may be computed on their own, or they may be attached to a permanent loan which begins at the conclusion of the construction loan. If a permanent loan is attached to the construction loan, then set this field's value to true. If no permanent loan is attached to the construction loan, then set the field's value to false.

🔹 Data.Construction.Prepaid

TypeRequiredValuesDefault
StringyesCurrency0

This field holds the total prepaid charge for points and fees, excluding construction interest. This field need only be specified when the PermanentAttached field is false.


🟦 Data.PmtStreams[]

TypeRequired
array of PmtStream Objectsyes

One or more PmtStream objects are required to specify the loan's payment stream. For an equal payment loan, a single payment stream element is all that is required. For a balloon payment stream, you will need two. For highly irregular loans (skips, pickups, interest only, etc.) you will need many. All necessary data for each payment stream is contained in the object's fields, which are described below.

Fields: 🔸Begin, 🔹LastDay, 🔸Pmt, 🔹PPY, 🔹SemimonthlyDay, 🔹Term

Objects: None

🔸 Data.PmtStreams[].Begin

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the date on which this payment stream begins. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.PmtStreams[].LastDay

TypeRequiredValuesDefault
Booleannotrue, falsefalse

This field is used to resolve ambiguitiess in subsequent payment dates when the Begin date falls on the last day of a month with fewer than 31 days. If the value of the Begin field is not a valid date, then the value of this field is ignored.

Set this field's value to true if the intent was to make subsequent payments occur on the last day of the month. A value of false indicates that subsequent payment dates will fall on the day number specified by Begin.

As an example, if the calling application specifies a Begin of `2010-02-281, then subsequent payment dates for a monthly payment frequency will be:

  • on the 28th of each subsequent month if "LastDay" : false.
  • on the last day of each subsequent month if "LastDay : true.

🔸 Data.PmtStreams[].Pmt

TypeRequiredValues
StringyesCurrency

This field defines the principal and interest portion of the payment for each of the Term payments. If the total payment includes any protection products such as MOB life or debt protection fees, then these amounts must be removed as they are not a part of the principal and interest portion of the payment.

🔹 Data.PmtStreams[].PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for "payments per year", and as one might surmise, determines the payment frequency for the payment stream. If the value of the Date field is not a valid date, then the value of this field is ignored.

🔹 Data.PmtStreams[].SemimonthlyDay

TypeRequiredValuesDefault
StringnoInteger in [0..31]0

When specifying a semimonthly payment stream, the day number on which the first payment is made determines the day number for all of the following odd numbered payments. If you omit this field or specify a value of 0, then the even numbered payments will be generated using the default method within the SCE.

If you wish to specify the day number on which even numbered payments fall (overriding the default method used in the SCE), then set the value of this field to the desired day number. Setting the value of this field to 31 will cause all even payments to fall on the last day of the month.

As an example, if you want to specify a semi-monthly payment stream beginning on January 1, 2019 with payments that fall on the 1st and 15th of each month for 24 payments, the object should look something like this:

{
  "PmtStreams" : [
    {
      "Begin" : "2019-01-01",
      "Term" : "24",
      "PPY" : "24",
      "SemimonthlyDay" : "15"
    }
  ]
}

🔹 Data.PmtStreams[].Term

TypeRequiredValuesDefault
StringnoInteger >= 11

The term field indicates the the number of payments to be made at the specified payment frequency (see PmtStream.PPY above), after which the payment stream is completed. The default value is 1. If the value of the PmtStream.Begin field is not a valid date, then the value of this field is ignored, unless it is a replacement payment using the NNNN-00-00 date format.


🟦 Data.Premiums[]

TypeRequired
array of Premium Objectsno

Fields: 🔸Date, 🔹Freq, 🔹LastDay, 🔸Prem, 🔹Term

Objects: None

Only loans that have premiums occurring on dates not equal to the payment dates should use this element for expressing the premium. In the case of TruStage, for example, premiums are paid monthly on the same day of the month, regardless of when payments are made. In this case, please use the Premiums array for specifying loan premiums.

🔸 Data.Premiums[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

This field contains the date on which this premium stream begins. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

🔹 Data.Premiums[].Freq

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 1212

The frequency of premiums expressed as a number of premiums per year.

🔹 Data.Premiums[].LastDay

TypeRequiredValuesDefault
Booleannotrue, falsefalse

Was the premium intended for the last day of the month?

🔸 Data.Premiums[].Prem

TypeRequiredValues
StringyesCurrency

The Premium amount.

🔹 Data.Premiums[].Term

TypeRequiredValuesDefault
StringnoInteger >= 11

The number of premiums in the stream.


🟦 Data.UnitPeriod

TypeRequired
Objectno

If this object is not present in the request, then the SCE will compute the unit period. Including this element instructs the SCE to use the unit period specified by the calling application.

As an example, if you wanted to specify a biweekly unit period, then you would include the following in the request:

{
  "UnitPeriod" : {
    "Period" : "Week",
    "Multiple" : "2"
  }
}

Similarly, if you wanted to specify a quarterly unit period, then you would include the follwing in the request:

{
  "UnitPeriod" : {
    "Period" : "Month",
    "Multiple" : "3"
  }
}

Fields: 🔹Multiple, 🔹Period

Objects: None


🔹 Data.UnitPeriod.Multiple

TypeRequiredValuesDefault
StringnoInteger1

This field's value defines the integral number of standard unit periods in the defined unit period.

🔹 Data.UnitPeriod.Period

TypeRequiredValuesDefault
StringyesDay, Week, Month, Year, or Semimonthn/a

This field defines the standard unit period. The unit period will be some integral multiple of this standard unit period, as specified by the Multiple field above.


🟦 Data.UsRuleOpts

TypeRequired
Objectno

This object is only relevant if the APR Method specified is UsRule. The fields of this object allow the calling application to configure the parameters of the US Rule APR calculation.

Fields: 🔹Calendar, 🔹CalendarOption, 🔹Divisor, 🔹PremBeforePmt

Objects: None

🔹 Data.UsRuleOpts.Calendar

TypeRequiredValuesDefault
StringnoActualDay, UnitPeriod, FedCalendarActualDay

Actual day, unit period, and Federal calendars are supported with US Rule interest accrual.

🔹 Data.UsRuleOpts.CalendarOption

TypeRequiredValuesDefault
StringnoNone, True360, True365, Midnight366None

True360 means that each month is assumed to have 30 days in all respects. Typically, a loan computes the actual number of days from the Advance to the first payment to compute the Term Factor to the first payment.

True365 means that February 29th is not allowed, both in counting days and assessing the days per year divisor.

Midnight366 only applies to Actual/366 calendars, and means that a day is the time from midnight of one day to midnight of the other. The number of days between December 19th 2007 and January 19th 2008 would be 13 Days in a 365 year plus 18 days in a 366 day year, resulting in a Term Factor of 13/365+18/366. An Actual/366 calculation not using the Midnight366 setting would compute the term factor as 12/365+19/366.

🔹 Data.UsRuleOpts.Divisor

TypeRequiredValuesDefault
Stringno360, 365, 366, PerPeriod, 365_25, VarDPY365

Choose the divisor, or number by which to divide the day count to produce term factors.

360 means take the computed days to the first payment and divide them by 360 to compute the term factor.

365 means take the computed days to the first payment and divide them by 365.

366 is understood to mean 366 only in a leap year. Any days accruing interest in a non-leap year use a 365 divisor. This setting may only be used with ActualDay calendars.

PerPeriod means 360 for monthly and bimonthly periods, 364 for weekly multiples, Quarterly, and SemiAnnual repayments, and 365 for annual loans.

VarDPY is understood to mean that the computed days to the first payment are divided by the number of days in the month of the transaction date, multiplied by twelve.

365_25 means take the computed days to the first payment and divide them by 365.25 to compute the term factor. This setting may only be used with ActualDay calendars.

🔹 Data.UsRuleOpts.PremBeforePmt

TypeRequiredValuesDefault
Booleannotrue, falsetrue

Are premiums processed before or after payments? true means premiums are amortized before payments, false means payments are processed before premiums.


Apr Module - Response

The Data object for a response from the Apr module is defined below, in the order the fields are returned:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: None

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Apr, 🟦 TestResults, 🟥 Loan, 🟥 AmTable

🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Apr",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "Apr",
  "Data" : {
    "Errors" : [
      "Data.Advances[] (Array) not found.",
      "Data.PmtStreams[] (Array) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}   

🟥 Data.Apr

TypeRequired
Objectyes

Fields: 🔸Value, 🔸Method, 🔹Accrual, 🔹UnitPeriod, 🔹UnitPeriodBase, 🔹UnitPeriodMult, 🔹PeriodsPerYear

Objects: None

The APR data is contained in the fields of this object.

🔸 Data.Apr.Value

TypeRequiredValues
StringyesNumber in [-99.999...600]

The numeric value of the computed Apr, expressed as a percentage.

🔸 Data.Apr.Method

TypeRequiredValues
StringyesActuarial, USRule, EU_APR, XIRR, XIRR360, IRR, YieldIRR

This field returns the Apr method used to compute the numeric Apr value.

🔹 Data.Apr.Accrual

TypeRequiredValues
StringnoText - See below

US Rule APR's will disclose the precise method of interest accrual in this element. All of the variation is in regards to "Term factors". All US Rule interest accrual is governed by the following formula: Interest = APR/100 Term Factor Balance. Each accrual method has its own rules for generating these term factors, which represent how many years interest has been accruing.

🔹 Data.Apr.UnitPeriod

TypeRequiredValues
StringnoText - See below

The value in this field concatenates the Apr.UnitPeriodMult and Apr.UnitPeriodBase into one value. For instance, when with "Base : "Month" and "Mult" : "1", this field's value will be is { "UnitPeriod" : "1_Month" }.

This field will only be present when the Apr method is Actuarial, EU, or US Rule with a unit period calendar.

🔹 Data.Apr.UnitPeriodBase

TypeRequiredValues
StringnoDay, Week, Month, Year

The Unit Period for Actuarial, EU, and US Rule (using a unit period calendar) APRs have a basic unit of measurement. The value of this field discloses the basic unit of measurement.

This field will only be present when the Apr method is Actuarial, EU, or US Rule with a unit period calendar.

🔹 Data.Apr.UnitPeriodMult

TypeRequiredValues
StringnoInteger

The unit multiple composing the Unit Period. For instance, if the unit period were 6 months, the Base is Month, the Mult is 6.

This field will only be present when the Apr method is Actuarial, EU, or US Rule with a unit period calendar.

🔹 Data.Apr.PeriodsPerYear

TypeRequiredValues
StringnoNumber

The value of this field holds the number of periods per year.

This field will only be present when the Apr method is Actuarial or US Rule with a unit period calendar.


🟦 Data.TestResults

TypeRequired
Objectno

The TestResults object is present if the calling application has specified one of the following: (i) TestApr, (ii) TestFinChg, or (iii) TestTotPmt. The child fields of this object descibe the analysis of each of the three possible tests.

Fields: None

Objects: 🟦 Apr, 🟦 FinChg, 🟦 TotPmt

🟦 Data.TestResults.Apr

TypeRequired
Objectno

This object is only present if the request provided a value greater than zero in for the value of the TestApr field.

Fields: 🔹LoanType, 🔹MultAdv, 🔹IrregPeriod, 🔹IrregPmt, 🔸Value, 🔸TestValue, 🔸Difference, 🔹Tolerance, 🔹InCompliance, 🔹OnCusp

Objects: None

🔹 Data.TestResults.Apr.LoanType

TypeRequiredValues
StringnoRegular, Irregular

The LoanType is either Regular or Irregular. All loans are assumed to be Regular unless they contain multiple advances, an irregular period other than the first, or an Irregular Payment other than the first or final, all of which are defined below. Note: Skipped payment loans are irregular loans, because, though the payments are regular, the periods are not.

This field is only present when the APR method is Actuarial or US Rule.

🔹 Data.TestResults.Apr.MultAdv

TypeRequiredValues
Booleannotrue, false

If a loan has more than one advance, this value of this field will be true; otherwise, it is false.

This field is only present when the APR method is Actuarial or US Rule.

🔹 Data.TestResults.Apr.IrregPeriod

TypeRequiredValues
Booleannotrue, false

If a loan has an irregular period between payments, this value of this field is true; otherwise, it is false. An irregular period is any period between payments not a unit period. (See 12 C.F.R. § 1026.22(a)(3))

This field is only present when the APR method is Actuarial or US Rule.

🔹 Data.TestResults.Apr.IrregPmt

TypeRequiredValues
Booleannotrue, false

If a loan has an irregular payment, this value of this field is true; otherwise, it is false. First and final payments are not considered in this assessment. A loan may only have one payment amount from the 2nd through the N-1st payments. If two or more payment amounts exist for these middle payments, this field will be true.

This field is only present when the APR method is Actuarial or US Rule.

🔸 Data.TestResults.Apr.Value

TypeRequiredValues
StringyesNumber in [-99.999...600]

The APR computed by the SCE.

🔸 Data.TestResults.Apr.TestValue

TypeRequiredValues
StringyesNumber in [-99.999...600]

The APR specified by the request which is to be tested for compliance.

🔸 Data.TestResults.Apr.Difference

TypeRequiredValues
StringyesNumber in [-99.999...600]

The magnitude of the difference between the test APR and the computed APR.

🔹 Data.TestResults.Apr.Tolerance

TypeRequiredValues
StringnoNumber in [-99.999...600]

The tolerance permitted by RegZ for the type of loan in question. In the United States of America, regular loans have a tolerance of 0.125, while irregular loans have a tolerance of 0.250. See official staff commentary 226.22(a)(1) - (3)

This field is only present when the APR method is Actuarial or US Rule.

🔹 Data.TestResults.Apr.InCompliance

TypeRequiredValues
Booleannotrue, false

This value of this field is true or false depending on whether the Difference is greater than the Tolerance or not. If the difference is greater than the allowed tolerance, this element returns false. Otherwise, the APR is within compliance and therefore has true returned.

This field is only present when the APR method is Actuarial or US Rule.

🔹 Data.TestResults.Apr.OnCusp

TypeRequiredValues
Booleannotrue, false

If a test apr is exactly equal to the tolerance, the OnCusp field is true; otherwise, it is false. Though the loan is within compliance, a loan far enough out of compliance to be on the cusp of acceptability may want to be flagged for closer scrutiny.

This field is only present when the APR method is Actuarial or US Rule.


🟦 Data.TestResults.FinChg

TypeRequired
Objectno

This object is only present if the request provided a value greater than zero in for the value of the TestFinChg field.

Fields: 🔸Value, 🔸TestValue, 🔸Difference

Objects: None

🔸 Data.TestResults.FinChg.Value

TypeRequiredValues
StringyesCurrency

The Finance Charge computed by the SCE.

🔸 Data.TestResults.FinChg.TestValue

TypeRequiredValues
StringyesCurrency

The Finance Charge specified by the request which is to be tested for compliance.

🔸 Data.TestResults.FinChg.Difference

TypeRequiredValues
StringyesCurrency

The magnitude of the difference between the test Finance Charge and the computed Finance Charge.


🟦 Data.TestResults.TotPmt

TypeRequired
Objectno

This object is only present if the request provided a value greater than zero in for the value of the TestTotPmt field.

Fields: 🔸Value, 🔸TestValue, 🔸Difference

Objects: None

🔸 Data.TestResults.TotPmt.Value

TypeRequiredValues
StringyesCurrency

The Total of Payments computed by the SCE.

🔸 Data.TestResults.TotPmt.TestValue

TypeRequiredValues
StringyesCurrency

The Total of Payments specified by the request which is to be tested for compliance.

🔸 Data.TestResults.TotPmt.Difference

TypeRequiredValues
StringyesCurrency

The magnitude of the difference between the test Total of Payments and the computed Total of Payments.


🟥 Data.Loan

TypeRequired
Objectyes

Fields: 🔸TransactionDate, 🔸AmountFinanced, 🔸NumAdvances, 🔹AdvPresBal, 🔸TotPmt, 🔸NumPmts, 🔹TotPmtPresBal

Objects: None

🔸 Data.Loan.TransactionDate

TypeRequiredValues
StringyesYYYY-MM-DD

The Transaction Date is one of three values, depending on the input: The date entered as the TransactionDate from the request, the date of the first advance if the TransactionDate was omitted, or one unit period before the first payment in the case of loans with odd days interest.

🔸 Data.Loan.AmountFinanced

TypeRequiredValues
StringyesCurrency

The total amount financed for the loan.

🔸 Data.Loan.NumAdvances

TypeRequiredValues
StringyesInteger

The value of this field represents the number of advances in the specified loan.

🔹 Data.Loan.AdvPresBal

TypeRequiredValues
StringnoNumber - Floating

The value of this field is the present value of all advances made in the specified loan.

This field is only present when the APR method is Actuarial.

🔸 Data.Loan.TotPmt

TypeRequiredValues
StringyesCurrency

The total of all payments made in the requested loan.

🔸 Data.Loan.NumPmts

TypeRequiredValues
StringyesInteger

The value of this field represents the number of payments made in the specified loan.

🔹 Data.Loan.TotPmtPresBal

TypeRequiredValues
StringnoNumber - Floating

The value of this field is the present value of all payments made in the specified loan.

This field is only present when the APR method is Actuarial.


🟥 Data.AmTable

TypeRequired
Objectyes

This object holds the amortization table as well as important error function results as fields.

Fields: 🔸Error, 🔸ErrorDown, 🔸ErrorUp

Objects: 🟥AmLines

🔸 Data.AmTable.Error

TypeRequiredValues
StringyesNumber - Floating

The balance at the end of amortization using the disclosed APR. The correct APR is the rate which produces the smallest balance after amortization. Therefore, the magnitude of both ErrorDown and ErrorUp fields should be greater than the value of this field.

🔸 Data.AmTable.ErrorDown

TypeRequiredValues
StringyesNumber - Floating

The balance at the end of amortization using the disclosed APR less one rate unit. As an example, if the disclosed APR is 10.000%, then the ErrorDown field would contain the error after amortizing the loan with a rate of 9.999%.

The magnitude of this value should never be less than the magnitude of the Error field, because the rate with a minimum error magnitude defines the correct APR.

🔸 Data.AmTable.ErrorUp

TypeRequiredValues
StringyesNumber - Floating

The balance at the end of amortization using the disclosed APR plus one rate unit. As an example, if the disclosed RegZAPR is 10.000%, then the ErrorUp field would contain the error after amortizing the loan with a rate of 10.001%.

The magnitude of this value should never be less than the magnitude of the Error field, because the rate with a minimum error magnitude defines the correct APR.


🟥 Data.AmTable.AmLines[]

TypeRequired
array of AmLine objectsyes

This field is an array of AmLine objects, which describe each amortization line in the schedule.

Fields: 🔸Idx, 🔸Date, 🔹Adv, 🔹Pmt, 🔹Prem, 🔹Unit, 🔹Frac, 🔹Factor, 🔹PresVal, 🔹PresValSum, 🔹BegBal, 🔹IntPaid, 🔹IntUnPaid, 🔹EndBal

Objects: None

🔸 Data.AmTable.AmLines[].Idx

TypeRequiredValues
StringyesInteger

The index of the amortization event, starting with zero.

🔸 Data.AmTable.AmLines[].Date

TypeRequiredValues
StringyesYYYY-MM-DD

The date of the amortization event.

🔹 Data.AmTable.AmLines[].Adv

TypeRequiredValues
StringnoCurrency

The amount of the advance.

This field is only present if this AmLine object is an advance event.

🔹 Data.AmTable.AmLines[].Pmt

TypeRequiredValues
StringnoCurrency

The payment amount.

This field is only present if this AmLine object is a payment event.

🔹 Data.AmTable.AmLines[].Prem

TypeRequiredValues
StringnoCurrency

The premium amount.

This field is only present if this AmLine object is a premium event.

🔹 Data.AmTable.AmLines[].Unit

TypeRequiredValues
StringnoInteger

The number of full unit periods from this event to the transaction date.

See 12 C.F.R. § 1026, Appendix J(b)(5)).

This field is only present when the APR method is Actuarial or US Rule using the Federal Calendar.

🔹 Data.AmTable.AmLines[].Frac

TypeRequiredValues
StringnoText

The number of fractional unit periods from this event to the transaction date.

See 12 C.F.R. § 1026, Appendix J(b)(5)).

This field is only present when the APR method is Actuarial or US Rule using the Federal Calendar.

🔹 Data.AmTable.AmLines[].Factor

TypeRequiredValues
StringnoNumber - Floating

The Term Factor used to compute interest. (APR/100) Term Factor BegBal = New Interest.

This field is only present when the APR method is not Actuarial.

🔹 Data.AmTable.AmLines[].PresVal

TypeRequiredValues
StringnoNumber - Floating

The present value of the event cash at the time of the transaction date.

This field is only present when the APR method is not US Rule.

🔹 Data.AmTable.AmLines[].PresValSum

TypeRequiredValues
StringnoNumber - Floating

The running total present value sum.

This field is only present when the APR method is not US Rule.

🔹 Data.AmTable.AmLines[].BegBal

TypeRequiredValues
StringnoNumber - Floating

The beginning balance before amortizing this event.

This field is only present when the APR method is US Rule.

🔹 Data.AmTable.AmLines[].IntPaid

TypeRequiredValues
StringnoNumber - Floating

The amount of interest paid at this event.

This field is only present when the APR method is US Rule.

🔹 Data.AmTable.AmLines[].IntUnPaid

TypeRequiredValues
StringnoNumber - Floating

The amount of unpaid interest remaining after this event is amortized.

This field is only present when the APR method is US Rule.

🔹 Data.AmTable.AmLines[].EndBal

TypeRequiredValues
StringnoNumber - Floating

The ending balance after amortizing this event.

This field is only present when the APR method is US Rule.


APY Calculation

The APY Calculation provides an independent verification for the Federal Truth in Savings Act's Annual Percentage Yield on a deposit instrument. By supplying key pieces of data, the SCE will pass back an exhaustive analysis of the APY for the deposit in question.

Sample Request

The following is a sample SCE request for an Apy calculation:

{
  "Module": "Apy",
  "Data": {
    "Compounding": "Daily",
    "Decimals": "4",
    "Statement": "Monthly",
    "Principal": "1000.00",
    "Interest": "61.68",
    "InvestDate": "2014-04-16",
    "MaturityDate": "2015-04-16"
  }
}

Sample Response

The following example is the response returned from the SCE for the request provided at the beginning of the previous section.

{
  "Result": 200,
  "Module": "Apy",
  "Data": {
    "Errors": [],
    "Warnings": [],
    "Apy": "6.1680%",
    "Formula": "General",
    "CompoundingFreq": "Daily",
    "CompoundingDays": "1",
    "StatementFreq": "Monthly",
    "StatementDays": "30",
    "InvestDate": "2014-04-16",
    "MaturityDate": "2015-04-16",
    "DaysToMaturity": "365",
    "Principal": "1000.00",
    "Interest": "61.68"
  }
}

APY Module - Request

The fields of the Data object supported by a Apy module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Compounding, 🔹Decimals, 🔸Interest, 🔹InvestDate, 🔹MaturityDate, 🔸Principal, 🔹Statement

Objects: 🟦 Format

The fields of the Data object supported are defined in alphabetical order below:

🔹 Data.Compounding

TypeRequiredValuesDefault
StringnoAnnual, Semiannual, Quarterly, Bimonthly, Monthly, Biweekly, Weekly, DailyDaily

The Compounding field specifies the frequency that interest is compounded. If the deposit compounds continuously, then specify a value of Daily.

🔹 Data.Decimals

TypeRequiredValuesDefault
Stringno3, 4, 53

The number of decimal places of accuracy for the disclosed APY is determined by the value of this field.

🔸 Data.Interest

TypeRequiredValuesDefault
StringyesCurrencyn/a

The total interest earned on the principal

(a) for the entire duration of the deposit if the compounding frequency is greater than or equal to the statement disclosure frequency, or

(b) for the statement period if statements are disclosed more frequently than the deposit is compounded.

🔹 Data.InvestDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

The value of this optional field contains the date on which interest accrual begins. If statements are disbursed more frequently than interest is compounded, then you may omit this element. As an example, if interest is compunded annually and statements are disclosed monthly, then this element may be omitted.

🔹 Data.MaturityDate

TypeRequiredValuesDefault
StringnoYYYY-MM-DDn/a

This optional field holds the date on which the deposit matures. If statements are disbursed more frequently than interest is compounded, then you may omit this element. As an example, if interest is compunded annually and statements are disclosed monthly, then this element may be omitted.

🔸 Data.Principal

TypeRequiredValuesDefault
StringyesCurrency >= 0n/a

The value of this field specifies the total amount earning interest.

🔹 Data.Statement

TypeRequiredValuesDefault
StringnoAnnual, Semiannual, Quarterly, Bimonthly, MonthlyMonthly

The Statement field determines the frequency that statements are provided to the customer by the deposit institution.

The Data object for a response from the Apy module is defined below, in the order the fields are returned:


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


APY Module - Response

The Data object for a response from the Apy module is defined below, in the order the fields are returned:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔸Apy, 🔸Formula, 🔸CompoundingFreq, 🔸CompoundingDays, 🔸StatementFreq, 🔸StatementDays, 🔸Term, 🔹InvestDate, 🔹MaturityDate, 🔹DaysToMaturity, 🔸Principal, 🔸Interest

Objects: 🟥 Errors[], 🟥 Warnings[],

🔸 Data.Apy

TypeRequiredValues
StringyesNumber in [-99.999...600]

The APY, as defined in Appendix A to Part 1030 of Truth in Savings, and computed by the SCE.

🔸 Data.Formula

TypeRequiredValues
StringyesGeneral, Special

The Formula field describes the formula used to compute the APY. The General formula is described in Appendix A to Part 1030, Part I Section A. The Special forumula is described in Appendix A to Part 1030, Part II Section B. Note that the Special formula is only used when statements are sent more frequently than the deposit is compounded.

🔸 Data.CompoundingFreq

TypeRequiredValues
StringyesDaily, Weekly, BiWeekly, Monthly, BiMonthly, Quarterly, SemiAnnual, Annual

The frequency that interest is compounded.

🔸 Data.CompoundingDays

TypeRequiredValues
StringyesInteger > 0

The value of this field specifies the number of days in each compounding period.

🔸 Data.StatementFreq

TypeRequiredValues
StringyesMonthly, BiMonthly, Quarterly, SemiAnnual, Annual

The value of this field specifies the frequency that statements are sent to the customer by the deposit institution.

🔸 Data.StatementDays

TypeRequiredValues
StringyesInteger > 0

The number of days in each statement period.

🔸 Data.Term

TypeRequiredValues
StringyesInteger > 0

The Term is the number of unit periods (as specified in the TermUnits field) between the deposit date and the CD's maturity date.

🔹 Data.InvestDate

TypeRequiredValues
StringnoYYYY-MM-DD

Returns the investment date which was passed to the SCE. If no investment date was specified, then this field will not appear in the output.

🔹 Data.MaturityDate

TypeRequiredValues
StringnoYYYY-MM-DD

Returns the maturity date which was passed to the SCE. If no maturity date was specified, then this field will not appear in the output.

🔹 Data.DaysToMaturity

TypeRequiredValues
StringnoYYYY-MM-DD

The number of days between the investment and maturity dates.

🔸 Data.Principal

TypeRequiredValues
StringyesCurrency >= 0

The value of this field specifies the total amount earning interest.

🔸 Data.Interest

TypeRequiredValues
StringyesCurrency

This field holds the value of the Interest field passed into the SCE.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Apy",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "Apy",
  "Data" : {
    "Errors" : [
      "Data.Interest (StringFloat) not found.",
      "Data.Principal (StringFloat) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}       

High Cost Mortgages (HCM)

A loan is considered a high-cost mortgage if it is a consumer credit transaction that is secured by the consumer's principal dwelling (with a few minor exclusions) and one or more of the following conditions are met:

  1. the APR test fails;
  2. the points and fees test fails; or
  3. the prepayment penalty test fails.

The HCM module will determine if an already computed loan is considered a high-cost mortgage. The calling application must furnish the SCE with the required information, and then the SCE will perform the three required tests mentioned above, returning the loan's status in its output.

Please note that the HCM module requires the use of the Average Prime Offer Rates (APOR) tables, which are published weekly by the federal government. The two files (one for fixed rates and one for adjustable rates) are available for download at this web site. Please note that it is necessary that these files be updated weekly, or else the SCE will not be able to determine if a loan is a HCM for loans whose lock in dates fall outside the range of dates provided in the APOR files. If you are using a version of the SCE that is hosted by J. L. Sherman and Associates, Inc., then the APOR files will be automatically updated weekly for your use.

Also note that there are two values specified in the HCM points and fees test which will adjust annually. These values are stored in a file named hcm.ini. This file needs to be located in the same directory as the APOR files mentioned above. Similar to the APOR files, this file will be updated automatically for your use if you are using a version of the SCE which is hosted by J. L. Sherman and Associates, Inc.

Sample Request

The following is a sample SCE request for a Hcm calculation:

{
  "Module" : "Hcm",
  "Data" : {
    "LockInDate" : "2022-03-09",
    "LienType" : "first",
    "RateType" : "fixed",
    "Dwelling" : "personal_property",
    "Term" : "360",
    "PPY" : "12",
    "LoanAmount" : "255102.04",
    "AmountFinanced" : "255102.04",
    "Apr" : "9.91",
    "FinanceCharge" : "292688.40",
    "InterestCharge" : "266366.36",
    "FederalStatePremiumsFees" : "0",
    "PMI" : {
      "After" : "20625.00",
      "AtOrBefore" : "625.00",
      "MaxAllowedAtOrBefore" : "7653.06"
    },
    "ThirdPartyCharges" : "0.00",
    "DiscountPoints" : {
      "Points" : "2.0",
      "FullRate" : "6.000",
      "Fee" : "5102.04"
    },
    "LoanOriginatorFees" : "0.00",
    "RealEstate" : {
      "Fees" : "0.00",
      "FinanceAmt" : "0.00"
    },
    "CreditInsurance" : {
      "Premiums" : "0.00",
      "FinanceAmt" : "0.00"
    },
    "PrepaymentPenalty" : {
      "Max" : "0.00",
      "Total" : "0.00",
      "FinanceAmt" : "0.00",
      "After36Months" : false,
      "AmountPrepaid" : "0.00"
    }
  }
}

Sample Response

{
    "Result": 200,
    "Module": "Hcm",
    "Data": {
        "Errors": [],
        "Warnings": [],
        "IsHcm": false,
        "Triggers": {
            "Apr": false,
            "PointsFees": false,
            "Prepayment": false
        },
        "AprTrigger": {
            "Date": "2022-03-07",
            "Apor": "3.830",
            "Spread": "6.500",
            "Difference": "-0.420"
        },
        "PointsFeesTrigger": {
            "TotalLoanAmount": "255102.04",
            "TotalPointsFees": "5072.04",
            "MaxPointsFees": "12755.10"
        },
        "PrepaymentTrigger": {
            "After36Months": false,
            "Total": "0.00",
            "Max": "0.00"
        }
    }
}

Hcm Module - Request

The fields of the Data object supported by a Hcm module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔸AmountFinanced, 🔸Apr, 🔹DataPath, 🔸Dwelling, 🔹FederalStatePremiums, 🔸FinanceCharge, 🔸InterestCharge, 🔸LienType, 🔸LoanAmount, 🔹LoanOriginatorFees, 🔸LockInDate, 🔹PPY, 🔸RateType, 🔹Term, 🔹TermInYears, 🔹ThirdPartyCharges

Objects: 🟦 CreditInsurance, 🟦 DiscountPoints, 🟦 Format, 🟦 PMI, 🟦 PrepaymentPenalty, 🟦 RealEstate

The fields of the Data object supported by a Hcm module request are defined in alphabetical order below:

🔸 Data.AmountFinanced

TypeRequiredValues
StringyesCurrency > 0

As defined in Regulation Z (Section 1026.18(b)), the amount of credit provided to the borrower or on the borrower's behalf. As an example, the SCE's Loan module returns the loan's Amount Financed in the Data.FedBox.AmtFin field.

🔸 Data.Apr

TypeRequiredValues
StringyesNumber in [-99.999...600]

This field's value contains the APR applicable to the transaction, which is not the same as the Regulation Z APR. The APR applicable to the transaction is determined as follows (from Section 1026.32(a)(3)):

  1. If the rate plan is fixed, then the APR equals the interest rate in effect as of the date the interest rate for the transaction is set.
  2. If the rate plan varies based on an index, then the APR equals the maximum margin allowed during the term of the loan plus the value of the index rate in effect as of the date the interest rate for the transaction is set.
  3. If the rate plan varies and is \emph{not} based on an index (case 2 above), then the APR equals the maximum interest rate tat may be imposed during the term of the loan.

🔹 Data.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔸 Data.Dwelling

TypeRequiredValues
StringyesOther, Personal_property

If this is a first Lien, then if the dwelling type is personal property and the loan amount is less than fifty thousand, then the rate spread is 8.5%. For all other first lien loans, the rate spread is 6.5%.

🔹 Data.FederalStatePremiums

TypeRequiredValuesDefault
StringnoCurrency >= 00

The value of this element is the sum of all federal and state mortgage insurance premiums and guarantee fees that are included in the Finance Charge (see Section 1026.32(b)(1)(i)(B)).

🔸 Data.FinanceCharge

TypeRequiredValues
StringyesCurrency >= 0

As defined in Regulation Z (Section 1026.4), the dollar amount that the credit will cost the borrower. As an example, the SCE's Loan module returns the loan's Finance Charge in the Data.FedBox.FinChg field.

🔸 Data.InterestCharge

TypeRequiredValues
StringyesCurrency >= 0

The value of this field holds the total interest accrued during the term of the loan, assuming the borrower will make all scheduled payments (see Section 1026.32(b)(1)(i)(A)). As an example, the SCE's Loan module returns the loan's Interest Charge in the Data.Moneys.Interest field.

🔸 Data.LienType

TypeRequiredValues
StringyesFirst, Subordinate

The type of lien plays a part in determining the amount over the APOR (called the rate spread) at which time a loan's APR is considered a HCM. For first-lien loans, that value is 6.5% or 8.5% (depending upon the loan amount and dwelling type); for subordinate-lien loans, that value is 8.5%.

🔸 Data.LoanAmount

TypeRequiredValues
StringyesCurrency >= 0

The Loan Amount is the face amount of the note (i.e., the principal balance).

🔹 Data.LoanOriginatorFees

TypeRequiredValuesDefault
StringnoCurrency >= 00

The value of this field represents all compensation paid directly or indirectly by a consumer or creditor to a loan originator. See Section 1026.32(b)(1)(ii).

🔸 Data.LockInDate

TypeRequiredValues
StringyesYYYY-MM-DD

The value of this field holds the date on which the interest rate of the loan was locked in. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

The lock in date is used to lookup the APOR rate from the appropriate file. Each row of the file begins with a date, and the row which will be used will have a date which is either on the lock in date, or does not preceed it by more than 6 days. Since the rates are updated weekly, there should never be more than six days between the date of the row used and the specified lock in date.

If the SCE can not find a row in the APOR file which is appropriate for use with the specified lock in date, then an error message will be returned informing the calling application.

🔹 Data.PPY

TypeRequiredValuesDefault
Stringno1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for "payments per year", and specifies the payment frequency for the initial fixed rate period of the given loan. The default value of 12 will result ina loan with an initial fixed rate period of 12 payments per year. If the loan in question uses a payment frequency for the initial fixed rate period other than monthly, specify it using this field.

🔸 Data.RateType

TypeRequiredValues
StringyesAdjustable, Fixed

The APOR is looked up in one of two tables, determined by the loan's rate type. If the loan uses a fixed rate, then the SCE will look-up the APOR from the YieldTableFixed.txt file. If the loan uses a variable or adjustable rate, then the SCE will look-up the APOR from the YieldTableAdjustable.txt file.

🔹 Data.Term

TypeRequiredValuesDefault
StringnoInteger > 0n/a

The value of this field holds the number of payments in the initial fixed rate period of the loan. If the loan uses a fixed rate, then this is equal to the total number of payments in the loan term.

Note that the calling application must specify either the Term (and PPY) or TermInYears field (below).

Note that the calling application must specify either the Term and PPY fields (above) or TermInYears.

🔹 Data.TermInYears

TypeRequiredValuesDefault
Stringno[1..50]n/a

The value of this field holds the term of the initial fixed rate period of the loan, in whole years. Valid terms range from 1 year to 50 years, inclusive.

🔹 Data.ThirdPartyCharges

TypeRequiredValuesDefault
StringnoCurrency >= 00

This field holds the sum of all bona fide third-party charges included in the Finance Charge, as defined in Section 1026.32(b)(1)(i)(D).

🟦 Data.CreditInsurance

TypeRequired
Objectno

If credit life, credit disability, credit unemployment, or credit property insurance are included in the loan (or any other life, accident, health, or loss-of-income insurance for which the creditor is a beneficiary), then this object should be included in the request with its fields set as appropriate. See Section 1026.32(b)(1)(iv).

Fields: 🔹Premiums, 🔹FinanceAmt

Objects: None

🔹 Data.CreditInsurance.Premiums

TypeRequiredValuesDefault
StringnoCurrency >= 00

The total of all credit life, credit disability, credit unemployment, or credit property insurance premiums.

🔹 Data.CreditInsurance.FinanceAmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

The value of this field specifies the amount of the above specified premiums and/or fees which were financed.


🟦 Data.DiscountPoints

TypeRequired
Objectno

If a loan features discount points, pass the appropriate data using the fields of this object.

Fields: 🔹Fee, 🔹FullRate, 🔹Points

Objects: None

🔹 Data.DiscountPoints.Fee

TypeRequiredValuesDefault
StringnoCurrency >= 00

The total fee due for the discounted interest rate.

🔹 Data.DiscountPoints.FullRate

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]0

The value of this field specifies the non-discounted rate, or the interest rate without any discount.

🔹 Data.DiscountPoints.Points

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]0

The value of this field specifies the number of bona fide discount points paid by the borrower. According to Section 1026.32(b)(3)(i)(D), a bona fide discount point "means an amount equal to 1 percent of the loan amount paid by the customer that reduces the interest rate".


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value for this field is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


🟦 Data.PMI

TypeRequired
Objectno

Hcm requests which include private mortgage insurance require data to be passed using this object.

Fields: 🔹After, 🔹AtOrBefore, 🔹MaxAllowedAtOrBefore

Objects: None

🔹 Data.PMI.After

TypeRequiredValuesDefault
StringnoCurrency >= 00

This field specifies the private mortgage insurance premiums payable after consummation. See Section 1026.32(b)(1)(i)(C)(1).

🔹 Data.PMI.AtOrBefore

TypeRequiredValuesDefault
StringnoCurrency >= 00

The value of this field represents private mortgage insurance premiums paid at or before consummation. See Section 1026.32(b)(1)(i)(C)(2).

🔹 Data.PMI.MaxAllowedAtOrBefore

TypeRequiredValuesDefault
StringnoCurrency >= 00

The maximum private mortgage insurance premium paid at or before consummation allowable under Section 203(c)(2)(A) of the National Housing Act. See Section 1026.32(b)(1)(i)(C)(2).


🟦 Data.PrepaymentPenalty

TypeRequired
Objectno

If the loan features a prepayment penalty, include this object and its relevant fields.

Fields: 🔹After36Months, 🔹AmountPrepaid, 🔹FinanceAmt, 🔹Max, 🔹Total

Objects: None

🔹 Data.PrepaymentPenalty.After36Months

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If, under the terms of the loan contract, the creditor can charge a prepayment penalty more than 36 months after consummation, then the calling application should set the value of this field to true.

Setting this value to true will trigger the prepayment penalty test, and his classify the specified loan as a HCM.

🔹 Data.PrepaymentPenalty.AmountPrepaid

TypeRequiredValuesDefault
StringnoCurrency >= 00

If the maximum prepayment penalty exceeds 2% of this field's value, then the prepayment penalty test will be triggered.

🔹 Data.PrepaymentPenalty.FinanceAmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

The value of this field specifies the amount of the total prepayment penalty which was financed by the creditor.

🔹 Data.PrepaymentPenalty.Max

TypeRequiredValuesDefault
StringnoCurrency >= 00

The maximum prepayment penalty that may be charged or collected under the terms of the mortgage loan. See Section 1026.32(b)(1)(v).

🔹 Data.PrepaymentPenalty.Total

TypeRequiredValuesDefault
StringnoCurrency >= 00

The total prepayment penalty incurred by the consumer if the consumer refinances the existing mortgage loan with the current holder of the existing loan, a servicer acting on behalf of the current holder, or an affiliate of either. See Section 1026.32(b)(1)(vi).


🟦 Data.RealEstate

TypeRequired
Objectno

Please see Section 1026.32(b)(1)(iii) for a discussion of the real estate fees and other charges which should be included here.

Fields: 🔹Fee, 🔹FinanceAmt

Objects: None

🔹 Data.RealEstate.Fee

TypeRequiredValuesDefault
StringnoCurrency >= 00

The total fee due for all appropriate real estate fees and other charges.

🔹 Data.RealEstate.FinanceAmt

TypeRequiredValuesDefault
StringnoCurrency >= 00

The value of this field specifies the amount of the above specified real estate fees and other charges which were financed.

Hcm Module - Response

The Data object for a response from the Hcm module is defined below, in the order the fields are returned:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔸IsHcm

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Triggers, 🟥 AprTrigger, 🟥 PointsFeesTrigger, 🟥 PrepaymentTrigger

🔸 Data.IsHcm

TypeRequiredValues
Booleanyestrue, false

The value of this field will either be true or false, and will indicated whether or not the submitted loan is a high cost mortgage.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Hcm",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
    "Result": 200,
    "Module": "Hcm",
    "Data": {
        "Errors": [
            "Data.LockInDate (StringDate) not found.",
            "Data.LienType (String) not found.",
            "Data.RateType (String) not found.",
            "Data.Dwelling (String) not found.",
            "Data.LoanAmount (StringFloat) not found.",
            "Data.AmountFinanced (StringFloat) not found.",
            "Data.Apr (StringFloat) not found.",
            "Data.FinanceCharge (StringFloat) not found.",
            "Data.InterestCharge (StringFloat) not found."
        ],
        "Warnings": [
            "Request field Data.Hello (String) not recognized.",
            "Request field Data.How (String) not recognized."
        ]
    }
}

🟥 Data.Triggers

TypeRequired
Objectyes

This object informs the calling application about that status of the three possible triggers that can cause a loan to be classified as high cost.

Fields: 🔹Apr, 🔹PointsFees, 🔹Prepayment

Objects: None

🔹 Data.Triggers.Apr

TypeRequiredValues
Booleanyestrue, false

If the Apr test was triggered, then the value of this field will be true.

🔹 Data.Triggers.PointsFees

TypeRequiredValues
Booleanyestrue, false

If the Points and Fees test was triggered, then the value of this field will be true.

🔹 Data.Triggers.Prepayment

TypeRequiredValues
Booleanyestrue, false

If the Prepayment test was triggered, then the value of this field will be true.


🟥 Data.AprTrigger

TypeRequired
Objectyes

This object provides further information on the high cost mortgage Apr test, which may be of interest to the calling application.

Fields: 🔸Date, 🔸Apor, 🔸Spread, 🔸Difference

Objects: None

🔸 Data.AprTrigger.Date

TypeRequiredValues
StringyesYYYY-MM-DD

The Date field contains the date on which the APOR data was effective. As an example, if the lock in date was 2013-05-09, then the date returned should be 2013-05-06 (if the APOR files are up to date).

🔸 Data.AprTrigger.Apor

TypeRequiredValues
StringyesNumber in [-99.999...600]

The value of this field contains the Average Prime Offer Rate for the submitted loan. This value is retrieved from the appropriate APOR file (fixed or adjustable).

🔸 Data.AprTrigger.Spread

TypeRequiredValues
StringyesNumber in [-99.999...600]

The spread value depends upon the type of lien, loan amount, and dwelling type. The resulting spread will either be 6.5 or 8.5.

🔸 Data.AprTrigger.Difference

TypeRequiredValues
StringyesNumber in [-99.999...600]

The value of this field returns the difference between the submitted APR applicable to the transaction, and the APOR plus the spread. If the difference is greater than zero (which means that the APR is greater than the APOR plus spread), then the loan is a HCM.


🟥 Data.PointsFeesTrigger

Fields: 🔸TotalLoanAmount, 🔸TotalPointsFees, 🔸MaxPointsFees

Objects: None

TypeRequired
Objectyes

This object provides further information on the high cost mortgage points and fees test, which may be of interest to the calling application.

🔸 Data.PointsFeesTrigger.TotalLoanAmount

TypeRequiredValues
StringyesCurrency

The total loan amount is defined in Section 1026.32(b)(4). It is calculated by taking the Regulation Z Amount Financed and deducting some of the financed fees and charges which are provided as inputs to the calculation.

🔸 Data.PointsFeesTrigger.TotalPointsFees

TypeRequiredValues
StringyesCurrency

The total points and fees value is defined in Section 1026.32(b)(1). It is calculated by taking the Regulation Z Finance Charge and deducting some portions of the Finance Charge, and then adding other fees and charges which are provided as inputs to the calculation.

🔸 Data.PointsFeesTrigger.MaxPointsFees

TypeRequiredValues
StringyesCurrency

If the computed total points and fees value for the submitted loan exceeds this value, then the loan is a high cost mortgage. The maximum points and fees value calculation is defined in Section 1026.32(a)(1)(ii).


🟥 Data.PrepaymentTrigger

TypeRequired
Objectyes

This object provides further information on the prepayment test, which may be of interest to the calling application.

Fields: 🔸After36Months, 🔸Total, 🔸Max

Objects: None

🔸 Data.PrepaymentTrigger.After36Months

TypeRequiredValues
Booleanyestrue, false

If the creditor can charge a prepayment penalty more than 36 months after consummation, then the loan is a high cost mortgage.

🔸 Data.PrepaymentTrigger.Total

TypeRequiredValues
StringyesCurrency

This field returns the total potential amount of prepayment penalties.

🔸Data.PrepaymentTrigger.Max

TypeRequiredValues
StringyesCurrency

The maximum prepayment penalty is computed acording to Section 1026.32(a)(1)(iii), and is equal to 2% of the specified AmountPrepaid. If the Total amount exceeds this value, then the loan is a high cost mortgage.


Higher Priced Mortgage Loans (HPML)

Higher Priced Mortgage Loans are defined as consumer-purpose, closed-end loans secured by a consumer's principal dwelling that have an annual percentage rate (APR) equal to or greater than the Average Prime Offer Rate (APOR) by 1.5 percentage points for first-lien loans, or 3.5 percentage points for subordinate-lien loans for a comparable transaction.

The APOR is published weekly by the federal government, and the two files (one for fixed rates and one for adjustable rates) are available for download at this web site. Please note that it is necessary that these files be updated weekly, or else the SCE will not be able to determine if a loan is a HPML for loans whose lock in dates fall outside the range of dates provided in the APOR files. If you are using a version of the SCE that is hosted by J. L. Sherman and Associates, Inc., then the APOR files will be automatically updated weekly for your use.

Sample Request

The following is a sample SCE request for a Hpml calculation:

{
    "Module": "Hpml",
    "Data": {
        "LienType": "first",
        "IsJumbo": false,
        "RateType": "fixed",
        "LockInDate": "2022-03-22",
        "RegZApr": "5.125",
        "TermInYears": "30"
    }
}

Sample Response

The following example is the response returned from the SCE for the request provided at the beginning of the previous section.

{
    "Result": 200,
    "Module": "Hpml",
    "Data": {
        "Errors": [],
        "Warnings": [],
        "IsHpml": false,
        "Apor": "4.230",
        "Spread": "1.500",
        "Difference": "-0.605",
        "Date": "2022-03-21"
    }
}

Hpml Module - Request

The fields of the Data object supported by a Hpml module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The fields of the Data object supported by a Hcm module request are defined in alphabetical order below:

Fields: 🔹DataPath, 🔸IsJumbo, 🔸LienType, 🔸LockInDate, 🔸RateType, 🔸RegZApr, 🔸TermInYears

Objects: 🟦 Format

🔹 Data.DataPath

TypeRequiredValuesDefault
StringnoText - See belowsee below

If this field is set, the SCE will look for a data folder containing the APOR files in the path specified. Note that the APOR files must be named as follows: YieldTableFixed.txt and YieldTableAdjustable.txt.

If this field is not set, the SCE will attempt to locate the file in the default data directory. Note that the AWS hosted version of the SCE API server places the necessary files in the correct default directory, and hence specifying this field is not required.

Since the APOR files are global in nature, you only need to have one copy of these files available even if your installation hosts multiple data paths for different clients. The APOR files are identical to those needed for the Hcm module, and thus a single location containing the APOR files can be used for both modules.

🔸 Data.IsJumbo

TypeRequiredValuesDefault
Booleanyestrue, falsen/a

Effective June 1, 2013, first-lien loans that exceed the maximum principal obligation eligible for purchase by Freddie Mac (i.e., a "jumbo" loan) have a rate spread of 2.5% instead of the normal first-lien value of 1.5%.

Note that the value of this field will be ignored for subordinate-lien loans.

🔸 Data.LienType

TypeRequiredValuesDefault
StringyesFirst, Subordinaten/a

The type of lien determines the amount over the APOR at which time a loan's Regulation Z APR is considered a HPML. For first-lien loans, that value is 1.5% (or 2.5% for first-lien jumbo loans as of 6/01/2013); for subordinate-lien loans, that value is 3.5%.

🔸 Data.LockInDate

TypeRequiredValuesDefault
StringyesYYYY-MM-DDn/a

The value of this field holds the date on which the interest rate of the loan was locked in. All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

The lock in date is used to lookup the APOR rate from the appropriate file. Each row of the file begins with a date, and the row which will be used will have a date which is either on the lock in date, or does not preceed it by more than 6 days. Since the rates are updated weekly, there should never be more than six days between the date of the row used and the specified lock in date.

If the SCE can not find a row in the APOR file which is appropriate for use with the specified lock in date, then an error message will be returned informing the calling application.

🔸 Data.RateType

TypeRequiredValuesDefault
StringyesAdjustable, Fixedn/a

The APOR is looked up in one of two tables, determined by the loan's rate type. If the loan uses a fixed rate, then the SCE will look-up the APOR from the YieldTableFixed.txt file. If the loan uses a variable or adjustable rate, then the SCE will look-up the APOR from the YieldTableAdjustable.txt file.

🔸 Data.RegZApr

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]n/a

The value of this field holds the computed Regulation Z APR for the loan we are checking. The Regulation Z APR should be expressed as a percentage.

🔸 Data.TermInYears

TypeRequiredValuesDefault
StringyesIntegern/a

The TermInYears field holds the term of the loan, in whole years. Valid terms range from 1 year to 50 years, inclusive. If the loan's RateType is Adjustable, then the value of this element represents the initial, fixed rate term of the adjustable rate loan.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


Hpml Module - Response

The Data object for a response from the Hpml module is defined below, in the order the fields are returned:

The Data object for a response from the Hpml module is defined below, in the order the fields and objects are returned:

🟥 Data

TypeRequired
Objectyes

Fields: 🔸IsHpml, 🔸Apor, 🔸Spread, 🔸Difference, 🔸Date

Objects: 🟥 Errors[], 🟥 Warnings[]


🔸 Data.IsHpml

TypeRequiredValues
Booleanyestrue, false

The value of this field will either be true or false, and will indicated whether or not the submitted loan is a higher priced mortgage loan.

🔸 Data.Apor

TypeRequiredValues
StringyesNumber in [-99.999...600]

The value of this field contains the Average Prime Offer Rate for the submitted loan. This value is retrieved from the appropriate APOR file (fixed or adjustable).

🔸 Data.Spread

TypeRequiredValues
StringyesNumber in [-99.999...600]

The spread value depends upon the type of lien. First-lien loans have a spread of 1.5, and subordinate-lien loans have a spread of 3.5.

🔸 Data.Difference

TypeRequiredValues
StringyesNumber in [-99.999...600]

The value of this field returns the difference between the submitted Regulation Z APR, and the APOR plus the spread. If the difference is greater than or equal to zero (which means that the Reg. Z APR is greater than or equal to the APOR plus spread), then the loan is a HPML.

🔸 Data.Date

TypeRequiredValues
StringyesYYYY-MM-DD

The Date field contains the date on which the APOR data was effective. As an example, if the lock in date was 2009-12-22, then the date returned should be 2009-12-21 (if the APOR rates files are up to date).


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Hpml",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
    "Result": 200,
    "Module": "Hpml",
    "Data": {
        "Errors": [
            "Data.LienType (String) not found.",
            "Data.IsJumbo (Boolean) not found.",
            "Data.RateType (StringFloat) not found.",
            "Data.LockInDate (StringDate) not found.",
            "Data.RegZApr (StringFloat) not found.",
            "Data.TermInYears (StringInt) not found."
        ],
        "Warnings": [
            "Request field Data.Hello (String) not recognized.",
            "Request field Data.How (String) not recognized."
        ]
    }
}   

Certificates of Deposits (CDs)

A certificate of deposit (hereafter referred to as a CD) is a time deposit held in a bank or savings and loan for a fixed period of time at a fixed rate. Interest accrues on this deposit with a fixed periodicity (e.g. monthly or daily). The amount of money initially deposited in the CD is called the present value, and the final balance of the CD at the end of its term (which equals the initial deposit plus all accrued interest) is called the future value.

There are four basic variables involved in computing a CD: present value, interest rate, term, and future value. Given any of the three, you may find the fourth. Instead of creating four different request and response JSON interfaces, only one request format and one response format are used, each of which is detailed below.

Sample Request

{
  "Module" : "Cd",
  "Data" : {
    "Calculate" : "FV",
    "Date" : "2022-05-01",
    "PV" : "200000.00",
    "Rate" : "6.0",
    "Term" : "12",
    "TermUnits" : "Months",
    "Compounding" : "Monthly"
  }
}

Sample Response

The following example is the response returned from the SCE for the request provided at the beginning of the previous section.

{
  "Result" : 200,
  "Module" : "Cd",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "PV" : "200000.00",
    "Rate" : "6.000",
    "Term" : "12",
    "TermUnits" : "Months",
    "FV" : "212335.56",
    "Maturity" : "2023-05-01",
    "Gain" : "12335.56",
    "APY" : "6.168"
  }
}

Cd Module - Request

The fields of the Data object supported by a Cd module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹BasisDays, 🔹Calculate, 🔹Compounding, 🔹FV, 🔹PV, 🔹Rate, 🔹Term, 🔹TermUnits

Objects: 🟦 Format

The fields of the Data object supported by a Cd module request are defined in alphabetical order below:

🔹 Data.BasisDays

TypeRequiredValuesDefault
Stringno360, 365365

If the compounding frequency (see below) is based upon a daily method (e.g. daily, continuous, or simple), then the number of days in a year is specified with this field. If no value is specified, then 365 is assumed.

🔹 Data.Calculate

TypeRequiredValuesDefault
StringnoPV, FV, Rate, TermFV

This field informs the SCE which of the four basic variables involved in a CD is to be calculated (e.g. PV, FV, Rate, or Term).

In the sample above, the calculation type being requested is FV (future value). Thus, the PV, Rate, and Term fields are included in the request, whereas the FV field is omitted.

🔹 Data.Compounding

TypeRequiredValuesDefault
StringnoAnnual, Semiannual, Quarterly, Bimonthly, Monthly, Semimonthly, Daily, Continuous, SimpleMonthly

The Compounding field defines the periodicity at which interest is computed. The specified compounding period affects the allowable values (and units) for the Term and TermUnits fields - please see the description below.

The simple compounding frequency does no compounding of interest at all. Instead, interest is computed at the end of the CD's term (much like a single payment note using a simple interest accrual method).

🔹 Data.FV

TypeRequiredValuesDefault
StringnoCurrencyn/a

The future value is the amount that the CD is worth at the end of it's term. The future value is equal to the present value plus all interest accrued during the CD's term. If you are computing the future value (e.g. "CalcType" : "FV"), then you may omit this field.

🔹 Data.PV

TypeRequiredValuesDefault
StringnoCurrencyn/a

The present value is the amount which is deposited in the CD on the given deposit date. Interest accrues on this initial amount, much like interest accrues on the principal balance of a loan. If you are computing the present value (e.g. "CalcType" : "PV"), then you may omit this field.

🔹 Data.Rate

TypeRequiredValuesDefault
StringnoNumber in [-99.999...600]n/a

This field dictates the rate at which interest accrues throughout the term of the CD. If you are computing the interest rate (e.g. "CalcType" : "Rate"), then you may omit this field.

🔹 Data.Term

TypeRequiredValuesDefault
StringnoInteger > 0n/a

The Term field specifies the number of unit term periods after which the CD has matured. This numerical value can specify the number of days, months, or years which make up the term of the CD. To specify the units, please see the TermUnits field below.

Also note that the value of this field is somewhat restricted given certain compounding frequencies and term units. The table below will summarize the restrictions.

CompoundingUnits AllowedTerm Restriction
AnnualYears, MonthsMonths must be divisible by 12
SemiannualYears, MonthsMonths must be divisible by 6
QuarterlyYears, MonthsMonths must be divisible by 3
BimonthlyYears, MonthsMonths must be divisible by 2
MonthlyYears, Monthsn/a
SemimonthlyYears, Monthsn/a
DailyYears, Months, Daysn/a
ContinuousYears, Months, Daysn/a
SimpleYears, Months, Daysn/a

🔹 Data.TermUnits

TypeRequiredValuesDefault
StringnoYears, Months, DaysMonths

This field specifies the units used for the CD's term. The three options are: Years, Months, and Days.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


Cd Module - Response

The Data object for a response from the Cd module is defined below, in the order the fields are returned:

🟥 Data

TypeRequired
Objectyes

The Data object for a response from the Cd module is defined below, in the order the fields and objects are returned:

Fields: 🔸PV, 🔸Rate, 🔸Term, 🔸TermUnits, 🔸FV, 🔸Maturity, 🔸APY

Objects: 🟥 Errors[], 🟥 Warnings[]

🔸 Data.PV

TypeRequiredValues
StringyesCurrency

The present value of the CD, representing the initial deposit made on the specified deposit date.

🔸 Data.Rate

TypeRequiredValues
StringyesNumber in [-99.999...600]

The rate at which interest will accrue during the term of the CD.

🔸 Data.Term

TypeRequiredValues
StringyesInteger

The Term is the number of unit periods (as specified in the TermUnits field) between the deposit date and the CD's maturity date.

🔸 Data.TermUnits

TypeRequiredValues
StringyesYears, Months, Days

This field returns the units used for the CD's term. The three options are: Years, Months, and Days.

🔸 Data.FV

TypeRequiredValues
StringyesCurrency

The future value of the CD at its maturity.

🔸 Data.Maturity

TypeRequiredValues
StringyesYYYY-MM-DD

The date of maturity for the CD. All dates are in the form of YYYY-MM-DD, and must be 10 characters long.

🔸 Data.Gain

TypeRequiredValues
StringyesCurrency

The gain is the difference between the future value and the present value. It is the amount by which the present value changes over the term of the CD.

🔸 Data.APY

TypeRequiredValues
StringyesNumber in [-99.999...600]

The APY (annual percentage yield) is the rate of return on an investment over the term of a year. The APY takes compounding into account, and if the compounding frequency is other than annual, the APY will differ from the interest rate.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Cd",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "Cd",
  "Data" : {
    "Errors" : [
      "Data.Date (StringDate) not found.",
      "Data.PV (StringFloat) not found.",
      "Data.Rate (StringFloat) not found.",
      "Data.Term (StringFloat) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

Individual Retirement Accounts

An individual retirement account (hereafter referred to as an IRA) is a deposit held in an account for a period of time, during which further deposits may be made and interest is accrued. Interest accrues on the initial balance and periodic deposits with a fixed periodicity (e.g. monthly, daily). The amount of money initially deposited in the IRA is called the beginning balance, and the final balance of the IRA at the end of its term (which depends upon the current and retirement ages of the account holder) is called the future value.

The SCE allows the computation of an IRA two different ways: (i) specify the initial balance, periodic deposit amount, current and retirement ages, and interest rate to compute the future value; or (ii) compute the necessary periodic deposit amount to achieve a target future value.

Sample Request

The following is a sample SCE request for an Ira calculation:

{
  "Module" : "Ira",
  "Data" : {
    "Calculate" : "FV",
    "Compounding" : "Annual",
    "BeginBalance" : "2000.00",
    "Deposit" : "2000.00",
    "DepositFreq" : "Annual",
    "CurrentAge" : "30",
    "RetireAge" : "65",
    "Rate" : "5.000"
  }
}

Sample Response

The following example is the response returned from the SCE for the request provided at the beginning of the previous section.

{
  "Result" : 200,
  "Module" : "Ira",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "BeginBalance" : "2000.00",
    "Deposit" : "2000.00",
    "DepositFreq" : "Annual",
    "Rate" : "5.000",
    "CurrentAge" : "30",
    "RetireAge" : "65",
    "Term" : "35",
    "TermUnits" : "Years",
    "FV" : "200704.68",
    "Gain" : "128704.68",
    "Yield" : "5.000"
  }
}

Ira Module - Response

The fields of the Data object supported by an Ira module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The fields of the Data object supported by a Ira module request are defined in alphabetical order below:

Fields: 🔸BeginBalance, 🔹Calculate, 🔹Compounding, 🔸CurrentAge, 🔹Deposit, 🔹DepositFreq, 🔸Rate, 🔸RetireAge, 🔹FV

Objects: 🟦 Format

🔸 Data.BeginBalance

TypeRequiredValuesDefault
StringyesCurrencyn/a

The beginning balance is the amount which is currently present in the IRA account. Interest accrues on this initial amount (plus the periodic deposit amounts), much like interest accrues on the principal balance of a loan.

🔹 Data.Calculate

TypeRequiredValuesDefault
StringnoFV, DepositFV

This field informs the SCE which of the two IRA calculations is to be performed.

In the sample above, the calculation type being requested is FV, which directs the SCE to compute the future value of the IRA. Thus, the periodic deposit value is specified in the appropriate field, and the future value field is omitted.

🔹 Data.Compounding

TypeRequiredValuesDefault
StringnoAnnual, Semiannual, Quarterly, Bimonthly, Monthly, DailyAnnual

The Compounding field defines the periodicity at which interest is computed. The specified compounding period affects the allowable values for the DepositFreq field - please see the description below.

🔸 Data.CurrentAge

TypeRequiredValuesDefault
StringyesIntegern/a

The current age of the IRA account owner.

🔹 Data.Deposit

TypeRequiredValuesDefault
StringnoCurrencyn/a

The Deposit field specifies the periodic deposit amount to be made to the IRA account. The periodicity of the deposit is dictated by the DepositFrequency field, detailed below.

If you are computing the periodic deposit amount necessary to generate a specified future value (e.g. `"Calculate" : "FV"'), then omit this field from the request.

🔹 Data.DepositFreq

TypeRequiredValuesDefault
StringnoAnnual, Semiannual, Quarterly, Bimonthly, MonthlyAnnual

This field specifies the periodicity of the deposit amount. Thus, if you wanted to make monthly deposits to an IRA account, the field value should be specified as monthly. The frequency of deposits limits the allowable compounding frequencies (see table below).

Deposit FrequencyCompounding Frequency Allowed
AnnualAnnual, Semiannual, Quarterly, Bimonthly, Monthly, Daily
SemiannualSemiannual, quarterly, Bimonthly, Monthly, Daily
QuarterlyQuarterly, Monthly, Daily
BimonthlyBimonthly, Monthly, Daily
MonthlyMonthly, Daily

🔸 Data.Rate

TypeRequiredValuesDefault
StringyesNumber in [-99.999...600]n/a

This field dictates the rate at which interest accrues throughout the term of the IRA.

🔸 Data.RetireAge

TypeRequiredValuesDefault
StringyesIntegern/a

The desired retirement age of the IRA account owner. This value must be greater than that found in the CurrentAge field. By subtracting the current age from the retirement age, the SCE determines the number of years the IRA account will be allowed to grow.

🔹 Data.FV

TypeRequiredValuesDefault
StringnoCurrencyn/a

The future value is the balance of the IRA account at the borrower's specified retirement age. The future value is equal to the present value plus all periodic deposits plus all interest accrued during the IRA's term. If you are computing the future value (e.g. "Calculate" : "FV"), then you may omit this field.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


Ira Module - Response

The Data object for a response from the Ira module is defined below, in the order the fields are returned:

🟥 Data

TypeRequired
Objectyes

Fields: 🔸BeginBalance, 🔸Deposit, 🔸DepositFreq, 🔸Rate, 🔸CurrentAge, 🔸RetireAge, 🔸Term, 🔸TermUnits, 🔸FV, 🔸Gain, 🔸Yield

Objects: 🟥 Errors[], 🟥 Warnings[]


🔸 Data.BeginBalance

TypeRequiredValues
StringyesCurrency

The beginning balance is the amount which is currently present in the IRA account. Interest accrues on this initial amount (plus the periodic deposit amounts), much like interest accrues on the principal balance of a loan.

🔸 Data.Deposit

TypeRequiredValues
StringyesCurrency

The Deposit field specifies the periodic deposit amount to be made to the IRA account.

🔸 Data.DepositFreq

TypeRequiredValues
StringyesAnnual, Semiannual, Quarterly, Bimonthly, Monthly

This field specifies the periodicity of the deposit amount.

🔸 Data.Rate

TypeRequiredValues
StringyesNumber in [-99.999...600]

The rate at which interest will accrue during the term of the IRA.

🔸 Data.CurrentAge

TypeRequiredValuesDefault
StringyesIntegern/a

The current age of the IRA account owner.

🔸 Data.RetireAge

TypeRequiredValuesDefault
StringyesIntegern/a

The desired retirement age of the IRA account owner.

🔸 Data.Term

TypeRequiredValues
StringyesInteger

The term is the number of years during which periodic deposit amounts and accrued interest are applied to the IRA account. It is equal to the individual's retirement age less current age.

🔸 Data.TermUnits

TypeRequiredValues
StringyesYears

The Term field is always expressed as a number of years.

🔸 Data.FV

TypeRequiredValues
StringyesCurrency

The future value of the IRA at retirement age.

🔸 Data.Gain

TypeRequiredValues
StringyesCurrency

The gain is the difference between the future value and the sum of the initial balance and all periodic deposits made. It is the amount of interest accrued over the term of the IRA.

🔸 Data.Yield

TypeRequiredValues
StringyesNumber in [-99.999...600]

The APY (annual percentage yield) is the rate of return on an investment over the term of a year. The APY takes compounding into account, and if the compounding frequency is other than annual, the APY will differ from the interest rate.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Ira",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "Ira",
  "Data" : {
    "Errors" : [
      "Data.Deposit (StringFloat) not found.",
      "Data.Rate (StringFloat) not found.",
      "Data.CurrentAge (StringInt) not found.",
      "Data.RetireAge (StringInt) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

Retirement Annuities

An annuity is a stream of income paid in a series of regular monthly payments. Annuities are usually set up to disburse these payments from a retirement account, and act as an income stream.

When planning for retirment, it is natural to ask what amount of monthly income will I receive given a planned retirment account balance of X dollars, with a planned retirement term of 360 months? Similarly, given a planned retirment account balance of X dollars and a desired monthly income of Y dollars, how many months may I draw income? Finally, given a desired term of income and monthly income amount, what would my retirement balance need to be?

Thus, there are three basic variables involved in computing an annuity: the beginning balance, monthly income amount, and the number of months of income. Given any of two, one may find the third. Instead of creating three different request and response JSON interfaces, only one request format and one response format are used, each of which is detailed below.

Sample Request

The following is a sample SCE request for an Annuity calculation:

{
  "Module" : "Annuity",
  "Data" : {
    "Calculate" : "Income",
    "Balance" : "500000.00",
    "Rate" : "5.000",
    "Term" : "360"
  }
}

Sample Response

{
  "Result" : 200,
  "Module" : "Annuity",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Balance" : "500000.00",
    "Rate" : "5.000",
    "Income" : "5018.38",
    "Term" : "129",
    "TotalIncome" : "647371.02",
    "Gain" : "147371.02"
  }
}

Annuity Module - Request

The fields of the Data object supported by the Annuity module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Balance, 🔹Calculate, 🔹Income, 🔸Rate, 🔹Term

Objects: 🟦 Format

🔹 Data.Balance

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The beginning balance is the amount which is present in the retirment account when the annuity starts. Interest will accrue monthly on this amount, and the income stream is taken from this balance during the term of the annuity. If you are computing the beginning balance (e.g. "Calculate" : "Balance"), then this field may be omitted.

🔹 Data.Calculate

TypeRequiredValuesDefault
StringnoBalance, Income, TermIncome

This field informs the SCE which of the three basic variables involved in an annuity calculation is to be calculated (e.g. Balance, Income, or Term).

In the sample above, the calculation type being requested is Income (the monthly income amount). Thus, the Balance, and Term fields are included in the request, whereas the Income field is omitted.

🔹 Data.Income

TypeRequiredValuesDefault
StringnoCurrency >= 0n/a

The value of this field specifies the desired monthly income amount. If you are computing the monthly income amount (e.g. "Calculate" : "Income"), then you may omit this field from the request.

🔸 Data.Rate

TypeRequiredValues
StringyesNumber in [-99.999...600]

This field dictates the rate at which interest accrues throughout the term of the annuity.

🔹 Data.Term

TypeRequiredValuesDefault
StringnoInteger > 0n/a

This field specifies the number of months in the term of the annuity. This corresponds to the length of the monthly income stream which is disbursed from the beginning balance. If you are computing the number of months of income (e.g. "Calculate" : "Term"), then this field may be omitted.


🟦 Data.Format

TypeRequired
Objectno

The Format object is one of the first objects parsed from a request, as various fields affect how date and numeric fields are parsed and validated.

Fields: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

Objects: None

🔹 Data.Format.CurrencyDecimals

TypeRequiredValuesDefault
Stringno0 or 22

When displaying and parsing Currency fields, this field determines the maximum number of decimal places allowed after the DecimalSeparator. If this field is not included, the default value [Country](#data-the default value is 2.

🔹 Data.Format.DateFormat

TypeRequiredValuesDefault
StringnoYMD, MDY, or DMYYMD

When displaying and parsing Date fields, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formated as YYYY-MM-DD.
  • MDY - All dates should be formated as MM-DD-YYYY.
  • DMY - All dates should be formated as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator field.

🔹 Data.Format.DateSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character-

When displaying and parsing Date fields, this field determines the character used to separate the individual month, day, and year portions of a date field.

🔹 Data.Format.DecimalSeparator

TypeRequiredValuesDefault
Stringnoempty or a single character.

When displaying and parsing Currency, Percentage, or Floating numeric fields, this field determines the character used to separate the fractional part from the whole.

🔹 Data.Format.StrictDP

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If the value of this field is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this field is set to false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 Data.Format.ThousandSeparator

TypeRequiredValuesDefault
Stringnoempty or a single characterempty

When displaying numeric fields, this field determines the character used to separate the thousands places from the hundreds. When parsing a numeric request field, if a thousand separator is specified in the request, then the SCE will now remove all occurrences of the specified thousand separator from the numeric field string before attempting to convert it to a number.


Annuity Module - Response

The Data object for a response from the Annuity module is defined below, in the order the fields are returned:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔸Balance, 🔸Rate, 🔸Income, 🔸Term, 🔸TotalIncome, 🔸Gain

Objects: 🟥 Errors[], 🟥 Warnings[]

🔸 Data.Balance

TypeRequiredValues
StringyesCurrency

The beginning balance is the amount which is present in the retirment account when the annuity starts.

🔸 Data.Rate

TypeRequiredValues
StringyesNumber in [-99.999...600]

The rate at which interest will accrue on the balance during the term of the annuity.

🔸 Data.Income

TypeRequiredValues
StringyesCurrency

The amount of the monthly disbursement.

🔸 Data.Term

TypeRequiredValues
StringyesInteger

This number of months of income provided by the annuity.

🔸 Data.TotalIncome

TypeRequiredValues
StringyesCurrency

The TotalIncome is the sum of all monthly disbursements made during the term of the annuity.

🔸 Data.Gain

TypeRequiredValues
StringyesCurrency

The Gain is the difference between the total income and the beginning balance. It is the total amount of interest accrued over the term of the annuity.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Annuity",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
{
  "Result" : 200,
  "Module" : "Annuity",
  "Data" : {
    "Errors" : [
      "Data.Balance (StringFloat) not found.",
      "Data.Rate (StringFloat) not found.",
      "Data.Term (StringInt) not found."
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ]
  }
}

Account Module

The SCE's account request interface allows the user to determine the number and name of each account set up for the SCE in a given location. An account is defined as a set of setup files associated with an account number which starts at 1 and has a maximum value of 9,999. The setup files for a given account number configure the SCE to compute loans with protection in a particular manner.

The clients.set file (located in the same data/ directory as the other setup files) holds the name of each setup file. These names are user defined, and may be edited by you using any text editor. The first account name (corresponding to account #0001) is on the second line, with subsequent account names following on separate lines.

Sample Request

{
  "Module" : "Account",
  "Data" : {
    "DataPath" : "/etc/sce/",
    "Begin" : "1",
    "End" : "9999"
  }
}

Sample Response

{
  "Result" : 200,
  "Module" : "Account",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "DataPath" : "/etc/sce/data/",
    "Accounts" : [
      {
        "Account" : 1,
        "Title" : "Single Premium"
      },
      {
        "Account" : 2,
        "Title" : "MOB"
      },
      {
        "Account" : 3,
        "Title" : "True MOB"
      }
    ]
  }
}

Account Module - Request

The fields of the Data object supported by an Account module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the request data for a given module, and must always be provided.

Fields: 🔹Begin, 🔹DataPath, 🔹End

Objects: None

The fields of the Data object supported by an Equal Pmt module request are defined in alphabetical order below:

🔹 Data.Begin

TypeRequiredValuesDefault
StringnoInteger in [1..9999]1

The Begin field specifies the desired starting account number to return information on. If the value of the Begin field exceeds the number of accounts defined in a given clients.set file, then a value of 1 will be used.

🔹 Data.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 Data.End

TypeRequiredValuesDefault
StringnoInteger in [1..9999]9999

The End field specifies the desired ending account number to return information on. If the value of the End field exceeds the number of accounts defined in a given clients.set file, then the number of accounts will be used.

Account Module - Response

The Data object for a response from the Account module is defined below, in the order the fields are returned:

🟥 Data

TypeRequired
Objectyes

The Data object encapsulates the response data for a given module, and will always be present.

Fields: 🔸DataPath

Objects: 🟥 Errors[], 🟥 Warnings[], 🟥 Accounts[]

🔸 Data.DataPath

TypeRequired
Stringyes

The fully qualified directory name used by the SCE to find the clients.set file. If the SCE can not find the clients.set file in the data directory, or if the data direcotry does not exist, then an error will be returned.

🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Account",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "Account",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ],
    "DataPath" : "/home/alank/Work/sce/SCE/data/",
    "Accounts" : [
      {
        "Account" : 1,
        "Title" : "Single Premium"
      },
      {
        "Account" : 2,
        "Title" : "MOB"
      },
      {
        "Account" : 3,
        "Title" : "True MOB"
      }
    ]
  }
}   

🟥 Data.Accounts[]

TypeRequired
array of Account Objectsyes

The Accounts[] array returns information on each account found in the clients.set file.

Fields: 🔸Account, 🔸Title

Objects:None

🔸 Data.Accounts[].Account

TypeRequiredValues
StringyesInteger > 0

Discloses the account number associated with this account in the clients.set file.

🔸 Data.Accounts[].Title

TypeRequiredValues
StringyesText

Holds the title of this account as it appears in the clients.set file.

User Interface Module

The SCE's user interface request allows the user to determine how an account has been set up for the SCE in a given directory path, and indicates which protection products are available and what options are available for each active product. An account is defined as a set of setup files associated with an account number which starts at 1 and has a maximum value of 9,999. The setup files for a given account number configure the SCE to compute loans with protection in a particular manner.

To get the names of all accounts configured in a given directory path, please see the Account Module.

Sample Request

{
  "Module" : "Ui",
  "Data" : {
    "Account" : "1",
    "Compact" : false,
    "DataPath" : "/etc/sce/"
  }
}

Sample Response

{
  "Result" : 200,
  "Module" : "Ui",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Ls" : {
      "Status: " : "Loaded",
      "LoanTypes" : {
        "ARM" : true,
        "Balloon" : true,
        "Construction" : false,
        "Equal" : true,
        "IntOnly" : true,
        "PrinPlus" : true,
        "SinglePay" : true,
        "SkipsIrregs" : true,
        "SkipsPickups" : true
      },
      "Accrual" : {
        "Code" : "320",
        "LastDay" : false,
        "InterestRound" : "Nearest",
        "PaymentRound" : "Up",
        "SinglePayDivisor" : "365"
      }
    },
    "Cl" : {
      "Active" : true,
      "AllowOn" : {
        "ARM" : false,
        "Balloon" : false,
        "Equal" : true,
        "IntOnly" : false,
        "PrinPlus" : false,
        "SinglePay" : false,
        "Irregs" : false
      },
      "IsDP" : false,
      "Method" : "TrueMOB",
      "TrueMOB" : {
        "Abbrev" : "CL",
        "Title" : "Credit Life",
        "Prompts" : {
          "SingleOnCoborrower" : true
        }
      }
    },
    "Ah" : {
      "Active" : true,
      "Abbrev" : "AH",
      "Title" : "Disability",
      "AllowOn" : {
        "ARM" : false,
        "BalloonGross" : false,
        "BalloonMobNet" : false,
        "Equal" : true,
        "IntOnly" : false,
        "PrinPlus" : false,
        "SinglePay" : false,
        "Irregs" : false
      },
      "IsDP" : false,
      "IsPackagedDP" : false,
      "Method" : "TrueMOB",
      "Prompts" : {
        "CoverageBenefit" : false,
        "CoverageTermGross" : false,
        "CoverageTermMobNet" : true,
        "Joint" : true,
        "SingleOnCoborrower" : true
      },
      "Rules" : {
        "MustHaveLife" : false,
        "PPYMoreThan12" : true,
        "PPYLessThan12" : false
      },
      "Tables" : [
        "14 Retro"
      ]
    },
    "Iu" : {
      "Active" : false
    },
    "Pp" : {
      "Active" : false
    }
  }
}

User Interface Module - Request

The fields of the Data object supported by a Ui module request are defined in alphabetical order below:

🟥 Data

TypeRequired
Objectyes

The fields and objects of the Data object supported by a User Interface module request are defined in alphabetical order below:

Fields: 🔹Account, 🔹Compact, 🔹DataPath

Objects:

🔹 Data.Account

TypeRequiredValuesDefault
StringnoInteger >= 11

The Account field specifies the numeric setup file account number that will be parsed to determine the user interface related response fields. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which may affect the loan calculation, such as the accrual method, payment protection methods / rates / caps, etc.

🔹 Data.Compact

TypeRequiredValuesDefault
Booleannotrue, falsefalse

If this field is set to a value of true, then the SCE will only return response fields if the value of the field is different from the default value.

🔹 Data.DataPath

TypeRequiredValuesDefault
StringnoTextdefault data path

If this field is set, the SCE will look for a /data folder containing the setup files in the path specified. Thus, if the DataPath is set to /etc/sce, the SCE will look for the setup files in /etc/sce/data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCE to append /data to the provided path), then simply terminate the specified DataPath with an asterisk (*). Thus, if the DataPath is set to /etc/sce/bank1/*, the SCE will look for the setup files in /etc/sce/bank1/.

If this field is not set, the SCE will attempt to located the /data folder in the default data directory path location, which can be retrieved using the Version module.

This field is useful if you wish to use only a single installation of the SCE, but have many different setup file groupings. By specifying a different DataPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

User Interface Module - Response

The Data object for a response from the Ui module is defined below, in the order the fields are returned:

ObjectFields
🟥 Data
|- 🟥Errors[]
|- 🟥Warnings[]
|- 🟥Ls🔸Status
|- |- 🟥LoanTypes🔹ARM, 🔹Balloon, 🔹Construction, 🔹Equal, 🔹IntOnly, 🔹PrinPlus, 🔹SinglePay, 🔹SkipsIrregs, 🔹SkipsPickups
|- |- 🟥Accrual🔸Code, 🔹LastDay, 🔹InterestRound, 🔹PaymentRound, 🔸SinglePayDivisor
|- 🟥Cl🔸Active, 🔹IsDP, 🔸Method
|- |- 🟥AllowOn🔹ARM, 🔹Balloon, 🔹Equal, 🔹IntOnly, 🔹Irregs, 🔹PrinPlus, 🔹SinglePay
|- |- 🟦CUNASP🔸Abbrev, 🔸Title
|- |- 🟦SinglePremium🔸DlAbbrev, 🔸DlTitle, 🔸LlAbbrev, 🔸LlTitle, 🔹Gross, 🔹Level, 🔹Net, 🔹OrdinaryLife
|- |- |- 🟥Prompts🔹CoverageAmount, 🔹CoverageTermGross, 🔹CoverageTermNet, 🔹Dismemberment, 🔹GrossNet, 🔹SingleOnCoborrower, 🔹UseLevelRatesGross, 🔹UseLevelRatesNet
|- |- 🟦StandardMob🔸Abbrev, 🔸Title
|- |- |- 🟥Prompts🔹CoverageAmount, 🔹CoverageTerm, 🔹Dismemberment, 🔹SingleOnCoborrower
|- |- 🟦TrueMob🔸Abbrev, 🔸Title
|- |- |- 🟥Prompts🔹SingleOnCoborrower
|- 🟥Ah🔸Active, 🔸Abbrev, 🔸Title, 🔹IsDP, 🔹IsPackagedDP, 🔸Method
|- |- 🟥AllowOn🔹ARM, 🔹BalloonGross, 🔹BalloonMobNet, 🔹Equal, 🔹IntOnly, 🔹Irregs,🔹PrinPlus, 🔹SinglePay
|- |- 🟥Prompts🔹CoverageBenefit, 🔹CoverageTermGross, 🔹CoverageTermMobNet, 🔹Joint, 🔹SingleOnCoborrower
|- |- 🟥Rules🔹MustHaveLife, 🔹PPYLessThan12, 🔹PPYGreaterThan12
|- |- 🟥Tables
|- 🟥Iu🔸Active, 🔸Abbrev, 🔸Title, 🔹IsDP, 🔸Method
|- |- 🟥AllowOn🔹ARM, 🔹BalloonGross, 🔹BalloonMobNet, 🔹Equal, 🔹IntOnly, 🔹Irregs, 🔹PrinPlus, 🔹SinglePay
|- |- 🟥Prompts🔹CoverageBenefit, 🔹CoverageTerm, 🔹Joint, 🔹SingleOnCoborrower
|- |- 🟥Rules🔹JointMustHaveJointDis, 🔹JointMustHaveJointLife, 🔹MustHaveDis, 🔹MustHaveLife
|- 🟥Pp🔸Active, 🔸Abbrev, 🔸Title, 🔹IsDP, 🔸Method
|- |- 🟥AllowOn🔹ARM, 🔹BalloonGross, 🔹BalloonMobNet, 🔹Equal, 🔹IntOnly, 🔹Irregs, 🔹PrinPlus, 🔹SinglePay
|- |- 🟥Prompts🔸Coverage, 🔹Joint

🟥 Data

TypeRequired
Objectyes

The Data object for a response from the Cd module is defined below, in the order the fields and objects are returned:

Fields: None

Objects: 🟥Errors[], 🟥Warnings[], 🟥Ls, 🟥Cl, 🟥Ah, 🟥Iu, 🟥Pp

The Data object for a response from the User Interface module is defined below:


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Ui",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "Ui",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
      "Request field Data.Hello (String) not recognized.",
      "Request field Data.How (String) not recognized."
    ],
    ...
  }
}   

🟥 Data.Ls

TypeRequired
objectyes

The Ls object returns information on general loan configuration setup file data.

Fields: 🔸Status

Objects: 🟥LoanTypes 🟥Accrual

🔸 Data.Ls.Status

TypeRequiredValues
Stringyestext

If the loan setup fil was successfully loaded and parsed, the value of this field will be Loaded. Any other return value indicates an error has occurred while trying to loan the loan setup file for the account number requested.


🟥 Data.Ls.LoanTypes

TypeRequired
Objectyes

The LoanTypes object returns fields which indicate if a loan of a given repayment schedule is allowed, according to the loan setup file associated with the account.

Fields: 🔹ARM, 🔹Balloon, 🔹Construction, 🔹Equal, 🔹IntOnly, 🔹PrinPlus, 🔹SinglePay, 🔹SkipsIrregs, 🔹SkipsPickups

Objects: None

🔹 Data.Ls.LoanTypes.ARM

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Returns a value of true if adjustable rate loans available for this account.

🔹 Data.Ls.LoanTypes.Balloon

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Returns a value of true if balloon loans available for this account?

🔹 Data.Ls.LoanTypes.Construction

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Returns a value of true if construction loans available for this account.

🔹 Data.Ls.LoanTypes.Equal

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Returns a value of true if equal payment loans available for this account.

🔹 Data.Ls.LoanTypes.IntOnly

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Returns a value of true if interest only loans available for this account.

🔹 Data.Ls.LoanTypes.PrinPlus

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Returns a value of true if fixed principal plus interest loans available for this account.

🔹 Data.Ls.LoanTypes.SinglePay

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Returns a value of true if single payment notes available for this account.

🔹 Data.Ls.LoanTypes.SkipsIrregs

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Returns a value of true if loans with skipped and specified irregular payments available for this account.

🔹 Data.Ls.LoanTypes.SkipsPickups

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Returns a value of true if loans with skipped and pickup payments available for this account.


🟥 Data.Ls.Accrual

TypeRequired
Objectyes

The Accrual object returns information regarding how various interest accrual settings have been configured in the loan setup file associated with the account.

Fields: 🔸Code, 🔹LastDay, 🔹InterestRound, 🔹PaymentRound, 🔸SinglePayDivisor

Objects: None

🔸 Data.Ls.Accrual.Code

TypeRequiredValuesDefault
StringtrueSee Tablen/a

The method of interest accrual configured for the account is returned in this field. All valid accrual codes are described in the table below.

🔹 Data.Ls.Accrual.LastDay

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

This setting only applies to loans computed with an actual day accrual calendar where the first payment date falls at the end of a month with fewer than 31 days. As an example, if the first payment date is on April 30, should the following payment dates be made on the 30th of each month, or on the last day of the month?

A value of true means that when conditions triggering a last day situation are active, this will result in payments which fall at the end of the month. A value of false indicates that when dictated, subsequent payment dates will not be moved to the last day of the month.

🔹 Data.Ls.Accrual.InterestRound

TypeRequiredValuesDefault
StringfalseNearest, Up, DownNearest

When amortizing interest in the amortization schedule, the value of this field dictates how the SCE rounds off interest with fractional currency units.

🔹 Data.Ls.Accrual.PaymentRound

TypeRequiredValuesDefault
StringfalseNearest, Up, Down, BestNearest

When the SCE computes the payment which best amortizes the loan to zero, the value of this field dictates how the payment is rounded.

A value of Best means to choose the payment that returns a minimal ending balance at the end of amortization. If two payments result in the same minimal error magnitude, the smaller payment is chosen.

🔸 Data.Ls.Accrual.SinglePayDivisor

TypeRequiredValuesDefault
Stringfalsesee tablen/a

When computing a single payment note, the value of this field determines the number of days in the interest accrual factor's divisor.

CodeDescription
360360 day divisor
365365 day divisor
366366 day divisor

🟥 Data.Cl

TypeRequired
objectyes

The Cl object returns information on life protection configuration setup file data.

Fields: 🔸Active, 🔹IsDP, 🔸Method

Objects: 🟥AllowOn, 🟦CUNASP, 🟦SinglePremium, 🟦StandardMob, 🟦TrueMob

🔸 Data.Cl.Active

TypeRequiredValues
Booleanfalsetrue, false

If life coverage is configured and allowed on one or more loan types, then the value of this field will be true and the rest of the object should be parsed for further details.

A value of false indicates that life coverage is not confiured nor allowed for this account. Furthermore, no other fields of the Cl object will be returned to the calling application.

🔹 Data.Cl.IsDP

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If the life product has been configured as a debt protection product, then the value of this field will be true. A value of false indicates that the life product is considered insurance.

🔸 Data.Cl.Method

TypeRequiredValues
StringyesSinglePremium, StandardMob, TrueMOB, CUNASP

The Method field returns the general method used to compute the life products premiums/fees. SinglePremium indicates that a single premium or fee is computed and (usually) financed. The StandardMob method computes a premium/fee with each payment. The TrueMOB method computes a premium/fee on a specified day number every month. Finally, CUNASP is a single premium method implemented specifically for TruStage.

The value of this field also corresponds to the name of the Cl object field which will return further information useful for this general method.

As an example, if Cl.Method is SinglePremium, then there will be a Cl.SinglePremium object which should be parsed (detailed below) for additional information realted to this method.


🟥 Data.Cl.AllowOn

TypeRequired
Objectyes

The AllowOn object contains fields which inform the calling application the loan types which allow for the inclusion of this life product.

Fields: 🔹ARM, 🔹Balloon, 🔹Equal, 🔹IntOnly, 🔹Irregs, 🔹PrinPlus, 🔹SinglePay

Objects: None

🔹 Data.Cl.AllowOn.ARM

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that life coverage is allowed on Adjustable Rate Mortgages.

🔹 Data.Cl.AllowOn.Balloon

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that life coverage is allowed on Balloon Payment Loans.

🔹 Data.Cl.AllowOn.Equal

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that life coverage is allowed on Equal Payment Loans.

🔹 Data.Cl.AllowOn.IntOnly

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that life coverage is allowed on Interest Only Loans.

🔹 Data.Cl.AllowOn.Irregs

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that life coverage is allowed on Skip, Pickup and Irregular Payment Loans.

🔹 Data.Cl.AllowOn.PrinPlus

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that life coverage is allowed on Fixed Principal Plus Interest Loans.

🔹 Data.Cl.AllowOn.SinglePay

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that life coverage is allowed on Single Payment Notes.


🟦 Data.Cl.CUNASP

TypeRequired
Objectno

The CUNASP object will only be returned when Cl.Method is CUNASP. It contains additional information which should be parsed related to this general method.

Fields: 🔸Abbrev 🔸Title

Objects: None

🔸 Data.Cl.CUNASP.Abbrev

TypeRequiredValues
Stringyestext

Like the Title field below, this field provides an abbreviation to be used for the product associated with the SCE's configured life calculation option. The value of this element defaults to CL, although customers who wish to customize this abbreviation may do so. Customers who offer debt cancellation instead of insurance will also usually wish to change the abbreviations of their life product for regulatory reasons (e.g. DCL for debt cancellation life).

The title may be used for inputs (e.g. CL Option) and outputs (e.g. CL Coverage Term).

🔸 Data.Cl.CUNASP.Title

TypeRequiredValues
Stringyestext

The value of this field holds the product title associated with the SCE's configured life product. This title defaults to Credit Life, although customers who wish to customize the name of this offering may do so. For example, it could simply be called Life, or Death. Customers who offer debt cancellation instead of insurance will also usually wish to change the name of their life product for regulatory reasons.

The title may be used for inputs (e.g. Credit Life Option) and outputs (e.g. Credit Life Premium/Fee).


🟦 Data.Cl.SinglePremium

TypeRequired
Objectno

Fields: 🔸DlAbbrev, 🔸DlTitle, 🔸LlAbbrev, 🔸LlTitle, 🔹Gross, 🔹Level, 🔹Net, 🔹OrdinaryLife

Objects: 🟥Prompts

The SinglePremium object will only be returned when Cl.Method is SinglePremium. It contains additional information which should be parsed related to this general method.

🔸 Data.Cl.SinglePremium.DlAbbrev

TypeRequiredValues
Stringyestext

Like the Title field below, this field provides an abbreviation to be used for the product associated with the SCE's configured decreasing life calculation option. The value of this element defaults to CL, although customers who wish to customize this abbreviation may do so. Customers who offer debt cancellation instead of insurance will also usually wish to change the abbreviations of their life product for regulatory reasons (e.g. DCL for debt cancellation life).

The title may be used for inputs (e.g. CL Option) and outputs (e.g. CL Coverage Term).

🔸 Data.Cl.SinglePremium.DlTitle

TypeRequiredValues
Stringyestext

The value of this field holds the product title associated with the SCE's configured decreasing life product. This title defaults to Credit Life, although customers who wish to customize the name of this offering may do so. For example, it could simply be called Life, or Death. Customers who offer debt cancellation instead of insurance will also usually wish to change the name of their life product for regulatory reasons.

The title may be used for inputs (e.g. Credit Life Option) and outputs (e.g. Credit Life Premium/Fee).

🔸 Data.Cl.SinglePremium.LlAbbrev

TypeRequiredValues
Stringyestext

Similar to SinglePremium.DlAbbrev, except this abbreviation is for the configured level life product.

🔸 Data.Cl.SinglePremium.LlTitle

TypeRequiredValues
Stringyestext

Similar to SinglePremium.DlTitle, except this abbreviation is for the configured level life product.

🔹 Data.Cl.SinglePremium.Gross

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If gross coverage is allowed for the configured life product, then the value of this field will be true. A value of false indicates that gross coverage is not supported.

🔹 Data.Cl.SinglePremium.Level

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If level coverage is allowed for the configured life product, then the value of this field will be true. A value of false indicates that level coverage is not supported.

🔹 Data.Cl.SinglePremium.Net

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If net coverage is allowed for the configured life product, then the value of this field will be true. A value of false indicates that net coverage is not supported.

🔹 Data.Cl.SinglePremium.OrdinaryLife

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If an ordinary life product has been configured for the life product, then the value of this field will be true. A value of false indicates that no odinary life product is supported.


🟥 Data.Cl.SinglePremium.Prompts

TypeRequired
Objecttrue

The Prompts object returns information to the calling application about optional prompts/inputs that may be allowed for this life product.

Fields: 🔹CoverageAmount, 🔹CoverageTermGross, 🔹CoverageTermNet, 🔹Dismemberment, 🔹GrossNet, 🔹SingleOnCoborrower, 🔹UseLevelRatesGross, 🔹UseLevelRatesNet

Objects: None

🔹 Data.Cl.SinglePremium.Prompts.CoverageAmount

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If the account has been configured to allow for a coverage amount to be specified by the user, then the value of this field will be true, which indicates that the user interface should prompt the user for a life coverage amount. A value of false indicates that only the default coverage amount will be considered, and hence there is no need to prompt for a user specified coverage.

🔹 Data.Cl.SinglePremium.Prompts.CoverageTermGross

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true implies that the user may be prompted for a desired term of coverage for single premium gross life. A value of false indicates that user specified coverage term truncation is not allowed and should not be prompted.

🔹 Data.Cl.SinglePremium.Prompts.CoverageTermNet

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true implies that the user may be prompted for a desired term of coverage for single premium net life. A value of false indicates that user specified coverage term truncation is not allowed and should not be prompted.

🔹 Data.Cl.SinglePremium.Prompts.Dismemberment

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Some accounts allow for an additional dismemberment option to be written with the life policy (with an associated rate increase). If dismemberment is an option for this account, then the value of this field will be true. Otherwise, a value of false indicates that no dismemberment option is offered.

🔹 Data.Cl.SinglePremium.Prompts.GrossNet

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Some accounts using single premium life may support both net and gross credit life. If this is the case, this element will hold a value of true to signal the user interface that the user should be prompted for the life method. A value of false indicates that prompting for the life method is not required, as only one method is allowed.

🔹 Data.Cl.SinglePremium.Prompts.SingleOnCoborrower

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If single coverage is allowed on the co-borrower, then this field will hold a value of true. If it holds a value of false, then single life is only allowed on the primary borrower.

🔹 Data.Cl.SinglePremium.Prompts.UseLevelRatesGross

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

In some states, it is legal to compute gross decreasing life using level rates. If that is an option for this account, then this value of this field will be true, which indicates that the user interface should prompt for the option to use level rates with gross life. A value of false indicates that this option is not allowed, and hence the prompt for using level rates should not be presented to the user.

🔹 Data.Cl.SinglePremium.Prompts.UseLevelRatesNet

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

In some states, it is legal to compute net decreasing life using level rates. If that is an option for this account, then this value of this field will be true, which indicates that the user interface should prompt for the option to use level rates with net life. A value of false indicates that this option is not allowed, and hence the prompt for using level rates should not be presented to the user.


🟦 Data.Cl.StandardMob

TypeRequired
Objectno

The StandardMob object will only be returned when Cl.Method is StandardMob. It contains additional information which should be parsed related to this general method.

Fields: 🔸Abbrev, 🔸Title

Objects: 🟥Prompts

🔸 Data.Cl.StandardMob.Abbrev

TypeRequiredValues
Stringyestext

Like the Title field below, this field provides an abbreviation to be used for the product associated with the SCE's configured life calculation option. The value of this element defaults to CL, although customers who wish to customize this abbreviation may do so. Customers who offer debt cancellation instead of insurance will also usually wish to change the abbreviations of their life product for regulatory reasons (e.g. DCL for debt cancellation life).

The title may be used for inputs (e.g. CL Option) and outputs (e.g. CL Coverage Term).

🔸 Data.Cl.StandardMob.Title

TypeRequiredValues
Stringyestext

The value of this field holds the product title associated with the SCE's configured life product. This title defaults to Credit Life, although customers who wish to customize the name of this offering may do so. For example, it could simply be called Life, or Death. Customers who offer debt cancellation instead of insurance will also usually wish to change the name of their life product for regulatory reasons.

The title may be used for inputs (e.g. Credit Life Option) and outputs (e.g. Credit Life Premium/Fee).


🟥 Data.Cl.StandardMob.Prompts

TypeRequired
Objecttrue

The Prompts object returns information to the calling application about optional prompts/inputs that may be allowed for this life product.

Fields: 🔹CoverageAmount, 🔹CoverageTerm, 🔹Dismemberment, 🔹SingleOnCoborrower

Objects: None

🔹 Data.Cl.StandardMob.Prompts.CoverageAmount

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If the account has been configured to allow for a coverage amount to be specified by the user, then the value of this field will be true, which indicates that the user interface should prompt the user for a life coverage amount. A value of false indicates that only the default coverage amount will be considered, and hence there is no need to prompt for a user specified coverage.

🔹 Data.Cl.StandardMob.Prompts.CoverageTerm

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true implies that the user may be prompted for a desired term of coverage for life. A value of false indicates that user specified coverage term truncation is not allowed and should not be prompted.

🔹 Data.Cl.StandardMob.Prompts.Dismemberment

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

Some accounts allow for an additional dismemberment option to be written with the life policy (with an associated rate increase). If dismemberment is an option for this account, then the value of this field will be true. Otherwise, a value of false indicates that no dismemberment option is offered.

🔹 Data.Cl.StandardMob.Prompts.SingleOnCoborrower

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If single coverage is allowed on the co-borrower, then this field will hold a value of true. If it holds a value of false, then single life is only allowed on the primary borrower.


🟦 Data.Cl.TrueMob

TypeRequired
Objectno

The TrueMob object will only be returned when Cl.Method is TrueMob. It contains additional information which should be parsed related to this general method.

Fields: 🔸Abbrev, 🔸Title

Objects: 🟥Prompts

🔸 Data.Cl.TrueMob.Abbrev

TypeRequiredValues
Stringyestext

Like the Title field below, this field provides an abbreviation to be used for the product associated with the SCE's configured life calculation option. The value of this element defaults to CL, although customers who wish to customize this abbreviation may do so. Customers who offer debt cancellation instead of insurance will also usually wish to change the abbreviations of their life product for regulatory reasons (e.g. DCL for debt cancellation life).

The title may be used for inputs (e.g. CL Option) and outputs (e.g. CL Coverage Term).

🔸 Data.Cl.TrueMob.Title

TypeRequiredValues
Stringyestext

The value of this field holds the product title associated with the SCE's configured life product. This title defaults to Credit Life, although customers who wish to customize the name of this offering may do so. For example, it could simply be called Life, or Death. Customers who offer debt cancellation instead of insurance will also usually wish to change the name of their life product for regulatory reasons.

The title may be used for inputs (e.g. Credit Life Option) and outputs (e.g. Credit Life Premium/Fee).


🟥 Data.Cl.TrueMob.Prompts

TypeRequired
Objecttrue

The Prompts object returns information to the calling application about optional prompts/inputs that may be allowed for this life product.

Fields: 🔹SingleOnCoborrower

Objects: None

🔹 Data.Cl.TrueMob.Prompts.SingleOnCoborrower

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If single coverage is allowed on the co-borrower, then this field will hold a value of true. If it holds a value of false, then single life is only allowed on the primary borrower.


🟥 Data.Ah

TypeRequired
objectyes

The Ah object returns information on accident and health protection (A&H) configuration setup file data. Note that packaged debt protection products use the Ah product for implementation (see Ah.IsPackagedDP).

Fields: 🔸Active, 🔸Abbrev, 🔸Title, 🔹IsDP, 🔹IsPackagedDP, 🔸Method

Objects: 🟥AllowOn, 🟥Prompts, 🟥Rules, 🟥Tables

🔸 Data.Ah.Active

TypeRequiredValues
Booleanfalsetrue, false

If A&H coverage is configured and allowed on one or more loan types, then the value of this field will be true and the rest of the object should be parsed for further details.

A value of false indicates that A&H coverage is not confiured nor allowed for this account. Furthermore, no other fields of the Ah object will be returned to the calling application.

🔸 Data.Ah.Abbrev

TypeRequiredValues
Stringyestext

Like the Title field below, this field provides an abbreviation to be used for the product associated with the SCE's configured A&H calculation option. The value of this element defaults to AH, although customers who wish to customize this abbreviation may do so. Customers who offer debt cancellation instead of insurance will also usually wish to change the abbreviations of their A&H product for regulatory reasons.

The title may be used for inputs (e.g. AH Option) and outputs (e.g. AH Coverage Term).

🔸 Data.Ah.Title

TypeRequiredValues
Stringyestext

The value of this field holds the product title associated with the SCE's configured disability product. This title defaults to Accident & Health, although customers who wish to customize the name of this offering may do so. Customers who offer debt cancellation instead of insurance will also usually wish to change the name of their disability product for regulatory reasons.

The title may be used for inputs (e.g. Accident & Health Option) and outputs (e.g. Accident & Health Premium/Fee).

🔹 Data.Ah.IsDP

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If the A&H product has been configured as a debt protection product, then the value of this field will be true. A value of false indicates that the A&H product is considered insurance.

🔹 Data.Ah.IsPackagedDP

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If the A&H product has been configured as a packaged debt protection product, then the value of this field will be true. A value of false indicates that the A&H product is not configured as packaged debt protection.

When A&H is configured as packaged debt protection, the debt protection plans offered are all enumerated under Ah.Tables[]. As an example, if there are four packaged debt protection plans configured, then the Ah.Tables[] array will return the name of each plan, in order. Thus, if Ah.Tables is equal to ["Life", "Life and Disability", "Life, Disability, and Unemployment"] then Table #1 corresponds to Life, etc.

🔸 Data.Ah.Method

TypeRequiredValues
StringyesSinglePremium, StandardMob, TrueMOB, CUNASP

The Method field returns the general method used to compute the A&H product premiums/fees. SinglePremium indicates that a single premium or fee is computed and (usually) financed. The StandardMob method computes a premium/fee with each payment. The TrueMOB method computes a premium/fee on a specified day number every month. Finally, CUNASP is a single premium method implemented specifically for TruStage.


🟥 Data.Ah.AllowOn

TypeRequired
Objectyes

The AllowOn object contains fields which inform the calling application the loan types which allow for the inclusion of this product.

Fields: 🔹ARM, 🔹BalloonGross, 🔹BalloonMobNet, 🔹Equal, 🔹IntOnly, 🔹Irregs, 🔹PrinPlus, 🔹SinglePay

Objects: None

🔹 Data.Ah.AllowOn.ARM

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Adjustable Rate Mortgages.

🔹 Data.Ah.AllowOn.BalloonGross

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Balloon Payment Loans covered with single premium gross life.

🔹 Data.Ah.AllowOn.BalloonMobNet

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Balloon Payment Loans covered with single premium net or monthly outstanding balance life.

🔹 Data.Ah.AllowOn.Equal

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Equal Payment Loans.

🔹 Data.Ah.AllowOn.IntOnly

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Interest Only Loans.

🔹 Data.Ah.AllowOn.Irregs

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Skip, Pickup and Irregular Payment Loans.

🔹 Data.Ah.AllowOn.PrinPlus

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Fixed Principal Plus Interest Loans.

🔹 Data.Ah.AllowOn.SinglePay

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Single Payment Notes.


🟥 Data.Ah.Prompts

TypeRequired
Objecttrue

The Prompts object returns information to the calling application about optional prompts/inputs that may be allowed for this A&H product.

Fields: 🔹CoverageBenefit, 🔹CoverageTermGross, 🔹CoverageTermMobNet, 🔹Joint, 🔹SingleOnCoborrower

Objects: None

🔹 Data.Ah.Prompts.CoverageBenefit

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If the account has been configured to allow for a benefit amount to be specified by the user, then the value of this field will be true, which indicates that the user interface should prompt the user for an A&H benefit amount. A value of false indicates that only the default benefit amount will be considered, and hence there is no need to prompt for a user specified benefit.

🔹 Data.Ah.Prompts.CoverageTermGross

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true implies that the user may be prompted for a desired term of coverage for A&H when the loan is covered with single premium gross life. A value of false indicates that user specified coverage term truncation is not allowed with this life coverage type and should not be prompted.

🔹 Data.Ah.Prompts.CoverageTermMobNet

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true implies that the user may be prompted for a desired term of coverage for life when the loan is covered with single premium net or monthly outstanding balance life. A value of false indicates that user specified coverage term truncation is not allowed with this life coverage type and should not be prompted.

🔹 Data.Ah.Prompts.Joint

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If joint coverage A&H is allowed, then the value of this field will be true. Otherwise, a value of false indicates that no joint coverage option is offered.

🔹 Data.Ah.Prompts.SingleOnCoborrower

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If single coverage is allowed on the co-borrower, then this field will hold a value of true. If it holds a value of false, then single coverage is only allowed on the primary borrower.


🟥 Data.Ah.Rules

TypeRequired
Objecttrue

The Rules object returns information to the calling application about coverage rules that may be in effect for this A&H product.

Fields: 🔹MustHaveLife, 🔹PPYLessThan12, 🔹PPYGreaterThan12

Objects: None

🔹 Data.Ah.Rules.MustHaveLife

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If A&H may only be offered on loans that include life coverage, then the value of this field will be true. A value of false means that A&H may be offered independently of any life product.

🔹 Data.Ah.Rules.PPYLessThan12

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If A&H is allowed on loans with annual, semiannual, quarterly, or bimonthly payment frequencies, then the value of this field will be true.

🔹 Data.Ah.Rules.PPYGreaterThan12

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If A&H is allowed on loans with semimonthly, biweekly, or weekly payment frequencies, then the value of this field will be true.


🟥 Data.Ah.Tables

TypeRequired
array of String objectsno

The Tables[] array holds the name of each allowed set of A&H rates. If A&H has been configured for packaged debt protection (see Ah.IsPackagedDP), then this array holds the name of each allowed packaged debt protection plan.


🟥 Data.Iu

TypeRequired
objectyes

The Iu object returns information on involuntary unemployment protection (IU) configuration setup file data.

Fields: 🔸Active, 🔸Abbrev, 🔸Title, 🔹IsDP, 🔸Method

Objects: 🟥AllowOn, 🟥Prompts, 🟥Rules

🔸 Data.Iu.Active

TypeRequiredValues
Booleanfalsetrue, false

If IU coverage is configured and allowed on one or more loan types, then the value of this field will be true and the rest of the object should be parsed for further details.

A value of false indicates that IU coverage is not confiured nor allowed for this account. Furthermore, no other fields of the Iu object will be returned to the calling application.

🔸 Data.Iu.Abbrev

TypeRequiredValues
Stringyestext

Like the Title field below, this field provides an abbreviation to be used for the product associated with the SCE's configured IU calculation option. The value of this element defaults to IU, although customers who wish to customize this abbreviation may do so. Customers who offer debt cancellation instead of insurance will also usually wish to change the abbreviations of their IU product for regulatory reasons.

The title may be used for inputs (e.g. IU Option) and outputs (e.g. IU Coverage Term).

🔸 Data.Iu.Title

TypeRequiredValues
Stringyestext

The value of this field holds the product title associated with the SCE's configured unemployment product. This title defaults to Involuntary Unemployment, although customers who wish to customize the name of this offering may do so. Customers who offer debt cancellation instead of insurance will also usually wish to change the name of their unemployment product for regulatory reasons.

The title may be used for inputs (e.g. Involuntary Unemployment Option) and outputs (e.g. Involuntary Unemployment Premium/Fee).

🔹 Data.Iu.IsDP

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If the IU product has been configured as a debt protection product, then the value of this field will be true. A value of false indicates that the IU product is considered insurance.

🔸 Data.Iu.Method

TypeRequiredValues
StringyesSinglePremium, StandardMob, TrueMOB, CUNASP

The Method field returns the general method used to compute the IU product premiums/fees. SinglePremium indicates that a single premium or fee is computed and (usually) financed. The StandardMob method computes a premium/fee with each payment. The TrueMOB method computes a premium/fee on a specified day number every month. Finally, CUNASP is a single premium method implemented specifically for TruStage.


🟥 Data.Iu.AllowOn

TypeRequired
Objectyes

The AllowOn object contains fields which inform the calling application the loan types which allow for the inclusion of this product.

Fields: 🔹ARM, 🔹BalloonGross, 🔹BalloonMobNet, 🔹Equal, 🔹IntOnly, 🔹Irregs, 🔹PrinPlus, 🔹SinglePay

Objects: None

🔹 Data.Iu.AllowOn.ARM

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Adjustable Rate Mortgages.

🔹 Data.Iu.AllowOn.BalloonGross

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Balloon Payment Loans covered with single premium gross life.

🔹 Data.Iu.AllowOn.BalloonMobNet

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Balloon Payment Loans covered with single premium net or monthly outstanding balance life.

🔹 Data.Iu.AllowOn.Equal

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Equal Payment Loans.

🔹 Data.Iu.AllowOn.IntOnly

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Interest Only Loans.

🔹 Data.Iu.AllowOn.Irregs

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Skip, Pickup and Irregular Payment Loans.

🔹 Data.Iu.AllowOn.PrinPlus

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Fixed Principal Plus Interest Loans.

🔹 Data.Iu.AllowOn.SinglePay

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Single Payment Notes.


🟥 Data.Iu.Prompts

TypeRequired
Objecttrue

The Prompts object returns information to the calling application about optional prompts/inputs that may be allowed for this IU product.

Fields: 🔹CoverageBenefit, 🔹CoverageTerm, 🔹Joint, 🔹SingleOnCoborrower

Objects: None

🔹 Data.Iu.Prompts.CoverageBenefit

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If the account has been configured to allow for a benefit amount to be specified by the user, then the value of this field will be true, which indicates that the user interface should prompt the user for an IU benefit amount. A value of false indicates that only the default benefit amount will be considered, and hence there is no need to prompt for a user specified benefit.

🔹 Data.Iu.Prompts.CoverageTerm

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true implies that the user may be prompted for a desired term of coverage for IU. A value of false indicates that user specified coverage term truncation is not allowed and should not be prompted.

🔹 Data.Iu.Prompts.Joint

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If joint coverage IU is allowed, then the value of this field will be true. Otherwise, a value of false indicates that no joint coverage option is offered.

🔹 Data.Iu.Prompts.SingleOnCoborrower

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If single coverage is allowed on the co-borrower, then this field will hold a value of true. If it holds a value of false, then single coverage is only allowed on the primary borrower.


🟥 Data.Iu.Rules

TypeRequired
Objecttrue

The Rules object returns information to the calling application about coverage rules that may be in effect for this IU product.

Fields: 🔹JointMustHaveJointDis, 🔹JointMustHaveJointLife, 🔹MustHaveDis, 🔹MustHaveLife

Objects: None

🔹 Data.Iu.Rules.JointMustHaveJointDis

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If joint IU may only be offered on loans that include joint A&H coverage, then the value of this field will be true. A value of false means that joint IU may be offered with single A&H.

🔹 Data.Iu.Rules.JointMustHaveJointLife

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If joint IU may only be offered on loans that include joint life coverage, then the value of this field will be true. A value of false means that joint IU may be offered with single life.

🔹 Data.Iu.Rules.MustHaveDis

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If IU may only be offered on loans that include A&H coverage, then the value of this field will be true. A value of false means that IU may be offered independently of any disability product.

🔹 Data.Iu.Rules.MustHaveLife

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If IU may only be offered on loans that include life coverage, then the value of this field will be true. A value of false means that IU may be offered independently of any life product.


🟥 Data.Pp

TypeRequired
objectyes

The Pp object returns information on personal property protection (PP) configuration setup file data.

Fields: 🔸Active, 🔸Abbrev, 🔸Title, 🔹IsDP, 🔸Method

Objects: 🟥AllowOn, 🟥Prompts

🔸 Data.Pp.Active

TypeRequiredValues
Booleanfalsetrue, false

If PP coverage is configured and allowed on one or more loan types, then the value of this field will be true and the rest of the object should be parsed for further details.

A value of false indicates that PP coverage is not confiured nor allowed for this account. Furthermore, no other fields of the Pp object will be returned to the calling application.

🔸 Data.Pp.Abbrev

TypeRequiredValues
Stringyestext

Like the Title field below, this field provides an abbreviation to be used for the product associated with the SCE's configured PP calculation option. The value of this element defaults to PP, although customers who wish to customize this abbreviation may do so. Customers who offer debt cancellation instead of insurance will also usually wish to change the abbreviations of their PP product for regulatory reasons.

The title may be used for inputs (e.g. PP Option) and outputs (e.g. PP Premium/Fee).

🔸 Data.Pp.Title

TypeRequiredValues
Stringyestext

The value of this field holds the product title associated with the SCE's configured personal property product. This title defaults to Personal Property, although customers who wish to customize the name of this offering may do so. Customers who offer debt cancellation instead of insurance may wish to change the name of their unemployment product for regulatory reasons.

The title may be used for inputs (e.g. Personal Property Option) and outputs (e.g. Personal Property Premium/Fee).

🔹 Data.Pp.IsDP

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If the PP product has been configured as a debt protection product, then the value of this field will be true. A value of false indicates that the PP product is considered insurance.

🔸 Data.Pp.Method

TypeRequiredValues
StringyesSinglePremium, StandardMob, TrueMOB, CUNASP

The Method field returns the general method used to compute the PP product premiums/fees. SinglePremium indicates that a single premium or fee is computed and (usually) financed. The StandardMob method computes a premium/fee with each payment. The TrueMOB method computes a premium/fee on a specified day number every month. Finally, CUNASP is a single premium method implemented specifically for TruStage.


🟥 Data.Pp.AllowOn

TypeRequired
Objectyes

The AllowOn object contains fields which inform the calling application the loan types which allow for the inclusion of this product.

Fields: 🔹ARM, 🔹BalloonGross, 🔹BalloonMobNet, 🔹Equal, 🔹IntOnly, 🔹Irregs, 🔹PrinPlus, 🔹SinglePay

Objects: None

🔹 Data.Pp.AllowOn.ARM

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Adjustable Rate Mortgages.

🔹 Data.Pp.AllowOn.BalloonGross

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Balloon Payment Loans covered with single premium gross life.

🔹 Data.Pp.AllowOn.BalloonMobNet

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Balloon Payment Loans covered with single premium net or monthly outstanding balance life.

🔹 Data.Pp.AllowOn.Equal

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Equal Payment Loans.

🔹 Data.Pp.AllowOn.IntOnly

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Interest Only Loans.

🔹 Data.Pp.AllowOn.Irregs

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Skip, Pickup and Irregular Payment Loans.

🔹 Data.Pp.AllowOn.PrinPlus

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Fixed Principal Plus Interest Loans.

🔹 Data.Pp.AllowOn.SinglePay

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

A value of true indicates that coverage for this product is allowed on Single Payment Notes.


🟥 Data.Pp.Prompts

TypeRequired
Objecttrue

The Prompts object returns information to the calling application about optional prompts/inputs that may be allowed for this PP product.

Fields: 🔸Coverage, 🔹Joint

Objects: None

🔸 Data.Pp.Prompts.Coverage

TypeRequiredValuesDefault
StringtrueEntered, Principal, TotalOfPaymentsn/a

The value of the Coverage field informs the calling application how the personal property coverage amount is determined. A value of Principal means that the property product covers the loan's principal balance. TotalOfPayments means that the coverage amount is the loan's total of payments.

A value of Entered means that the coverage amount is specified by the user, and must be prompted and sent in with the loan request.

🔹 Data.Pp.Prompts.Joint

TypeRequiredValuesDefault
Booleanfalsetrue, falsefalse

If joint coverage PP is allowed, then the value of this field will be true. Otherwise, a value of false indicates that no joint coverage option is offered.


Version Module

The SCE JSON's version module is the simplest contained in the SCE JSON, and as such makes an ideal starting point. The version of the SCE JSON in use can also be of critical importance, so let us tackle it now.

Version Request Data Object Field Definition

Example - Request Envelope for Version Module:

{
  "Module" : "Version",
  "Data" : {}
}

The Data object in the Version module request should be empty (e.g {}) but present.

Version Response Data Object Field Definition

Example - Response Envelope for Version Module:

{
  "Result" : 200,
  "Module" : "Version",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
    ],
    "Product" : "SCEJSON",
    "Version" : "2021.07.0",
    "Rootpath" : "/var/task",
    "Copyright" : "(c) 2021 J. L. Sherman and Associates, Inc."
  }
}

Version Module - Request

ObjectFields
🟥Data

There are neither fields nor child objects for the Version module, so only the empty set is passed with the Data object.

🟥 Data

TypeRequired
Objectyes

Fields: None

Objects: None

Version Module - Response

The Data object for a response from the Ui module is defined below, in the order the fields are returned:

The Data object for a response from the Version module is defined below:

🟥 Data

TypeRequired
Objectyes

The Data object for a response from the Cd module is defined below, in the order the fields and objects are returned:

Fields: 🔸Product, 🔸Version, 🔸Rootpath, 🔸Copyright

Objects: 🟥Errors[], 🟥Warnings[],

The Data object for a response from the User Interface module is defined below:

🔸 Data.Product

TypeRequired
Stringyes

For the SCE JSON, the value of this field will always be set to "SCEJSON".

🔸 Data.Version

TypeRequired
Stringyes

Holds the version information for the SCE JSON.

The SCE is versioned with a number formatted as "YYYY.MM.RR". J. L. Sherman and Associates has chosen to base this number upon dates and releases, instead of arbitrary version numbers. Specifically, the first part of the version number (YYYY) refers to the year of the release. The second part of the version number (MM) refers to the month of the quarterly release. As it currently stands, the quarterly releases will be made in January, April, July and October. Thus, the value of MM will always be in {1, 4, 7, 10}. Finally, the last part of the version number (RR) signifies the release number for the given quarter, with zero (0) signifying the first release of the quarter.

Hence, a version number of 2022-01-0 refers to the first release of the SCE JSON for the January, 2022 quarter. Similarly, a version number of 2021-07-02 refers to the third release of the SCE JSON in the July, 2021 quarter.

🔸 Data.Rootpath

TypeRequired
Stringyes

Contains the fully qualified path for the default directory in which the SCE JSON will look for a data/ folder containing setup files, if required by the request.

TypeRequired
Stringyes

Describes the copyright information for the SCE JSON.


🟥 Data.Errors[]

TypeRequired
Array of Stringyes

The Errors[] field contains an array of Strings which describe any errors encountered while handling the request. If the length of the Errors[] Array is zero (0), then the module processed the request successfully, and the Data object can be further processed by the calling application for the returned data.

On the other hand, if the length of the Errors[] Array is greater than zero (0), then this indicates that an error condition has been detected, and the calling application should not process the respons Data object further. In this case, the contents of the Errors[] array will describe the error(s) encountered.

Typical errors include the omission of 🟥 required fields, invalid field values, etc.


🟥 Data.Warnings[]

TypeRequired
Array of Stringyes

The Warnings[] field contains an array of Strings which describe any warnings generated by the module handling the request. The most common warnings returned by modules inform the calling application that the module does not recognize a specified field (which may help to isolate a field name spelling error in the calling application's code). Note that field names which start with "//" will bre treated as comment fields by the SCE, and no warnings will be generated for these unrecognized fields.

Example - Request and response illustrating warnings when passing unrecognized fields:

{
  "Module" : "Version",
  "Data" : {
    "//" : "This is a comment.",
    "Hello" : "Friend!",
    "How" : "are you?"
  }
}
{
  "Result" : 200,
  "Module" : "Version",
  "Data" : {
    "Errors" : [
    ],
    "Warnings" : [
      "Request field 'Data.Hello' not recognized.",
      "Request field 'Data.How' not recognized."
    ],
    "Product" : "SCEJSON",
    "Version" : "2021.07.0",
    "Rootpath" : "/var/task",
    "Copyright" : "(c) 2021 J. L. Sherman and Associates, Inc."
  }
}

Appendix - History

This appendix provides a history of modifications made to this reference manual in a reverse chronological order, grouped by release. By referencing this chapter when a new release arrives, you may quickly discern any documentation changes which may or may not be of interest to you.

Release 2026-01-0

  • No changes made to the reference manual.

Release 2025-10-0

  • No changes made to the reference manual.

Release 2025-07-0

  • The Loan module now supports the TILARESPA2015 request field, which instructs the SCE to analyze the loan and include data in the request for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule.
  • The Loan module now supports the calculation and disclosure of adjustable rate mortages via the new ARM request field and its associated child fields.
  • The Loan module now supports an updated EditOutput.Merge field. We strongly advise using either the none or ordered options as they are the most common and easiest to understand. The other two options (some and default) are provided for backwards compatibility, with some behaving as false and default behaving as true in versions of the SCE prior to the 2025-07 release.

Release 2025-04-0

  • No changes made to the reference manual.

Release 2025-01-0

  • The Loan module's AccrualConfigs[].Date and Fees[].Date request field documentation was corrected when no Date field is provided. By default, if the Date field is not provided, the SCE will use the earliest Date field found in the Advances[] array.
  • The Loan module's PmtStreams[].Amount request field documentation has been updated to document the new options available for fixed payment streams.

Release 2024-10-0

  • The Arm module's Settings.TILARESPA2015 field can now be passed in as an object with two supported boolean child fields: MinPnIDetails and MaxPnIDetails. These two new fields allow the calling application to request detailed information about the MinPnI and MaxPnI payments that may be returned in the amortization schedule for ARM loans with TILARESPA2015 disclosures. If set to true, then the amounts to interest and principal for each of these payments may also be returned in the AmLines[] objects. Note that previously, the TILARESPA2015 field was boolean, and this is still supported. "TILARESPA2015" : true is now equivalent to "TILARESPA2015" : {}.

Release 2024-07-0

  • The Loan module's PmtStreams[] objects now support the new ReplaceIdx field which is used to apply a replacement payment stream to a subset of the payments. Please see the documentation for this new field in the Loan chapter.

Release 2024-04-0

  • The Loan module's Advances[] objects now supports NewPmt and Position fields which are used when the calling application wishes to compute a loan with multiple advances, where each advance generates a new payment stream.
  • The Loan module now supports a new BalAdjs[] array field which allows the calling application to make one or more balance adjustments during the amortization of a loan to better support the quotation and servicing of open ended lending.

Release 2024-01-0

  • No changes made to the reference manual.

Release 2023-10-0

  • The ODI.AddToPmt field is not supported with pure Construction Loans and the documentation for this field has been removed from the chapter covering pure construction loans.
  • The ODI request object recognized by many loan calculation modules supports a new NoCap field. If an odd days interest fee is present and financed, the value of this field determines if the ODI fee is added to the principal balance for the purposes of computing the ODI fee (e.g. if it is capitalized).
  • The documentation for the TILARESPA2015.CD_TotPmts field of the response has been updated to include the value of any odd days interest that is prepaid at loan closing.

Release 2023-07-0

  • The documentation for the Loan module's Protection.Products[].Formula field has been updated to include a table of all possible formula codes and a description of each.
  • The documentation for the Loan module's Protection.Products[].DropCode and Protection.Products[].DropReason fields has been updated to include a table of all possible drop codes and reasons.
  • The Format request object recognized by many modules supports a new StrictDP field. If the value of this field is true, it informs the SCE to strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a loan with a proceeds amount of 1000.005, the SCE will return an error code. If the value of this field is false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.
  • The Loan module's APR request object now supports a Max field which allows the calling application to specify a maximum APR. If a maximum is specified, then this maximum will be included in the APR response object in the Max field, and a MaxExceeded field will also be returned to inform the calling application whether or not the specified maximum was exceeded.
  • In the Drop Codes and Reasons appendix, drop code 87 has been added.
  • A new EndBal request field has been added to the Loan module, which allows for loans to be computed with a specified ending balance greater than zero. Please see the documentation covering this new element in the for more information.

Release 2023-04-0

  • The Account module has been made available in this release. This module allows the calling application to query the account numbers and titles of all accounts defined in the clients.set file. If your solution does require setup file configuration services provided by J. L. Sherman and Associates, Inc., then this module will be of minimal use to you.
  • The User Interface module has been made available in this release. This module allows the user to determine how an account has been set up for the SCE in a given directory path, and indicates which protection products are available and what options are available for each active product. If your solution does require setup file configuration services provided by J. L. Sherman and Associates, Inc., then this module will be of minimal use to you.
  • The Format request object has been added to the High Cost Mortgages (HCM), Higher Priced Mortgage Loans (HPML), and all loan calculation modules. Please see the documentation in the chapters covering the modules for further information.
  • With the inclusion of the new Format request object in the Loan module, the BusinessRules.CurrencyDP field has been deprecated and the documentation for this field has been removed from this reference manual.
  • The default value of the ODI.ForceUnitPeriod field has been changed from false to true in all loan calculation modules that support the ODI request object.
  • Added APR.Code 0 to the Loan module. An APR code of 0 tells the SCE that no effective rate should be computed or returned in the APR response object, so a value of NC will be returned for APR.Value with the APR.Type set to NotComputed.

Release 2023-01-0

  • The Adjustable Rate Mortgages module has been made available in this release.
  • The Loan module's BusinessRules request object supports two new fields: MinIntChg and MinFinChg. These fields allow the calling application to specify minimum interest and finance charge values for a given loan. If adjustments are made to the final payment to satisfy the specified minimum interest and finance charge values, then new MintIntChgAdj and MinFinChgAdj fields will be present in the Moneys response object.
  • All specific loan calculation modules (i.e. Equal Payment Loans, Balloon Payment Loans, etc.) now support either a minimum interest charge or a minimum finance charge through the setup files. This minimum defined in the setup files is then active for all specific loan calculation moudle requests using that account. If adjustments are made to the final payment to satisfy the specified minimum interest and finance charge values, then new MintIntChgAdj and MinFinChgAdj fields will be present in the Moneys response object. Please see the chapter covering the appropriate specific loan calculation module for further information.
  • All loan calculation modules now support financed odd days prepaid interest via the ODI.AddToPrin field of the appropriate object. Note that this field will be ignored if the odd days interest is set up to be added to the first payment instead of being disclosed as a prepaid fee.
  • The ODI request object from the Loan module has been added to all of the other loan modules. This provides a consistent way to specify odd days interest fees in all loan modules. The old way of specifying an odd days prepaid fee (via the Fees[] array) has been deprecated, and the associated documentation has been removed. However, for backwards compatability purposes the functionality will remain within the SCE. Please see the appropriate loan chapter for further information.
  • The Loan module now supports the calculation of fixed principal plus interest and pure principal payments where the principal reduction amount is defined as a percentage of the computed payment. This allows a calling application to request a principal reduction amount equal to the computed target payment (e.g. "Amount" : "100%C"). Please see the documentation for the PmtStreams[].Amount field for further information.
  • The Loan module now allows PmtStreams[] and Fees[] dates to skip weekends, with options to move the date to the previous, next, or nearest business day. Please see the documentation for the new Weekends field for further information.
  • The Loan module now allows PmtStreams[] and Fees[] dates to skip holidays, with options to move the date to the previous or next day. Please see the documentation for the new Holidays[] array and Holidays field for further information.
  • The Loan module now supports the new Capitalize[] array, which allows the calling application to specify a stream of interest accrual capitalization events during the term of the loan. This is most useful in loans which feature pure principal payments and which capitalize interest regurlarly on a different day of the month.
  • The Format request object has been added to the Annuity, Apy, Cd, and Ira modules. Please see the documentation in the chapters covering the modules for further information.

Release 2022-10-0

Release 2022-07-0

  • The APY Calculation module has been made available in this release.
  • The Certificates of Deposit module has been made available in this release.
  • The Individual Retirement Accounts module has been made available in this release.
  • The Retirement Annuities module has been made available in this release.
  • The Loan module's PmtStreams[] objects have added flexibility to the interprertation of the Date field. For payment frequencies that are monthly multiples, the day number specified in the Date field specifies the desired day number of all future payments, if this day number does not exceed the number of days in the computed month. As an example, if the first payment is scheduled to be made in February of 2022 and the desired day for all payments is the 30th, then the field would be specified as "Date" : "2022-02-30". The Date field of the Fees[] objects behaves in the same manner when defining a stream of fees.

Release 2022-04-0

Accrual Codes

CodeDescription
100UnitPeriod/Federal Calendar Actuarial
101UnitPeriod/Toyota Motor Credit Actuarial
201UnitPeriod/360 Simple
202UnitPeriod/365 Simple
203UnitPeriod/DaysPerPeriod Simple (e.g. 91 for quarterly payment frequencies)
204UnitPeriod True360/360 Simple
205UnitPeriod True360/365 Simple
206UnitPeriod True360/DaysPerPeriod Simple (e.g. 91 for quarterly payment frequencies)
207UnitPeriod/Federal Calendar Simple
208UnitPeriod/365.25 Simple
209UnitPeriod True360/365.25 Simple
210Actual/360 Simple
211True365/360 Simple
220Actual/365 Simple
221True365/365 Simple
230Actual/Actual Simple
231Midnight 366 Simple
240Actual/365.25 Simple
250UnitPeriod/VarDPY Simple
301UnitPeriod/360 US Rule
302UnitPeriod/365 US Rule
303UnitPeriod/DaysPerPeriod US Rule (e.g. 91 for quarterly payment frequencies)
304UnitPeriod True360/360 US Rule
305UnitPeriod True360/365 US Rule
306UnitPeriod True360/DaysPerPeriod US Rule (e.g. 91 for quarterly payment frequencies)
307UnitPeriod/Federal Calendar US Rule
308UnitPeriod/365.25 US Rule
309UnitPeriod True360/365.25 US Rule
310Actual/360 US Rule
311True365/360 US Rule
320Actual/365 US Rule
321True365/365 US Rule
330Actual/Actual US Rule
331Midnight 366 US Rule
340Actual/365.25 US Rule
350UnitPeriod/VarDPY US Rule
401UnitPeriod/360 Add-On
402UnitPeriod/365 Add-On
403UnitPeriod/DaysPerPeriod Add-On (e.g. 91 for quarterly payment frequencies)
404True360/360 Add-On
405True360/365 Add-On
406True360/DaysPerPeriod Add-On 91 for quarterly payment frequencies)

Appendix - Countries

This appendix provides a list of countries supported by the SCE, along with their associated two character and three digit codes, as well as the default number of decimal places allowed for currency values.

CountryAlpha-2Numeric-3Currency DP
AustraliaAU0362
CanadaCA1242
ChinaCN1562
Czech RepublicCZ2032
Hong KongHK3442
HungaryHU3482
IrelandIE3722
ItalyIT3802
PhilippinesPH6082
PolandPL6162
RomaniaRO6422
SloveniaSI7052
UkraineUA8042
United KingdomGB8262
United States of AmericaUS8402

Protection Formula Codes - Loan Module

Formula CodeDescription
NoneNo coverage requested.
UnknownUnknown formula code.
SP_Gross_StandardSingle premium standard gross.
SP_Gross_AllLevelAsDecreasingSingle premium gross on each individual payment.
SP_Gross_DiscountedSingle premium discounted gross.
SP_Gross_RemPmtsSingle premium gross, sum of partial premiums computed on outstanding payments vis-a-vis actuarial net.
SP_Gross_LevelSingle premium gross using level life.
SP_Gross_Level_EachPmtSingle premium gross, each payment is covered with level life as if each were a single payment note.
SP_Gross_Level_AsDecreasingNot currently used.
SP_Gross_Level_RemPmtsSingle premium gross, balance at truncated term covered with level.
SP_Net_StandardSingle premium standard net.
SP_Net_DiscountedSingle premium discounted net.
SP_Net_StraightLineSingle premium straight-line net.
SP_Net_MainTruncationSingle premium net, Maine truncation formula.
SP_Net_AmericanBankersSingle premium net, American Bankers formula.
SP_Net_PekinTruncationSingle premium net, Pekin insurance truncation formula.
SP_Net_WarmSpringsSingle premium net, Warm Springs formula.
SP_Net_StraightLine_AmerRepubSingle premium straight-line net, American Republic formula.
SP_Net_RemBalsSingle premium net, sum of partial premiums, each computed as rate times remaining balance.
SP_Net_LevelSingle premium net with level.
SP_Net_LevelAtCapSingle premium net, level at the cap.
MOB_NetStandard MOB net.
MOB_GrossStandard MOB gross.
MOB_BenefitStandard MOB on the benefit.
TrueMOB_NetTrue MOB net.
TrueMOB_GrossTrue MOB gross.
Ordinary_ExecTerm_ARSouthern Pioneer's Executive Term ordinary life product for Arkansas.
Ordinary_ProtectAllALProtective Life's (now a part of Life of the South) Protect-All ordinary life product for Alabama.
Ordinary_ProtectAll_GAProtect-All ordinary life product for Georgia.
Ordinary_ProtectAll_NCProtect-All ordinary life product for North Carolina.
Ordinary_ProtectAll_LAProtect-All ordinary life product for Louisiana.
Ordinary_ProtectAll_SCProtect-All ordinary life product for South Carolina.
Ordinary_Uniguard_TNUniguard ordinary life product for Tennessee.
CUNA_SP_Formula1TruStage's single premium formula #1.
CUNA_SP_Formula2TruStage's single premium formula #2.
CUNA_SP_Formula3TruStage's single premium formula #3.
CUNA_SP_Formula6TruStage's single premium formula #6.

Protection Formula Codes - Legacy

Formula CodeDescription
gmAllLevelBalloonAll payments covered with level insurance.
gmAllLevelBalloonAsDecreasingDecreasing coverage on covered payments, computed using level rates.
gmAllLevelEqualLevel coverage on each payment.
gmAllLevelEqualAsDecreasingDecreasing coverage on covered payments, computed using level rates.
gmAllLevelPmtsGross coverage on covered payments, level coverage on remaining payments.
gmBalloonStandardGross coverage on balloon payment loans (standard).
gmDiscountedDiscounted gross coverage.
gmDiscountedBalloonDiscounted gross coverage on regular payments only.
gmEPStandardGross coverage on equal payments (standard).
gmIntOnlyLevel coverage on final payment.
gmIntOnlyPlusLevel coverage on final payment, gross decreasing on interest only.
gmIrregGross coverage on outstanding sum of remaining & payments.
gmLevelRemPmtsGross coverage on covered payments, level coverage on remaining payments.
gmLevelTruncatedLevel coverage on covered payments, level coverage on remaining balance.
gmNoneNo coverage requested.
gmSinglePayGross coverage on single payment loans (standard).
mobBenefitCoverage on the payment.
mobCreditREConstant monthly premium product.
mobCUNALevelRateTruStage’s Level Rate product.
mobCUNAMonthlyRenewableTruStage’s Monthly Renewable product.
mobNoneNo coverage requested.
mobOnBalanceStandard coverage on outstanding balance.
mobOnPaymentsCoverage on outstanding payments.
nmAnicoLevelA special ANICO method used to compute level and decreasing coverage on the loan.
nmBalDiscountedDiscounted net pay-off on balloon payment loan.
nmBalLevelOnFinalNet coverage, with final payment covered by level.
nmBalStandardActuarial net pay-off on balloon payment loan.
nmBalStraightLineStraight line net pay-off on balloon payment loan.
nmBalStraightLineAmerRepubStraight line net pay-off formula used by American Republic.
nmCUNAAmortTruStage's formula used in specified amortization term balloon loans.
nmCUNASP1TruStage’s single premium formula #1.
nmCUNASP2TruStage’s single premium formula #2.
nmCUNASP3TruStage’s single premium formula #3.
nmCUNASP4TruStage’s single premium formula #4.
nmCUNASP5TruStage’s single premium formula #5.
nmEPDiscountedDiscounted net pay-off on equal payments.
nmEPStandardActuarial net pay-off on equal payments.
nmEPStraightLineStraight line net pay-off on equal payments.
nmIrregDecreasingNet coverage on outstanding balances.
nmIrregDiscountedDiscounted net coverage on outstanding balances.
nmLevelAtCapSingle premium net coverage, constant premium until balance is below cap.
nmNoneNo coverage requested.
nmSPNDecreasingDecreasing coverage on the principal balance.
nmSPNDiscountedActuarialy discounted decreasing coverage.
nmSPNStandardLevel coverage on the principal balance.
olExecutiveTerm_ARSouthern Pioneer’s Executive Term ordinary life product for Arkansas.
olProtectAll_ALProtective Life’s (now a part of Life of the South) Protect-All ordinary life product for Alabama.
olProtectAll_GAProtect-All ordinary life product for Georgia.
olProtectAll_LAProtect-All ordinary life product for Louisiana.
olProtectAll_NCProtect-All ordinary life product for North Carolina.
olProtectAll_SCProtect-All ordinary life product for South Carolina.
olProtectAll_TNProtect-All ordinary life product for Tennessee.
olUniGuardDecreasingUniguard decreasing ordinary life product.
olUniGuardDecreasingAndLevelUniguard level coverage written in conjunction with decreasing coverage.
olUniGuardLevelUniguard level ordinary life product.
ppmGrossPersonal property coverage on total of payments.
ppmNetPersonal property coverage on principal balance.
ppmOnEntryPersonal property coverage on entered amount.
SinglePremiumSingle premium coverage for A&H or IUI.

Protection Drop Codes

Drop CodeDrop Reason
0Successful Calculation
1This insurance must be written with CL
2No coverage on non-monthly loans
3No coverage on Equal Payment Loans
4No coverage on Balloon Loans
5No coverage on Single Payment Loans
6No coverage on Interest Only Loans
7No coverage on Principal Plus Loans
8No coverage on Skips/Pickups/Irregs
9Borrower too old at loan inception
10Co-Borrower too old at loan inception
11Term exceeded cap
12Borrower became too old during loan
13Co-Borrower became too old during loan
14Loan term is less than minimum allowed
15Computed rate was zero
16An invalid AH Plan was passed
17Truncation term less than the minimum
18Benefit cap was exceeded
19Coverage cap was exceeded
20Windows experienced an error
21Windows error reading the setup file
22NOT CURRENTLY USED
23Equal Payment or Balloons Only
24NOT CURRENTLY USED
25Coverage is not allowed on this loan
26Truncation term isn’t a valid multiple
27Keyboard truncation not allowed
28No keyboard truncation with Net
29No keyboard truncation with Gross
30No decreasing life. All coverage level
31Term too big for insurance coverage
32Joint requested, only single allowed
33The age is above the maximum in band
34The term is above the maximum in band
35Balloon is too small for Level Life
36All Coverage allocated to decreasing.
37No keyboard truncation with MOB
38TruStage No Single Pay Terms ¡ 6 Months
39Credit Life not allowed on Annual Loans
40Below the Minimum Insurance Term
41Below the Minimum Loan Term
42Formula is undefined
43AH Requires use of a table of rates
44LR Requires single rates, not tables
45Customer not eligible for Insurance
46The insurance code (e.g., 1=single) was not valid
47Monthly Renewable exception
48Borrower is currently older than the termination age
49CoBorrower is older than the termination age
50Maine Truncation only defined for monthly loans
51Converting SP ARHate to MOB caused an exception
52Non-Monthly not allowed with Ordinary Life
53AH is not allowed with Ordinary Life
54Probably a log calc tripped up an exception
55Entry for Borrower Birthday is zero
56Entry for CoBorrower Birthday is zero
57No coverage for loans; Monthly
58No coverage on construction loans
59The term of coverage must equal CL Term
60Loan Setup is a premium type not Single premium
61No insurance allowed on ARM Loans
62ARM Loans are only covered with MOB Net
63Coverage is not allowed on Coborrower
64Borrower is less than the minimum age
65CoBorrower is less than the minimum age
66Loan To Value (not implemented)
67ARM Loans only use MOB Net or MOB on Benefit
68Credit Life does not permit CMOB rollbacks
69Credit Life does not permit CMOB on interest only payments nor construct loans
70This insurance must be written with AH
71This insurance must be written with Joint AH
72Coverage not allowed with partial benefit and truncation
73This insurance must be written with Joint CL
74Preceding Interest Only payments do not allow for protection
75Coverage not allowed on Open end loans
76PrimaFacie rates must be expressed as $/100/Year
77Loans with "Open End=1" must be equal payments
78Premium is zero
79The loan has an error and therefore reports no protection info
80Product not available for any loan
81Level cannot be offered if decreasing has been removed
82An unknown ordinary life method has been chosen
83No Keyboard benefit allowed
84TrueMOB protection requested, but no events were logged
85Keyboard truncation is not allowed with gross truncated level insurance

A text description of the Note. Please see the list of codes, notes, and descriptions below.

  1. Benefit is Minimum Payment over term of coverage. When computing a loan with skipped, pickup, or irregular payments, there are a few different ways one can compute a benefit amount. This method uses the minimum non-zero payment as the benefit.

  2. Benefit is Average Payment over term of coverage (excludes zero payments). Similar to above, this method uses the average of all non-zero payments over the term of coverage as the benefit.

  3. Benefit is the Computed Payment. Similar to above, this method uses the computed payment as the benefit.

  4. Benefit is True Average Payment over term of coverage (includes zero payments). Similar to above, this method uses the average of all payments over the term of coverage, including skips, as the benefit.

  5. Protection factor uses days per period conversion. The protection calculation has converted the periodic rate to a daily rate.

  6. Switch to Rate Set two. The protection calculation has switched to the second set of rates.

  7. Switch method to Net. The protection calculation has switched to net coverage.

  8. Switch method to Ordinary Life. The protection calculation has switched to ordinary life coverage.

  9. Benefit is Average Payment over term of coverage (excludes loan principal from final payment). This average benefit calculation method is most commonly seen with interest only loans. It uses the average of all payments over the term of coverage (excluding the loan principal amount from the final payment, if covered).

Appendix - Calculation Notes

Some of the modules in the SCE may return calculation notes when certain situations are encountered during the calculation. These are not errors, but calculation notes which may help to explain something which might not be expected by the end user.

Calculation Notes

All of the calculation notes that may be returned by the SCE are documented below. Each note is associated with a numeric code and text return value. Each will be further described in the list below:

  1. "Zero Interest Rule in effect. If IntRate=0, round pmts down, set Interest to zero. Negative Interest always set to zero."

    In the Loan module, there is an field of the BusinessRules object called ZeroInterestRule. If enabled and the interest rate is set to zero, then payments will always be rounded down, no matter what (if any) payment rounding method was specified in the input request. Furthermore, if enabled and the computed interest amount is less than zero, then the interest amount will be set to zero, even if the interest rate is greater than zero.

  2. "Oscillator detected and successfully resolved."

    The SCE is an iterative calculation engine, and in certain circumstances, the computed principal balance (which is made up of the amount requested in addition to any amounts which are added to the principal balance) can oscillate back and forth between two values. When this situation occurs and the difference between both values is small enough, one of the two values will be used and the calculation will be completed.

  3. "Currently not used."

    This note is currently not implemented.

  4. "The Interest Paid, IntPaid, of the final amortization event has been adjusted to make the EndBal zero."

    When amortizing a loan, often times there is a non-zero ending balance due to rounding. The final interest reduction amount has been adjusted to achieve perfect amortization, which results in an ending balance of zero. Note that this will cause the final payment to not equal the sum of the principal reduction amount and amount to interest in the returned amortization schedule.

  5. "The Principal Reduction, Prin, of the final amortization event has been adjusted to make the EndBal zero."

    When amortizing a loan, often times there is a non-zero ending balance due to rounding. The final principal reduction amount has been adjusted to achieve perfect amortization, which results in an ending balance of zero. Note that this will cause the final payment to not equal the sum of the principal reduction amount and amount to interest in the returned amortization schedule.

  6. "This loan has at least one irregular periods. IRR APR's may not accurately reflect the effective rate."

    When using the IRR APR method, if there is not complete regularity in periods between events, the resulting calculated value may not reflect the true internal rate of return. Consider using the XIRR method when the periodicity is not regular.

  7. "The US Rule APR was not computed, but set to the entered rate."

    As requested, the US Rule APR was not computed, but set equal to the entered rate.

APR Codes

APR CodeDescription
0Not computed
10Account opening disclosure of open-end Loan
(APR will equal the Interest Rate)
20Microsoft\textregistered Excel extended internal rate of return (XIRR)
30Unit period 360 internal rate of return (XIRR360)
40Unit period internal rate of return (IRR)
41Yield unit period internal rate of return (IRR)
50European Union APR
60Canadian APR
100Actuarial
301UnitPeriod/360 US Rule
302UnitPeriod/365 US Rule
303UnitPeriod/DaysPerPeriod US Rule
(e.g. 91 for quarterly payment frequencies)
304UnitPeriod True360/360 US Rule.
305UnitPeriod True360/365 US Rule.
306UnitPeriod True360/DaysPerPeriod (e.g. 91 for
quarterly payment frequencies)
307UnitPeriod/Federal Calendar US Rule
308UnitPeriod/365.25 US Rule
309UnitPeriod True360/365.25 US Rule
310Actual/360 US Rule
311True365/360 US Rule
320Actual/365 US Rule
321True365/365 US Rule
330Actual/Actual US Rule
331Midnight366 US Rule
340Actual/365.25 US Rule