A free-to-use, highly performant API to help plan administrators comply with the Lifetime Income Illustrations requirement of the SECURE Act, specifically designed to obviate the need to share sensitive participant data.
Contents
Description
One of the key provisions of the SECURE Act is a requirement that plan administrators of ERISA defined contribution plans must express a participant’s current balance as the amount of “lifetime income” it could provide in retirement. In other words, administrators must present a participant's balance as both a single life annuity (SLA) and a qualified joint and survivor annuity (QJSA) income stream.
These two income stream illustrations, which must be included on pension benefit statements, are intended to help participants better understand how the money they have saved so far equates to an estimated monthly income throughout their retirement. The goal is to produce, on a participant's benefit statement, a result that might look like this:
Account balance as of [date]
Monthly payment at 67 (single life annuity)
Monthly payment at 67 (qualified joint & 100% survivor annuity)
$125,000
$645/month for life of participant
$533/month for life of participant. $533/month for life of participant's surviving spouse.
The unisex mortality table published by the Internal Revenue Service (IRS) under Code §417(e)(3)(B) ("Updated Mortality Improvement Rates and Static Mortality Tables for Defined Benefit Pension Plans"). The service currently maintains two versions of this data, for 2020 and 2021. Future tables will be made available as they are published by the IRS.
How it's used
The API is specifically designed to obviate the need to share sensitive participant data. Instead, the response provides "lifetime income factors" that can be multiplied by a participant's balance to obtain the monthly lifetime income payments.
The API will return a table that looks like this, based on the specified 10-Year Treasury Constant Maturity Rate and the IRS §417(e)(3)(B) mortality table:
Age
Lifetime income factor for an SLA
Lifetime income factor for an QJSA
67
0.0048981237
0.0040177786
68
0.0050834889
0.0041503399
69
0.0052829322
0.0042924689
70
0.0054979355
0.0044451205
…
119
0.0662174572
0.0515393869
120
0.0838301552
0.0838301552
To calculate a participant's monthly income, multiply the participant's balance by the factors in the row that correspond to her age. For example, based on this table, a 67-year old participant with a $125,000 balance would have monthly lifetime income payments of:
SLA: $125,000 × 0.0048981237 = $612.27
QJSA: $125,000 × 0.0040177786 = $502.22
Note that the table begins at age 67, since the methodology assumes that any participant aged 67 or younger is treated as though she is age 67.
For convenience, the API also allows you to pass a list of anonymized participants and have the service calculate the monthly lifetime income payments for each. You can pass up to 5,000 participants per call. Click here for an example of how this works.
Try it!
Account balance as of date
Monthly payment at 67 (single life annuity)
Monthly payment at 67 (qualified joint & 100% survivor annuity)
$0
$0/month for life of participant
$0/month for life of participant. /month for life of participant's surviving spouse.
Examples
GET
A simple GET, without any parameters, will return the Lifetime Income Illustration calculations based on the latest available interest and mortality rate assumptions. For details on the response, see the Assumptions and Calculations sections below.
Use a POST with parameters in the message body to obtain calculations based on custom interest and mortality rate assumptions, and/or to pass a list of participants for which the service will calculate monthly lifetime income payments.
For details on the response, see the Assumptions and Calculations sections below. See the Parameters section for the optional parameters that may be passed in the message body, either to customize the interest/mortality rates, or to provide a list of participants for which to calculate monthly lifetime income payments.
See the Parameters section below for the optional parameters that may be passed in the message body.
Assumptions
The response contains an assumptions object, comprised of the following properties:
interest_rate (number) The interest rate used in the calculations. By default, this will be the most recent 10-Year Treasury Constant Maturity Rate available, unless a specific rate or a specific as-of date is passed as a parameter.
interest_rate_as_of ("YYYY-MM-DD") The as-of date of the 10-Year Treasury Constant Maturity Rate used in the calculation. If a specific rate is passed as a parameter, this property will not be included.
mortality_rates The mortality rates used in the calculations. By default, this will be the most recent unisex mortality table published by the IRS under §417(e)(3)(B) ("Updated Mortality Improvement Rates and Static Mortality Tables for Defined Benefit Pension Plans"), unless specific mortality rates are passed as parameters.
mortality_rates_as_of ("YYYY-MM-DD") The as-of date of the IRS Code §417(e)(3)(B) mortality table used in the calculation. If specific mortality rates are passed as parameters, this property will not be included.
Calculations
The response contains a calculations object, comprised of the following properties:
life_expectancy
life_expectancy is an array of objects with the following properties:
age (integer) The participant's age
single_life (number) The calculated life expenctancy, in years, of a partipant age years old, based on the unisex mortality rates provided
joint_and_survivor (number) The calculated life expenctancy, in years, of a partipant's surviving spouse, assuming both the participant and her spouse are age years old, based on the unisex mortality rates provided
annuity_factors
annuity_factors is an array of objects with the following properties:
age (integer) The participant's age
single_life (number) The annuity factor for a single life annuity, for an annuitant age years old, based on the interest and unisex mortality rates provided. Dividing a participant's balance by the annuity factor yields an annual single life annuity payment.
joint_and_survivor (number) The annuity factor for a qualified joint and 100% survivor annuity, for an annuitant and spouse who are both age years old, based on the interest and unisex mortality rates provided. Dividing a participant's balance by the annuity factor yields an annual qualified joint and 100% survivor annuity payment.
lifetime_income_factors
lifetime_income_factors is an array of objects with the following properties:
age (integer) The participant's age
single_life (number) Multiplying a participant's balance, assuming she is age years old, by this lifetime income factor yields her monthly lifetime income payment, based on a single life annuity
joint_and_survivor (number) Multiplying a participant's balance, assuming she is age years old, by this lifetime income factor yields a monthly lifetime income payment, for her life, and for her spouse's life, based on a qualified joint and 100% survivor annuity
…a 67-year old participant with a $125,000 balance would have monthly lifetime income payments of:
SLA: $125,000 × 0.0048616785 = $607.71
QJSA: $125,000 × 0.0039841414 = $498.02
Parameters
interest_rate
To calculate lifetime income calculations using a specific interest rate, use the interest_rate parameter. Pass the value without the '%' symbol. (E.g., a value of 1.25% should be passed as 1.25) Valid values are between 0.00 and 20.00.
To calculate lifetime income calculations using the 10-Year Treasury Constant Maturity Rate as of a specific date, use the interest_rate_as_of parameter.
The value should contain a date in this format: YYYY-MM-DD. (E.g., May 1, 2021 should be passed as 2021-05-01.)
The service has historical 10-Year Treasury Constant Maturity Rate data since Jan. 1, 2021 through the most recent available data on Federal Reserve Economic Data (FRED®)
If you pass a date that's earlier than the earliest available date, the service will utilize the earliest available date (Jan. 1, 2021). If you pass a date that's later than the latest available date, the service will use the latest available date.
To calculate lifetime income calculations using a specific set of mortality rates, use the mortality_rates parameter.
A valid set of mortality rates must contain rates for every age between 67 and 120, inclusive. Each mortality rate should be a value between 0 and 1.
Mortality assumptions are typically based on the unisex mortality table that is created and published by the IRS under Code §417(e)(3)(B) ("Updated Mortality Improvement Rates and Static Mortality Tables for Defined Benefit Pension Plans"). The 2020 table is available here, and the 2021 table is available here.
For example, to utilize the 2020 version, pass the mortality_rates_as_of parameter with a value of 2020-01-01. To utilize the 2021 version, pass a value of 2021-01-01 instead.
If you pass a date that's earlier than the earliest available date, the service will utilize the earliest available table (currently 2020). If you pass a date that's later than the latest available date (currently 2021), the service will use the latest available table.
By default, the service will use the most recent table.
By default, the service will return an array of lifetime_income_factors indexed by age. So, for example, to calculate the monthly lifetime income payment for a participant aged 67 based on a single-life annuity, you would multiply that participant's current balance by the single_life property of the lifetime_income_factors object for age 67 to obtain that result.
For convenience, however, the service allows you to pass an array of participants using the participants parameter, and the service will calculate the monthly lifetime income payment for each participant based on a single-life annuity and qualified joint and 100% survivor annuity.
Each participant should be represented by an object with the following properties:
id (string)
age (integer) This value is optional; the service will assume age 67 if the actual age is not provided. For participants 67 or younger, we recommend omitting this parameter for anonymity.
balance (decimal)
The service allows you to pass up to 5,000 participants via this property.