API Reference

 

Introduction

 
 

Getting Started

 

The LT Trust API is a RESTful API. Our API has predictable, resource-oriented  URLs, and uses HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP authentication and HTTP verbs, which are understood by off-the-shelf HTTP clients.  JSON is returned by all API responses, including errors.

LT Trust supports two API environments TEST and PROD.  The TEST domain is rc.ltetire.com, and the PROD domain is connect.ltretire.com.  This documentation only contains references to TEST.

API Endpoint

https://rc.ltretire.com/v1/
 

Get Status

 

Get the API system status

Header
Field Description
Content-Type
string
Always set to 'application/json'
Authorization
string
'Bearer' plus JSON Web Token (JWT) provided by LT

Example request

curl https://rc.ltretire.com/v1/status \
  -X GET \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx'

Example response

{
  "status": "OK"
}
 
 

Common Fields

 
Common Fields
Field Description
ein
string
Employer Identification Number
Size range: 1..9
planId
string
Plan's unique Id
Size range: 1..12
planName
string
Name of the plan
Size range: 1..60
yrEndDate
date
Plan's year-end-date (e.g. 2018-12-31)
Format: YYYY-MM-DD
ssn
string
Employee's social security number without dashes. Arguments will be validated against known bad SSNs.
Size range: 9
investment
object
An object whose fields define an investment vehicle
displaymodels
query string param
string, optional
To display or not to display models, which are typically funds-of-funds. In either case, "core" funds are always displayed.
Y - Displays models but not the model holdings
N - Default; Does not display models but does display model holdings
Allowed values: see above
payFrequencyCode
string
The pay frequency code:
B - Biweekly
S - Semimonthly
W - Weekly
M - Monthly
O - Off-cycle*
A - Annual
C - Correction*
2 - Semiannual
Allowed values: see above
*Not available for onboarding
payFrequencySequenceNumber
integer
Typically used for payroll corrections
Size range: 1-5
checkDateExpected
date
The date this payroll was expected to be processed.
Size range: 10
Format: "YYYY-MM-DD"
Validation: Must be within 7 days of checkDateActual. See YearsSubmittedDoNotMatch, InvalidCheckDateExpected, and InvalidDayOfTheWeek in Error Types
currPeriodComp
float
Compensation for the current pay period. Can be positive or negative. Can be zero. Can have a precision of up to two decimal places.
businessEntityTypeCode
string
The business entity type code:
1 - Corporation
2 - Partnership
3 - Subchapter S corp
4 - Sole Prop.
5 - Multi-employer
6 - Professional corp.
7 - Non-profit
8 - Other
A - Hospital
B - School division (K-12)
C - University
D - Church
E - Government
F - Home Health Service Agency
G - Health/Welfare Svc Agency
Allowed values: see above
Investment Product Object
Field Description
id
string
Investment vehicle unique identifier. If type is M for Model, id is a numeric value like 1600. If type is F for Fund/non-model, id is an alphanumeric value like VTSMX (usually the ticker symbol).
Size range: 1..38
type
char
Type of investment vehicle; M is for Model; F is generally for Fund, but it can represent other securities too (e.g. ETFs).
Allowed Values: M, F
modelOnly
string, optional
Values:
Y - Fund is only available as part of a model and not as a core fund. Only valid when "type" is "F for Fund".
N - Fund is available as part of a model as well as a core fund. Only valid when "type" is "F for Fund".
NA - Only valid when "type" is "M for Model".
Allowed values: see above
description
string, optional
Investment vehicle description
Size range: 1..150
cusip
string, optional
Fund's CUSIP; "NA" for models
Size range: 1..14
closeDate
date, optional
The date at wich the investment vehicle became closed to the plan
Format: YYYY-MM-DD
 

Transaction Responses

 

Most transactions involve spawning several batch jobs within our system of record.  In transactional responses, LT returns the status of each of those spawned batch jobs.  You can find the status of each batch job in the response's jobQResponses object as described below.

JobQResponse Object
Field Description
groupName
string
NOTE: names are subject to change. Name of the task group to which this job belongs
jobId
integer
The Id of the job that was created in LT's system of record (e.g. 3488736)
jobStatusCode
string
The current status of the job:
successful
successful_with_warnings
cancelled
errors
on_hold
in_progress - the spawned batch job hasn't completed yet
pending - typically happens within a task group where the job is waiting for its dependancy(s) to finish
released_to_be_run - most likely the job agent is not running or busy
Allowed values: see above
queueDateTime
timestamp
The datetime at which the job was queued (e.g. 2018-03-23T18:18:40)
jobStartDateTime
timestamp
The datetime at which the job started
jobEndDateTime
timestamp
The datetime at which the job completed
requestId
integer
The Id returned by system of record upon adding the job to the queue (e.g. 3713537)
taskGroupId
integer
The positive or negative Id of the task group from which the job was created (e.g. -13, 1919, etc.)
taskId
integer
The Id of the specific task (e.g. 29)
taskName
string
NOTE: names are subject to change. Name of the task that was performed by this job (e.g. "Post Transfers")
transactionIds
integer[]
Array of associated transactions ids
Size range: 0..
output
string[], optional
HTML encoded errors from the system of record. To view, copy and paste each element to an HTML file, and open that file in a browser.

Example Transaction Response

{
  "jobQResponses": [
    {
      "jobId": "3488736",
      "requestId": "3713537",
      "taskGroupId": "-13",
      "taskId": "34",
      "jobStatusCode": "successful",
      "queueDateTime": "2018-03-23T18:18:40",
      "jobStartDateTime": "2018-03-23T18:18:41",
      "jobEndDateTime": "2018-03-23T18:18:42",
      "groupName": "Create allocations",
      "taskName": "Update Allocation Percents",
      "transactionIds": [123]
    },
    {
      "jobId": "3488737",
      "requestId": "3713538",
      "taskGroupId": "1919",
      "taskId": "29",
      "jobStatusCode": "successful",
      "queueDateTime": "2018-03-23T18:18:49",
      "jobStartDateTime": "2018-03-23T18:18:49",
      "jobEndDateTime": "2018-03-23T18:18:49",
      "groupName": "AutoInvestElect",
      "taskName": "Create transactions",
      "transactionIds": [456,789]
    },
    {
      "jobId": "3488737",
      "requestId": "3713538",
      "taskGroupId": "1919",
      "taskId": "17",
      "jobStatusCode": "successful",
      "queueDateTime": "2018-03-23T18:18:49",
      "jobStartDateTime": "2018-03-23T18:18:50",
      "jobEndDateTime": "2018-03-23T18:18:51",
      "groupName": "AutoInvestElect",
      "taskName": "Post Transfers",
      "transactionIds": []
    }
  ]
}
 

Errors

 

LT uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, invalid value, etc.). Codes in the 5xx range indicate an error with LT's system processing.

Important: Different error types can be added and removed over time so you should make sure your application accepts new ones as well.

Error Object
Field Description
code
integer
HTTP status code
message
string
Error message. Typcially, the corresponding HTTP message (e.g. "OK", "Internal Server Error", etc.)
name
string
Name of error. Defaults to APIError. (see below)
error
string
Descriptive error message (e.g. "One or more records contained errors")
requestId
string, optional
Used as an internal reference
details
string[], optional
Typically used to list erroneous, input records. Not applicable to all errors.
jobQResponses
object[], optional
Array of JobQResponse Objects. Not applicable to all errors.
stack
string, optional
Stack trace
Error Types
Name Description
DuplicateSsnDataMismatch
For a given SSN, each record must have the same indicative values (e.g. For a given SSN, each record must have the same email address)
InactivePlan
The plan is inactive and cannot be processed
InvalidCheckDateExpected
The checkDateExpected does not match the value in the system of record
InvalidDayOfTheWeek
While validating the checkDateExpected, an invalid day of the week was returned
InvalidDivisionId
The division is not valid for the specified plan
InvalidPayScheduleName
The specified plan does not have a valid off-cycle pay schedule name
YearsSubmittedDoNotMatch
The checkDateActual and checkDateExpected are not within the same calender year
JobFailed
A job(s) failed within the system of record. See the JobQResponse Object
InvalidData
Unspecified validation error
APIError
Unspecified error

Generic Error Example

{
  "code": 500,
  "message": "Internal Server Error",
  "name": "APIError",
  "error": "Failed executing database command",
  "requestId": "acc95307-09d2-4052-bc3a-ba5666fee519",
  "stack": "APIError: Internal Server Error\n  at..."
}

Validation Error Example

{
  "code": 400,
  "message": "Bad Request",
  "name": "InvalidData",
  "error": "One or more records contained errors. Please check the details below, correct any errors, and resubmit.",
  "requestId": "15b816f4-0964-4578-9f0a-05d01814cfeb",
  "details": [
  "For field<dateOfBirth> for SSN<123456789>, the provided value<1984-06-05> did not match the known value<1984-06-06>",
  "For field<xyz> for SSN<123456789>,...",
  ...
  ],
  "stack": "..."
}

Job Failure Example

{
  "code": 500,
  "message": "Internal Server Error",
  "name": "JobFailed",
  "error": "The system of record failed to process the job(s).",
  "requestId": "cc44a773-87ed-4d3b-9bfe-227011228d7f",
  "jobQResponse": [
    {
      "requestId": "3713735",
      ...
      "jobStatusCode": "successful",
      ...
    },
    {
      "requestId": "3713736",
      ...
      "jobStatusCode": "successful",
      ...
    },
    {
      "jobId": "3488737",
      "requestId": "3713538",
      "taskGroupId": "1919",
      "taskId": "17",
      "jobStatusCode": "errors",
      "queueDateTime": "2018-03-23T18:18:49",
      "jobStartDateTime": "2018-03-23T18:18:50",
      "jobEndDateTime": "2018-03-23T18:18:51",
      "groupName": "AutoInvestElect",
      "taskName": "Post Transfers",
      "output": ["<meta http-equiv=...","<meta http-equiv=..."]
    }
  ],
  "stack": "..."
}

Allocations

Allocation Object
Field Description
allocationPercent
float
IMPORTANT: allocations for a given ssn must total 100. Allocation can have a precision of 2 (e.g. 50.25). Watch out for allocations like 33.3333, which could be problematic for two reasons: 1) repeating decimal beyond 2 decimals and 2) needs to total like this 33.33, 33.33, and 33.34.
Size range: 0-100
investmentProductId
string
See Common Fields
investmentProductType
char
See Common Fields
 
 

List Allocations

 

Get the entire list of allocations associated with the specified plan. Note the response is three-tiered: 1) employees, 2) sources, 3) allocations.

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
Response
Field Description
employees
object[]
Array of Employee-source-allocation Objects
Size range: 0..
Employee-source-allocation Object
Field Description
ssn
string
See Common Fields
sources
object[]
Array of Source-allocation objects (see below)
Size range: 0..
Source-allocation Object
Field Description
sourceId
integer
See Source Object
typeCode
char
See Source Object
typeDescription
string
See Source Object
allocations
object[]
Array of Allocation objects (see above)
Size range: 0..

Example request

curl https://rc.ltretire.com/v1/plans/WXYZ/allocations \
  -X GET \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx'

Example response (200)

{
  "employees": [
    {
      "ssn": "000000012",
      "sources": [
        {
          "sourceId": "1",
          "typeCode": "B",
          "typeDescription": "Employer Disc2",
          "allocations": [
            {
              "allocationPercent": "60.00",
              "investmentProductID": "1699",
              "investmentProductType": "M"
            },
            {
              "allocationPercent": "40.00",
              "investmentProductID": "ACRNX",
              "investmentProductType": "F"
            }
          ] // end allocations array
        } // end source obj
      ] // end sources array
    } // end employee obj
  ] // end employees array
} // end response
 

Modify Allocations

 

Modify plan allocations for some or all employees. Six concurrent request limit. Allocations are not allowed between 1:30 - 4:30 PM MST in order to support our trading process

ARGUMENTS
Field Description
planId
string
Plan's unique Id
Size range: 1..12
conformEndingBalanceCode
char
Flag indicating whether to conform ending balance - Y = Yes; N = No
employees
object[]
Array of Employee objects (see below)
Size range: 1..
Employee Object
Field Description
ssn
string
See Common Fields
Validation: must be a valid SSN associated to the specified plan
allocations
object[]
Array of Allocation objects (see above)
Size range: 1..
Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects. If conformEndingBalanceCode is 'N', the array will contain 1 element. Otherwise, it will contain 3 elements.
NOTE: If conformEndingBalanceCode is 'Y' and if any participants have pending/unsettled trades, the "Post Transfers" task (taskId 17) will return "errors" for the "jobStatus". Note that LT's TEST environment does NOT settle trades; therefore, for a given participant, the initial conform-ending-balance allocation call will succeed, but subsequent calls will fail.
Size range: 1-3

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/allocations \
  -X PATCH \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '{
    "conformEndingBalanceCode": "N",
    "employees": [
      {
        "ssn": "123456789",
        "allocations": [
          {
            "allocationPercent": "60.00",
            "investmentProductID": "1699",
            "investmentProductType": "M"
          },
          {
            "allocationPercent": "40.00",
            "investmentProductID": "1700",
            "investmentProductType": "M"
          }
        ]
      },
      {
        "ssn": "333224444",
        "allocations": [
          {
            "allocationPercent": "100.00",
            "investmentProductID": "1699",
            "investmentProductType": "M"
          }
        ]
      }
    ]
  }'

Example response (200)

{
  "jobQResponses": [
    {
      "jobId": "3488736",
      "requestId": "3713537",
      "taskGroupId": "-13",
      "taskId": "34",
      "jobStatusCode": "successful",
      "queueDateTime": "2018-03-23T18:18:40",
      "jobStartDateTime": "2018-03-23T18:18:41",
      "jobEndDateTime": "2018-03-23T18:18:42",
      "groupName": "Create allocations",
      "taskName": "Update Allocation Percents"
    },
    {
      "jobId": "3488737",
      "requestId": "3713538",
      "taskGroupId": "1919",
      "taskId": "29",
      "jobStatusCode": "successful",
      "queueDateTime": "2018-03-23T18:18:49",
      "jobStartDateTime": "2018-03-23T18:18:49",
      "jobEndDateTime": "2018-03-23T18:18:49",
      "groupName": "AutoInvestElect",
      "taskName": "Create transactions"
    },
    {
      "jobId": "3488737",
      "requestId": "3713538",
      "taskGroupId": "1919",
      "taskId": "17",
      "jobStatusCode": "successful",
      "queueDateTime": "2018-03-23T18:18:49",
      "jobStartDateTime": "2018-03-23T18:18:50",
      "jobEndDateTime": "2018-03-23T18:18:51",
      "groupName": "AutoInvestElect",
      "taskName": "Post Transfers"
    }
  ]
}

Example response (400)

{
  "code": 400,
  "message": "Bad Request",
  "name": "JobFailed",
  "error": "Job was unsuccessful and has a status code of errors. Job Aborted.",
  "requestId": "c7c9b7c1-f07b-419f-b198-68375578c042",
  "jobQResponses": [
    {
      "jobId": "5590669",
      "requestId": "5840353",
      "taskGroupId": "-13",
      "taskId": "34",
      "jobStatusCode": "successful",
      "queueDateTime": "2021-05-04T20:40:09.000Z",
      "jobStartDateTime": "2021-05-04T20:40:18.000Z",
      "jobEndDateTime": "2021-05-04T20:40:18.000Z",
      "groupName": "Create allocations",
      "taskName": "Update Allocation Percents",
      "transactionIds": []
    },
    {
      "jobId": "5590670",
      "requestId": "5840354",
      "taskGroupId": "1919",
      "taskId": "29",
      "jobStatusCode": "successful",
      "queueDateTime": "2021-05-04T20:40:23.000Z",
      "jobStartDateTime": "2021-05-04T20:40:24.000Z",
      "jobEndDateTime": "2021-05-04T20:40:25.000Z",
      "groupName": "AutoInvestElect",
      "taskName": "Create transactions",
      "transactionIds": []
    },
    {
      "jobId": "5590670",
      "requestId": "5840354",
      "taskGroupId": "1919",
      "taskId": "17",
      "jobStatusCode": "errors",
      "queueDateTime": "2021-05-04T20:40:23.000Z",
      "jobStartDateTime": "2021-05-04T20:40:25.000Z",
      "jobEndDateTime": "2021-05-04T20:40:36.000Z",
      "groupName": "AutoInvestElect",
      "taskName": "Post Transfers",
      "transactionIds": [
        1043
      ],
      "output": [
        "{HTML DETAILS LISTED HERE}"
      ]
    }
  ]
}

Gain/Loss

GAINLOSSRECORDS OBJECT
Field Description
allocationAmount
float
The amount of this gain/loss
Max two decimal points
effectiveDate
date
Date this transaction is effective
Format: YYYY-MM-DD
gainMethod
char
Currently the only valid value is "D" for Dollars. Future enhancements might enable "U" for Units.
Allowed values: D
investmentProductID
string
Unique Id for the investment product/security
Size range: 1..9
investmentProductType
char
Type of investment product/security; fund or model
Allowed values: F, M
ssn
string
See Common Fields
 
 

Post Gain/Loss

 

Post a gain/loss transaction.  Typically used by partners to submit late payroll interest, which they have calculated.  Typical usage: A partner calculates lost earnings via the DOL lost earnings calculator.  Then that partner posts those lost earning via this endpoint.

ARGUMENTS
Field Description
planId
url param,string
Plan's unique Id
Size range: 1..12
divisionId
string, optional
Plan's unique division Id
Size range: 6
responsibleParty
string
The party responsible for the gain/loss; client or partner.
Allowed values: C, P
gainLossRecords
object[]
Array of gainLoss objects (see above)
Size range: 1..
Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects
transactionStatus
Field Description
requestId
integer
relius system request Id
planId
string
plan's unique Id
yearEndDate
datetime
year end date of the plan
transId
integer
relius transaction Id
ssnum
string
See Common Fields
transactionStatus
string
the status of the request. P = Posted, I = Incomplete
fund
string
fund of the gainloss allocation
amount
float
the amount for gain/loss

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/gainloss \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx'
  -d '{
    "divisionId": "1234",
	  "responsibleParty": "C",
    "gainLossRecords": [
        {
            "allocationAmount": "1.3000",
            "effectiveDate": "2020-05-04",
            "gainMethod": "D",
            "investmentProductID": "XXXX",
            "investmentProductType": "F",
            "ssn": "012345678"
        },
        {
            "allocationAmount": "5.0000",
            "effectiveDate": "2020-05-04",
            "gainMethod": "D",
            "investmentProductID": "0000",
            "investmentProductType": "M"
        },
        {
            "allocationAmount": "1.3000",
            "effectiveDate": "2020-05-04",
            "gainMethod": "D",
            "investmentProductID": "XXXX",
            "investmentProductType": "F",
            "ssn": "012345679"
        }
    ]
}'

Example Response (200)

{
  "jobQResponses": [
    {
      "jobId": "4934037",
      "requestId": "5174121",
      "taskGroupId": "2665",
      "taskId": "29",
      "jobStatusCode": "successful",
      "queueDateTime": "2020-06-09T10:48:50",
      "jobStartDateTime": "2020-06-09T10:48:55",
      "jobEndDateTime": "2020-06-09T10:48:55",
      "groupName": "GainLossImportTransaction XML",
      "taskName": "Create transactions",
      "transactionIds": []
    },
    {
      "jobId": "4934037",
      "requestId": "5174121",
      "taskGroupId": "2665",
      "taskId": "21",
      "jobStatusCode": "successful_with_warnings",
      "queueDateTime": "2020-06-09T10:48:50",
      "jobStartDateTime": "2020-06-09T10:48:55",
      "jobEndDateTime": "2020-06-09T10:48:59",
      "groupName": "GainLossImportTransaction XML",
      "taskName": "Post Gain/Loss",
      "transactionIds": [
        899,
        900,
        901
      ],
      "output": [
      ]
    }
  ],
  "transactionStatus": [
    {
      "requestId": "5174121",
      "planId": "PLAN101",
      "yearEndDate": "2020-12-31T06:00:00.000Z",
      "transId": 899,
      "ssnum": "012345678",
      "transactionStatus": "I",
      "fund": "XXXX",
      "amount": 1.3
    },
    {
      "requestId": "5174121",
      "planId": "PLAN101",
      "yearEndDate": "2020-12-31T06:00:00.000Z",
      "transId": 900,
      "ssnum": null,
      "transactionStatus": "P",
      "fund": null,
      "amount": 5
    },
    {
      "requestId": "5174121",
      "planId": "PLAN101",
      "yearEndDate": "2020-12-31T06:00:00.000Z",
      "transId": 901,
      "ssnum": "012345679",
      "transactionStatus": "I",
      "fund": "XXXX",
      "amount": 1.3
    }
  ]
}

Payroll Automation

 
 

List Payroll Slots

 

Get the list of open payroll slots associated with the specified plan

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
Response
Field Description
payschedules
object[]
Array of Payschedule Objects
Size range: 0..
Payschedule Object
Field Description
ein
string
See Common Fields. The system of record associates payrolls to employers not plans
payFrequencyCode
string
See Common Fields
payFrequencySequenceNumber
char
See Common Fields
payScheduleName
string
Name of the payschedule
payPeriods
object[]
Array of Pay Period Objects
Size range: 0..
Pay Period Object
Field Description
payPeriodBeginDate
date
Begin date for the pay period
checkDateExpected
date
See Common Fields
isValid
boolean, optional
Is the specified date valid for this pay period?

Example request

curl https://rc.ltretire.com/v1/plans/WXYZ/payschedules \
  -X GET \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx'

Example response (200)

[
  {
    "ein": "000000009",
    "payFrequencyCode": "S",
    "payFrequencySequenceNumber": 0,
    "payScheduleName": "PA_S_DOOR01",
    "payPeriods": [
      {
        "payPeriodBeginDate": "2019-01-16",
        "checkDateExpected": "2019-01-31"
      }, ...
    }, ...
]
 

Validate Off-cycle Expected Date

 

Validate that the specified date is a valid checkDateExpected for an off-cycle payroll.

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
date
date
query str param
The checkDateExpected date to validate
Response
Field Description
payschedules
object[]
Array of Payschedule Objects
Size range: 0..

Example request

curl https://rc.ltretire.com/v1/plans/WXYZ/payschedules/offcycles?date={YYYY-MM-DD} \
  -X GET \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx'

Example response (200)

[
  {
    "ein": "000000009",
    "payFrequencyCode": "C",
    "payFrequencySequenceNumber": 1,
    "payScheduleName": "PA_CYE",
    "payPeriods": [
      {
        "payPeriodBeginDate": "2019-01-18",
        "checkDateExpected": "2019-01-18",
        "isValid": false
      }
    ]
  },
  {
    "ein": "000000009",
    "payFrequencyCode": "O",
    "payFrequencySequenceNumber": 2,
    "payScheduleName": "PayrollAuto_OffCycle",
    "payPeriods": [
      {
        "payPeriodBeginDate": "2019-01-18",
        "checkDateExpected": "2019-01-18",
        "isValid": true
      }
    ]
  }
]
 

Process Payroll

 

Process a payroll. Twelve concurrent request limit.

ARGUMENTS
Field Description
planId
string
Plan's unique Id
Size range: 1..12
Validation: See InactivePlan in Error Types
checkDateActual
date
The date this payroll was processed.
Size range: 10
Format: "YYYY-MM-DD"
Validation: Must be within 60 days from current system date. If payFrequencyCode is for off-cycle, date will be validated against system of record. Otherwise, date must not have been previously used. Must be within 7 days of checkDateExpected. See also YearsSubmittedDoNotMatch in Error Types
checkDateExpected
date, optional
See Common Fields
count
integer, optional
Used to calculate pay date during the submission of an off-cycle or correction. For example, if a client submits a correction on 2020-01-31 with a file count of 1, the API will create a payday for 2020-01-31. If in a subsequent request, the client submits a correction for 2020-01-31 with a file count of 1 it will fail because the payday is already used, but if they submit the same file with a file count of 2 the API will create a payday of 2020-01-30 and use that. The client can submit for the same date 5 times before it will fail.
Size range: 1-5
divisionId
string, optional
Must be a valid Division Id for the given plan. The API only supports one submission per division per pay period. An ACH bank account must be on record for the specified division.
Size range: 0..6
Validation: See InvalidDivisionId in Error Types
payFrequencyCode
string
See Common Fields
responsibleParty
string, required if payFrequencyCode = 'C'
LTTrust - LT will calculate market value adjustments/NAV gain/loss; Net proceeds will be covered by LT if appropriate Sponsor - LT will calculate market value adjustments/NAV gain/loss; Net proceeds will be drawn from Sponsor's account Partner - LT will calculate market value adjustments/NAV gain/loss; Net proceeds will be drawn from Partner's account NoGL - LT will NOT calculate any market value adjustments/NAV gain/loss
Allowed Values: see above
payrollRecords
object[]
An array of payroll records (see below)
Size range: 1..
PayrollRecord
Field Category Description
ssn
string
Indicative See Common Fields
lastName
string, optional
Indicative Employee's last name
Size range: 1..20
Validation*
firstName
string, optional
Indicative Employee's first name
Size range: 1..20
Validation*
gender
string, optional
Indicative Employee's gender (case insensitive)
Size range: 1,4,6
Allowed values: m, f, male, female
Validation*
dateOfBirth
date
Indicative Employee's date of birth
Size range: 10
Format: "YYYY-MM-DD"
Validation*: Must match the value in system of record. Must not equal dateOfHire.
dateOfHire
date
Indicative Employee's hire date. If all of the following conditions are true, the system will use the provided dateOfHire to update the dateOfRehire field instead of the dateOfHire field.
  • dateOfHire is not >= 01/01 the following year
  • stored dateOfHire has a value
  • stored dateOfTermination is before the provided dateOfHire
  • stored dateOfRehire is before the stored dateOfTermination
[stored = current value in system of record]
Size range: 10
Format: "YYYY-MM-DD"
Validation*
dateOfRehire
date, optional
Indicative Employee's date of rehire
Size range: 10
Format: "YYYY-MM-DD"
Validation*: If value provided, dateOfTermination must also be provided if it's not already on record (in other words, can't have a rehire date if employee was never terminated in the 1st place)
dateOfTermination
date, optional
Indicative Employee's date of termination
Size range: 10
Format: "YYYY-MM-DD"
Validation*
addressLine1
string, optional
Indicative Employee's address line 1
Size range: 1..30
Validation*
addressLine2
string, optional
Indicative Employee's address line 2
Size range: 1..30
Validation*
city
string, optional
Indicative Employee's city
Size range: 1..30
Validation*
state
string, optional
Indicative Employee's two-character state code
Size range: 2
Validation*
zip
string, optional
Indicative Employee's zip code
Size range: 5
Format: "NNNNN"
Validation*
maritalStatus
string, optional
Indicative Employee's marital status.
Allowed values: married, single, divorced, widowed, head of household, other, m, s, d, w, h, o
Validation*
email
string, optional
Indicative Employee's email address
Size range: ..100
Validation*
electronicStatement
char, optional
Indicative Employee's electronic statement flag
Allowed values: Y, N
Validation*
eePreTax
float, optional
Source Amount Employee pre-tax contribution
Validation**
eeRoth
float, optional
Source Amount Employee Roth contribution
Validation**
erMatch
float, optional
Source Amount Employer match
Validation**
shMatch
float, optional
Source Amount Safe harbor match. May be QACA or non-QACA
Validation**
profitSharing
float, optional
Source Amount Profit sharing
Validation**
shNonelective
float, optional
Source Amount Safe Harbor Non-elective. May be QACA or non-QACA
Validation**
loanPayment
float, optional
Source Amount Employee's loan payment amount
Validation**
currPeriodComp
float, optional
Current Period See Common Fields
currPeriodHours
float, optional
Current Period Employee's hours for the current pay period. Must be positive. Can be zero. Can have a precision of up to two decimal places.

*See DuplicateSsnDataMismatch in Error Types

**Validation rules for Correction Payrolls:

  1. Every person in the file must have a financial change (passing ONLY salary/hours will not work). If only some people have a financial change and others do not the, file will reject

    • Financial fields include: eePreTax, eeRoth, erMatch, shMatch, profitSharing, shNonelective and loanPayment

  2. Participant must be eligible. If ineligible, please contact your Relationship Manager to bypass the rule on an ad-hoc basis

***Validation rules for source amounts:

  1. Can be positive or negative (except loanPayment, which must be positive). Negative amounts can be related to adjustments

  2. For a negative contribution, sources for available funds cannot have pending trades

  3. Participant must be eligible

  4. Source must be allowed to accept contributions

  5. Can have a precision of up to two decimal places

  6. Must be zero or null/not-provided if not a valid source for the plan

  7. Account balance must be greater than total negative contributions (e.g. If deferral = 100, roth = -50, and shne = -100, account balance must be greater than 150)

  8. If amount is not zero:

    • Participant must be eligible to contribute

    • Deferral Status must not be suspended (e.g. participant took a hardship). Before submitting a payroll, one should check the Deferral Suspension Dates using the Participants endpoint. checkDateExpected should not be between a participant’s start & end suspension dates.

Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects
Size range: 4

Example request

curl https://rc.ltretire.com/v1/plans/WXYZ/payroll \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '{
     "checkDateActual": "2018-04-01",
     "checkDateExpected": "2018-04-01",
     "count": 1,
     "divisionId": "DIV",
     "payFrequencyCode": "B",
     "payrollRecords": [
         {
             "ssn": "123456789",
             "lastName": "Smith",
             "firstName": "John",
             "gender": "M",
             "maritalStatus": "S",
             "addressLine1": "123 Main Street",
             "addressLine2": "Apt. 123",
             "city": "Anywhere",
             "state": "Any State",
             "zip": "12345",
             "dateOfBirth": "1970-02-01",
             "dateOfHire": "1998-01-01",
             "dateOfRehire": "2015-01-01",
             "dateOfTermination": "2016-12-12",
             "electronicStatement": "Y",
             "email": "me@myemail.com",
             "eePreTax": "213.02",
             "profitSharing": "1002.33",
             "erMatch": "22.56",
             "eeRoth": "123.00",
             "shMatch": "33.44",
             "shNonelective": "223.33",
             "loanPayment": "23.32",
             "currPeriodComp": "55555.00",
             "currPeriodHours": "40"
         },
         {
             ...
         }
     ]
 }
}'

Example Response (200)

[
    {
        "jobId": "3710264",
        "requestId": "3937340",
        "taskGroupId": "1490",
        "taskId": "4",
        "jobStatusCode": "successful_with_warnings",
        "queueDateTime": "2018-05-10T11:12:26",
        "jobStartDateTime": "2018-05-10T11:12:30",
        "jobEndDateTime": "2018-05-10T11:12:34",
        "groupName": "PayrollAuto-Payrol Import w/posting",
        "taskName": "Import census payroll data via DER"
    },
    {
        "jobId": "3710264",
        "requestId": "3937340",
        "taskGroupId": "1490",
        "taskId": "12",
        "jobStatusCode": "successful",
        "queueDateTime": "2018-05-10T11:12:26",
        "jobStartDateTime": "2018-05-10T11:12:34",
        "jobEndDateTime": "2018-05-10T11:12:38",
        "groupName": "PayrollAuto-Payrol Import w/posting",
        "taskName": "Post Eligibility transaction - All employees"
    },
    {
        "jobId": "3710264",
        "requestId": "3937340",
        "taskGroupId": "1490",
        "taskId": "14",
        "jobStatusCode": "successful_with_warnings",
        "queueDateTime": "2018-05-10T11:12:26",
        "jobStartDateTime": "2018-05-10T11:12:38",
        "jobEndDateTime": "2018-05-10T11:12:45",
        "groupName": "PayrollAuto-Payrol Import w/posting",
        "taskName": "Post Contributions"
    },
    {
        "jobId": "3710264",
        "requestId": "3937340",
        "taskGroupId": "1490",
        "taskId": "19",
        "jobStatusCode": "successful",
        "queueDateTime": "2018-05-10T11:12:26",
        "jobStartDateTime": "2018-05-10T11:12:45",
        "jobEndDateTime": "2018-05-10T11:12:46",
        "groupName": "PayrollAuto-Payrol Import w/posting",
        "taskName": "Post Loan Payments"
    }
]

Fees

Fee Object
Field Description
allocationAmount
float
The fee amount to post.
Validation: must be a negative number with two decimal points
endDate
date
The end of quarter date.
Size range: 10
Format: YYYY-MM-DD
feeIsPerParticipantCode
string
This will label the fee transaction based on ssn or plan.
Y - fee is based on individual ssn
N - fee is based on plan
feeLabelStatutoryCategoryCode
string
The category where the fee will be distributed under.
Validation: must be a fee label associated with plan.
gloabalFeeScheduleID
string
The fee schedule that the amount will post under.
Validation: must be a valid combination of globalFeeScheduleID and subTypeCode.
startDate
date
The start of quarter date
Size range: 10
Format: YYYY-MM-DD
subTypeCode
string
Type code should align with fee schedule
Validation: must be a valid combination of globalFeeScheduleID and subTypeCode.
yearEndDate
date
Plan's year-end-date (e.g. 2018-12-31)
Size range: 10
Format: YYYY-MM-DD.
ssn
string, optional
See Common Fields
 
 

Post Fees

 

Post fee transactions to the specified plan. Four concurrent request limit.

ARGUMENTS
Field Description
planId
string
Plan's unique Id
Size range: 1..12
fees
object[]
Array of fee objects (see above)
Size range: 1..
Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects.
Size range: 2

*Validation rules for Posting Fees

  1. If the plan has a pending transfer buy trade, the transaction will fail.

  2. If the plan has pending sell order, the transaction will fail

  3. Calls are not accepted between 11:00 AM and 4:00 PM MST.

  4. Calls are only accepted between the 4th and 12th business day after quarter end

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/fees \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '[
    {
        "allocationAmount": "-1709.4000",
        "endDate": "2019-12-31",
        "feeIsPerParticipantCode": "N",
        "feeLabelStatutoryCategoryCode": "NamedFiduc",
        "globalFeeScheduleID": "{gblFeeId}",
        "startDate": "2019-10-01",
        "subTypeCode": "As",
        "yearEndDate": "2020-12-31"
    },
    {
        "allocationAmount": "-188.7900",
        "endDate": "2019-12-31",
        "feeIsPerParticipantCode": "Y",
        "feeLabelStatutoryCategoryCode": "NamedFiduc",
        "globalFeeScheduleID": "{gblFeeId}",
        "ssn": "xxxxxxxxx",
        "startDate": "2019-10-01",
        "subTypeCode": "As",
        "yearEndDate": "2020-12-31"
    }
]'

Example response (200)

{
  "jobQResponses": [
    {
      "jobId": "4687392",
      "requestId": "4924249",
      "taskGroupId": "2861",
      "taskId": "29",
      "jobStatusCode": "successful",
      "queueDateTime": "2020-02-26T08:42:38",
      "jobStartDateTime": "2020-02-26T08:45:08",
      "jobEndDateTime": "2020-02-26T08:45:09",
      "groupName": "API-Fees",
      "taskName": "Create transactions",
      "transactionIds": []
    },
    {
      "jobId": "4687392",
      "requestId": "4924249",
      "taskGroupId": "2861",
      "taskId": "20",
      "jobStatusCode": "successful",
      "queueDateTime": "2020-02-26T08:42:38",
      "jobStartDateTime": "2020-02-26T08:45:09",
      "jobEndDateTime": "2020-02-26T08:45:32",
      "groupName": "API-Fees",
      "taskName": "Post Fees",
      "transactionIds": [
        2494,
        2495
      ]
    }
  ]
}

Onboarding

Onboarding Object
Field Description
partnerCode
string
The company abbreviated code.
Size Range: 2-3
employerIdentificationNumber
string
See Common Fields: ein
templatePlanId
string
The template the new plan will be modeled after.
planTypeCode
string
The plan type codes:
4 - 401(k)
3 - 403(b)
7 - 403(b)(7)
5 - 457
C - 501(c)(3)
D - Defined Contribution
E - ESOP
I - IRA
K - Keogh
M - Money Purchase
Q - Non-Qualified
O - ORP
X - Other
P - Profit Sharing
R - SARSEP
S - SEP
Z - SIMPLE
T - Target Benefit
B - Defined Benefit
F - Cafeteria
A - Cash Balance
Allowed values: see above
sponsorEmail
string
The main sponsors email address.
Validation: must include valid email address with '@' symbol
companyName
string
The company's main legal name.
Size Range: 50
phoneNumber
string
The phone number of the sponsor.
Size range: 12
Format: 123-456-7890
street1Address
string
The street address where the company is located.
Size range: 30
street2Address
string, optional
The apt, suite or room number the company is located.
Size range: 30
cityAddress
string
The city where the company is located.
Size range: 30
stateAddress
string
The state where the company is located.
Size range: 2
Validation: character state abbreviation
zipAddress
date
The zip code where the company is located.
Size range: 5
Format: XXXXX.
fiscalYearEndDate
date
The Plan's fiscal year-end date.
Size range: 10
Format: YYYY-MM-DD.
incorporationDate
date
The plan's date of incorporation.
Size range: 10
Format: YYYY-MM-DD.
actualPayFrequencyCode
string
The actual frequency in which loan repayments are made. See Common Fields: payFrequencyCode
businessEntityTypeCode
string
See Common Fields
yearEndDate
date
Plan's year-end date (e.g. 2018-12-31)
Size range: 10
Format: YYYY-MM-DD.
planName
string
The plan's official name.
Size range: 60
isConversionPlan
string
If a conversion or takeover plan, show 'Y'. if a new plan, show 'N'.
Allowed values: Y,N
achBankName
string
Plan's payroll bank name.
Size range: 50
achAccountNumber
string
The payroll bank account number.
Size range: 30
achRoutingNumber
string
The payroll bank account routing number.
Size range: 9
planContactFirstName
string
The sponsor's first name.
Size range: 20
planContactLastName
string
The sponsor's last name.
Size range: 20
planContactPhoneNumber
string
The phone number of the sponsor.
Size range: 12
Format: 123-456-7890
planContactEmail
string
The main sponsors email address.
Validation: must include valid email address with '@' symbol
planContactStreet1Address
string, optional
The plan contact's street address.
Size range: 30
planContactStreet2Address
string, optional
The plan contact's secondary street address.
Size range: 30
planContactCityAddress
string, optional
The plan contact's city address.
Size range: 30
planContactStateAddress
string, optional
The plan contact's state location.
Size range: 2
planContactZipAddress
string, optional
The plan contact's zip address.
Size range: 5
Format: XXXXX
payrollSchedule
object[], optional
Array of payrollSchedule objects (see below)
Size range: 1..
division
object[], optional
Array of division objects (see below)
Size range: 1..
 
 

Post Onboarding

 

Post onboarding requests for each employer. Two concurrent request limit.

ARGUMENTS
Field Description
onboarding
object[]
Array of onboarding objects (see above)
Size range: 1..
 
Payroll Schedule Object
Field Description
payFrequencyCode
string
See Common Fields
firstPayPeriodBeginDate
date
Plan's first pay period start date.
Size range: 10
Format: YYYY-MM-DD
firstPayPeriodEndDate
date
Plan's first pay period end date.
Size range: 10
Format: YYYY-MM-DD
 
Division Object
Field Description
divisionId

string
The ID number for the plan division.
Size range: 6
divisionName
string
The plan division name.
Size range: 50
payrollDivision
object[]
Array of payroll schedule objects associated with the division. (see below)
Size range: 1..
achBankName
string
The name of the plan's divisional bank.
Size range: 50
achAccountNumber
string
The bank account number for the divisional bank.
Size range: 30
achRoutingNumber
string
The bank account routing number for the divisional bank.
Size range: 9
 
Payroll Division Object
Field Description
payFrequencyCode
string
See Common Fields
firstPayPeriodBeginDate
date
Plan's divisional first pay period start date.
Size range: 10
Format: YYYY-MM-DD
firstPayPeriodEndDate
date
Plan's divisional first pay period end date.
Size range: 10
Format: YYYY-MM-DD
 
Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects.
Size range: 1
createPlanStatus
object[]
Array of createPlanStatus Objects.
Size range: 1..

Example request

curl https://rc.ltretire.com/v1/plans/onboarding \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '{ 
 "onboarding": [
	{
	  "recordType": "Employer",
	  "partnerCode": "partnername",
	  "employerIdentificationNumber": "xxxxxxxxx",
	  "templatePlanId": "TEMPPLANID",
	  "planTypeCode" : "4",
	  "sponsorEmail": "sbrodeur@brodeurcpa.com",
	  "companyName": "company1",
	  "phoneNumber": "123-456-7890",
	  "street1Address": "123 Main St",
	  "street2Address": "Suite 100",
	  "cityAddress": "Denver",
	  "stateAddress": "CO",
	  "zipAddress": "00000",
	  "fiscalYearEndDate": "2020-06-30",
	  "incorporationDate": "2000-01-01",
	  "actualPayFrequencyCode": "B",
	  "businessEntityTypeCode": "1",
	  "yearEndDate": "2020-12-31",
	  "planName": "name of plan goes here",
	  "isConversionPlan": "Y",
	  "achBankName": "Chase Bank",
	  "achAccountNumber": "0000000001",
	  "achRoutingNumber": "123456789",
	  "planContactFirstName": "John",
	  "planContactLastName": "Doe",
	  "planContactPhoneNumber": "123-456-7890",
	  "planContactEmail": "email@address.com",
	  "planContactTitle": "Vice President",
	  "planContactStreet1Address": "123 Main st",
	  "planContactStreet2Address": "Suite 100",
	  "planContactCityAddress": "Denver",
	  "planContactStateAddress": "CO",
	  "planContactZipAddress": "00000",
	  "esitmatedAnnualContribution": "100000",
	  "payrollProvider": "providerName",
	  "payrollSchedule": [
	  {
	    "payFrequencyCode": "B",
	    "firstPayPeriodBeginDate": "2020-03-13",
	    "firstPayPeriodEndDate":"2020-03-26"
	   }
	    ],
          "division": [
	   {
	     "divisionName": "newDiv",
	     "divisionId": "1",
	     "achBankName": "Chase",
	     "achAccountNumber":"0000000001",
	     "achRoutingNumber":"123456789",
	     "payrollDivision": [
	     {
	       "payFrequencyCode": "M",
	       "firstPayPeriodBeginDate": "2020-03-01",
	       "firstPayPeriodEndDate":"2020-03-31"
	     },
	     {
	       "payFrequencyCode": "B",
	       "firstPayPeriodBeginDate": "2020-03-13",
	       "firstPayPeriodEndDate":"2020-03-26"
	      }
	     ]
	    },
	    {
	      "divisionName": "secondDiv",
	      "divisionId": "2",		
	      "achBankName": "Chase",
	      "achAccountNumber":"0000000001",
	      "achRoutingNumber":"123456789",
	      "payrollDivision": [
	       {
	         "payFrequencyCode": "M",
	         "firstPayPeriodBeginDate": "2020-03-01",
	         "firstPayPeriodEndDate":"2020-03-31"
               }
             ]
           }
         ]
       }
     ]
  }'

Example response (200)

[
  {
    "jobQResponses": [
      {
        "jobId": "4907716",
        "requestId": "5144734",
        "taskGroupId": "409",
        "taskId": "1",
        "jobStatusCode": "successful",
        "queueDateTime": "2020-03-30T13:30:22",
        "jobStartDateTime": "2020-03-30T13:30:23",
        "jobEndDateTime": "2020-03-30T13:30:24",
        "groupName": "Import ER (Fund)",
        "taskName": "Import/Update employer or plan from web application via .xml schema",
        "transactionIds": []
      }
    ]
  },
  {
    "createPlanStatus": "PlanID: XXXXX Added."
  }
]

Transfers

 
Transfer Object
Field Description
requestType
char
Type of transfer request
B - in and out transfer
transferType
char
The transfer source type.
A - All Sources
fromTypeCode
char, optional
Dollar or percent to transfer out
D - Dollar
P - Percent
toAmountTypeCode
char
Dollar or percent to transfer in
D - Dollar
P - Percent
ssn
string
See Common Fields
allocationAmount
integer, optional
Flat dollar amount for transfer in only
 
 

Post Transfers

Post transfer requests for specific participants.

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
Transfer Record Object
Field Description
investmentProductId
string
Unique Id for the investment product/security
Size range: 1..9
investmentProductType
char
Type of investment product/security; fund or model
Allowed values: F, M
transferAmount
integer
The amount of the transfer
Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects.
Size range: 1

**Validation rules for Transfer Requests:

  1. All Transfers

    • If there are pending trades associated with the planid, this process will reject

    • If fromTypeCode = P and toAmountTypeCode = D, process will reject

    • All transfer amounts must be >= 1% or $1

    • If Percent transaction: no fractional amounts are allowed

    • Allowed transfers between 12:00 am and 2:00 pm

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/transfers \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '   { 
     "requestType":"B",
     "transferType":"A",
     "fromTypeCode": "D",
     "toAmountTypeCode": "D",
     "ssn":"012345678",
     "transferRecords": [{ 
         "investmentProductType": "F",
         "investmentProductId": "SCHG", 
         "transferAmount": "-1000.00"
        }, {
         "investmentProductType": "M",
         "investmentProductId": "1647", 
    	 "transferAmount": "500.00"
				}, {
         "investmentProductType": "F",
         "investmentProductId": "IJR", 
    	 "transferAmount": "500.00"
	}]
    }'

Example response (200)

{
  "jobQResponses": [
    {
      "jobId": "5933045",
      "requestId": "6184182",
      "taskGroupId": "3329",
      "taskId": "29",
      "jobStatusCode": "successful",
      "queueDateTime": "2021-09-08T22:19:58.000Z",
      "jobStartDateTime": "2021-09-08T22:20:00.000Z",
      "jobEndDateTime": "2021-09-08T22:20:01.000Z",
      "groupName": "AutoTransfers",
      "taskName": "Create transactions",
      "transactionIds": []
    },
    {
      "jobId": "5933045",
      "requestId": "6184182",
      "taskGroupId": "3329",
      "taskId": "17",
      "jobStatusCode": "successful",
      "queueDateTime": "2021-09-08T22:19:58.000Z",
      "jobStartDateTime": "2021-09-08T22:20:01.000Z",
      "jobEndDateTime": "2021-09-08T22:20:04.000Z",
      "groupName": "AutoTransfers",
      "taskName": "Post Transfers",
      "transactionIds": [
        1083
      ]
    }
  ]
}
 

Beneficiaries

Beneficiary Object
Field Description
ssn
string
See Common Fields
deleteExistingRecords
string, optional
This will specify which record to delete.
P - This will delete all existing records (primary and contingent)
C - Will delete only the contingent records
 
 

Post Beneficiaries

 

This endpoint can be used to update beneficiaries for a participant.

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
Beneficiaries Record Object
Field Description
ssn
string
Beneficiary's ssn
name
string
Beneficiary's name
Size range: 60
isSpouseCode
string
Relationship between participant and beneficiary
Y - Spouse
N - Non Spouse
T - Trust
C - Child
typeCode
string
Type of relationship
P - Primary
C - Contingent
dob
string
Beneficiary's date of birth
Size range: 10
Format: "YYYY-MM-DD"
percent
number
The percentage the beneficiary is due
Size range: 0..100
addressLine1
string, optional
Beneficiary's address line 1
Size range: 1..30
Validation*
addressLine2
string, optional
Beneficiary's address line 2
Size range: 1..30
city
string, optional
Beneficiary's city
Size range: 1..30
state
string, optional
Beneficiary's two-character state code
Size range: 2
zip
string, optional
Beneficiary's zip code
Size range: 5
Format: "NNNNN"
foreignStateAddress
string, optional
Beneficiary's foreign address
Size range: 1..30
country
string, optional
Beneficiary's country of residence
Size range: 1..30
Response
Field Description
beneficiaries
object[]
Array of Beneficiary Objects
Size range: 0..
Beneficiary Object
Field Description
planId
string
See Common Fields
participantSsn
string
Beneficiary's ssn
beneSsn
string
Beneficiary's ssn
name
string
Beneficiary's name
Size range: 60
isSpouseCode
string
Relationship between participant and beneficiary
Y - Spouse
N - Non Spouse
T - Trust
C - Child
typeCode
string
Type of relationship
P - Primary
C - Contingent
dob
string
Beneficiary's date of birth
Size range: 10
Format: "YYYY-MM-DD"
percent
number
The percentage the beneficiary is due
Size range: 0..100
addressLine1
string, optional
Beneficiary's address line 1
Size range: 1..30
addressLine2
string, optional
Beneficiary's address line 2
Size range: 1..30
city
string, optional
Beneficiary's city
Size range: 1..30
state
string, optional
Beneficiary's two-character state code
Size range: 2
zip
string, optional
Beneficiary's zip code
Size range: 5
Format: "NNNNN"
foreignStateAddress
string, optional
Beneficiary's foreign address
Size range: 1..30
country
string, optional
Beneficiary's country of residence
Size range: 1..30
beneNumber
string, optional
Number of beneficiaries

**Validation rules for Beneficiary Requests:

  1. If no new records are posted and records are deleted the API will return a 204.

  2. The ssn must belong to the specified plan

  3. The beneficiary ssn cannot be the same as the participant ssn

  4. The beneficiary ssn can only be listed once in either the primary or contingent set

  5. Each set of data (primary and contingent) must add to 100%

  6. In order to add a contingent, primary beneficiary must exist

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/beneficiaries \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '   {
      "ssn":"000000012",
      "beneficiaries": [
          {
              "name": "John Denver",
              "ssn": "000000001",
              "isSpouseCode": "Y",
              "typeCode": "P",
              "dob": "1960-01-01",
              "percent" : 10.79,
              "addressLine1" : "123 Main Street",
              "addressLine2" : "Apt #302",
              "city": "Roanoke",
              "state": "VA",
              "zip": "01234",
              "foreignStateAddress": "foreign address",
              "country": "United States of America"
          },
          {
              "name": "Cyndi Lauper",
              "ssn": "000000002",
              "isSpouseCode": "C",
              "typeCode": "C",
              "dob": "1980-01-01",
              "percent" : 89.21
          }
	],
	"deleteExistingRecords" : "P"
      }'

Example response (200)

[
  {
    "planId": "WXYZ",
    "participantSsn": "000000012",
    "beneSsn": "000000001",
    "name": "John Denver",
    "isSpouseCode": "Y",
    "typeCode": "P",
    "dob": "1960-01-01",
    "percent": 10.79,
    "addressLine1": "123 Main Street",
    "addressLine2": "Apt #302",
    "city": "Roanoke",
    "state": "VA",
    "zip": "01234",
    "foreignStateAddress": "Some foreign address",
    "country": "United States of America",
    "beneNumber": 1
  },
  {
    "planId": "WXYZ",
    "participantSsn": "000000012",
    "beneSsn": "000000002",
    "name": "Cyndi Lauper",
    "isSpouseCode": "C",
    "typeCode": "C",
    "dob": "1980-01-01",
    "percent": 89.21,
    "beneNumber": 2
  }
]
 

Get Beneficiaries

 

This is used to get a list of beneficiaries for the participant

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
Response
Field Description
beneficiaries
object[]
Array of Beneficiary Objects
Size range: 1..
Beneficiary Object
Field Description
planId
string
See Common Fields
participantSsn
string
Beneficiary's ssn
beneSsn
string
Beneficiary's ssn
name
string
Beneficiary's name
Size range: 60
typeCode
string
Type of relationship
P - Primary
C - Contingent
dob
string
Beneficiary's date of birth
Size range: 10
Format: "YYYY-MM-DD"
percent
number
The percentage the beneficiary is due
Size range: 0..100
addressLine1
string, optional
Beneficiary's address line 1
Size range: 1..30
Validation*
addressLine2
string, optional
Beneficiary's address line 2
Size range: 1..30
city
string, optional
Beneficiary's city
Size range: 1..30
state
string, optional
Beneficiary's two-character state code
Size range: 2
zip
string, optional
Beneficiary's zip code
Size range: 5
Format: "NNNNN"
foreignStateAddress
string, optional
Beneficiary's foreign address
Size range: 1..30
country
string, optional
Beneficiary's country of residence
Size range: 1..30

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/beneficiaries/012345678
  -X GET \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  

Example response (200)

[
  {
    "planId": "WXYZ",
    "participantSsn": "000000012",
    "beneSsn": "000000001",
    "name": "John Denver",
    "typeCode": "P",
    "dob": "1959-12-31",
    "percent": 50,
    "addressLine1": "123 Main Street",
    "addressLine2": "Apt #302",
    "city": "Roanoke",
    "state": "VA",
    "zip": "01234",
    "foreignStateAddress": "Some foreign address",
    "country": "United States of America"
  },
  {
    "planId": "WXYZ",
    "participantSsn": "000000012",
    "beneSsn": "000000002",
    "name": "Cyndi Lauper",
    "typeCode": "P",
    "dob": "1979-12-31",
    "percent": 50,
    "addressLine1": null,
    "addressLine2": null,
    "city": null,
    "state": null,
    "zip": null,
    "foreignStateAddress": null,
    "country": null
  },
  {
    "planId": "WXYZ",
    "participantSsn": "000000012",
    "beneSsn": "000000011",
    "name": "John Denver",
    "typeCode": "C",
    "dob": "1959-12-31",
    "percent": 5,
    "addressLine1": "123 Main Street",
    "addressLine2": "Apt #302",
    "city": "Roanoke",
    "state": "VA",
    "zip": "01234",
    "foreignStateAddress": "Some foreign address",
    "country": "United States of America"
  },
  {
    "planId": "WXYZ",
    "participantSsn": "000000012",
    "beneSsn": "000000013",
    "name": "Cyndi Lauper",
    "typeCode": "C",
    "dob": "1979-12-31",
    "percent": 95,
    "addressLine1": null,
    "addressLine2": null,
    "city": null,
    "state": null,
    "zip": null,
    "foreignStateAddress": null,
    "country": null
  }
]

Distributions

Distributions Object
Field Description
distributionName
string
Type of distribution request
separation of service
hardship all sources
in service over 59.5
in service rollover
nra
traditionalAllocationAmountType
string, optional
If this is passed in, the request is based on a Dollar amount for traditional funds. If not, it will be a percentage.
D - Dollar
rothAllocationAmountType
string, optional
If this is passed in, the request is based on a Dollar amount for roth funds. If not, it will be a percentage.
D - Dollar
ssn
string
See Common Fields
distributionAllocationAmount
int, optional
This is required for hardship and in service requests, otherwise it should not be passed in.
Must be a positive number
 
 

Post Termination

 

This endpoint is used to distribute funds based on a termination.

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
Payee Record Object
Field Description
firstName
string
First name of the recipient
Size range: 1..30
lastName
string
Last name of the recipient
Size range: 1..30
addressLine1
string, optional
Recipient's address line 1
Size range: 1..30
Validation***
addressLine2
string, optional
Recipient's address line 2
Size range: 1..30
Validation***
city
string, optional
Recipient's city
Size range: 1..30
Validation***
state
string, optional
Recipient's two-character state code
Size range: 2
Validation***
zip
string, optional
Recipient's zip code
Size range: 5
Format: "NNNNN"
Validation***
country
string, optional
Recipient's country of residence
Size range: 1..30
allocationAmount
int
Amount of funds allocated to recipient
sourceTypeCode
string
The account source type where the funds will be allocated.
R - Roth
N - Non Roth
manualFederalTax
float, optional
Amount of manual federal tax to withhold.
manualStateTax
float, optional
Amount of manual state tax to withhold.
federalWithholdMethodCode
string, optional
Federal withholding type
M - Mandatory
T - 10 Percent
P - 25 Percent
S - 35 Percent
N - NRA
R - Rollover
O - None
payment
obj[]
Array of payment objects
Size Range: 0..
Payment Object
Field Description
accountNumber
string, optional
Bank account number where the allocated amount will be sent.
Size range: 1..30
Validation***
abaNumber
string, optional
The bank account routing number for the divisional bank.
Size range: 9
Validation***
companyName
string, optional
For rollover check, this is the receiving 401k plan name. For ach or wire, this is the receiving bank name. No company name for regular check.
Size range: 1..50
Validation***
bankAccountName
string, optional
The name associated with the receiving bank account unless a rollover, then receiving company name.
Size range: 1..60
Validation***
email
string, optional
Recipient's email
Size range: 1..100
Validation: must include valid email address with '@' symbol
phone
string, optional
Recipient's phone
Size range: 12
Format: 123-456-7890
methodCode
string, optional
Type of payment method.
W - Wire to financial institution
A - ACH/direct deposit to financial institution
N - Paid to non-participant
subAccountNumber
string, optional
For rollovers, the account number at the receiving company.
Size range: 1..50
Validation***
rolloverCode
string
Specification of rollover
N - Not a rollover
D - Directed rollover
rolloverToTypeCode
string
Type of money funds are rolling into.
N - Non
Q - Qualified plan
R - Roth IRA
I - IRA
checkRefText
string, optional
Check reference information
Size Range: 38
Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects.
Size range: 1

**Validation rules for Termination Requests:

  • The ssn must belong to the specified plan

  • Sub Account must exist if it is a rollover

  • Participant must be inactive

  • For Rollovers, LT will handle the FBO information and Check Memo/reference Line, as long as information in the following section is provided

  • A lump sum request is always a percentage, if there’s a split payment of either dollar or percent, the amount to split by must be placed in the final payee object

***Allowed Scenarios & Required Fields:

  • Rollover Outgoing ACH or Rollover Outgoing Wire

    • companyName

    • abaNumber

    • accountNumber

    • subAccountNumber

    • bankAccountName

    • rolloverCode

    • rolloverToTypeCode

  • Rollover Outgoing Check

    • companyName

    • Mailing Address for Recipient

    • subAccountNumber

    • rolloverCode

    • rolloverToTypeCode

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/distributions/termination \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '   {
    "distributionName": "Separation of Service",
    "payee": [
        {
            "accountNumber": "123456789",
            "addressLine1": "123 Washington Ave",
            "allocationAmount": 100,
            "city": "Parker",
            "country": "USA",
            "firstName": "Bob",
            "lastName": "Smith",
            "manualFederalTax": 0,
            "manualStateTax": 5,
            "payment": {
                "abaNumber": "121000358",
                "companyName": "Bank of America",
                "email": "test2@lttrust.com",
                "methodCode": "A",
                "phone": "2157689816",
                "rolloverCode": "N",
                "rolloverToTypeCode": "N",
                "checkRefText": "test"
            },
            "sourceTypeCode": "N",
            "state": "CO",
            "zip": "80250"
        },
        {
            "addressLine1": "123 Washington Ave",
            "allocationAmount": 100,
            "city": "Parker2",
            "country": "USA",
            "firstName": "Bob",
            "lastName": "Smith",
            "manualFederalTax": 100,
            "manualStateTax": 50,
            "payment": {
                "email": "test@lttrust.com",
                "phone": "2157689816",
                "rolloverCode": "N",
                "rolloverToTypeCode": "N"
            },
            "sourceTypeCode": "R",
            "state": "CO",
            "zip": "80250"
        }
    ],
    "ssn": "XXXXXXXXX"
}'

Example response (200)

{
  "jobQResponses": [
    {
      "jobId": "5933045",
      "requestId": "6184182",
      "taskGroupId": "3329",
      "taskId": "29",
      "jobStatusCode": "successful",
      "queueDateTime": "2021-09-08T22:19:58.000Z",
      "jobStartDateTime": "2021-09-08T22:20:00.000Z",
      "jobEndDateTime": "2021-09-08T22:20:01.000Z",
      "groupName": "AutoTransfers",
      "taskName": "Create transactions",
      "transactionIds": []
    },
    {
      "jobId": "5933045",
      "requestId": "6184182",
      "taskGroupId": "3329",
      "taskId": "17",
      "jobStatusCode": "successful",
      "queueDateTime": "2021-09-08T22:19:58.000Z",
      "jobStartDateTime": "2021-09-08T22:20:01.000Z",
      "jobEndDateTime": "2021-09-08T22:20:04.000Z",
      "groupName": "Auto termination Transaction",
      "taskName": "Create Transactions",
      "transactionIds": [
        1083
      ]
    }
  ]
}
 

Get Loan

 

Get endpoint to receive loan details by ssn

ARGUMENTS
Field Description
planId
query str param
string
See Common Fields
ssn
query str param
string
See Common Fields
Response
Field Description
planId
string
See Common Fields
loanDetails
object[]
Array of Loan Detail Object
Size range: 0..
personLoanDetail
object[]
Array of Person Loan Detail Object
Size range: 0..
Loan Detail Object
Field Description
Minimum_Loan_Amount
integer
The minimum loan amount that can be requested.
Maximum_Loan_Amount
integer
The maximum loan amount that can be requested.
Minimum_Loan_Duration
integer
The minimum loan duration in months that can be requested.
Maximum_Loan_Duration
integer
The maximum loan duration in months that can be requested.
Maximum_Loan_Quantity
integer
The maximum number of loans that can be requested for this participant.
Personal_Loan_Available
string
Y - Participant can request a personal loan
N - Participant cannot request a personal loan
Resident_Loan_Available
string
Y - Resident can request a personal loan
N - Resident cannot request a personal loan
Personal_Loan_Interest_Rate
integer
Interest rate for personal loan
Residential_Loan_Interest_Rate
integer
Interest rate for resident loan
Person Loan Detail Object
Field Description
ssn
string
See Common Fields
name
string
name of participant
vestedBalanceCurrentPlan
float
the total vested balance for the plan
currentBalanceAllLoans
float
the current balance of all loans
eligibleAmount
float
The amount that is eligible for a loan with the participant

Example request

curl https://rc.ltretire.com/v1/loan?planId=WXYZ&ssn=123456789 \
  -X GET \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx'

Example response (200)

{
	"planId": "WXYZ",
	"loanDetails": {
		"Minimum_Loan_Amount": 1000,
		"Maximum_Loan_Amount": 50000,
		"Minimum_Loan_Duration": 12,
		"Maximum_Loan_Duration": 360,
		"Maximum_Loan_Quantity": 1,
		"Personal_Loan_Available": "Y",
		"Resident_Loan_Available": "N",
		"Personal_Loan_Interest_Rate": 5,
		"Residential_Loan_Interest_Rate": null
	},
	"personLoanDetails": {
		"ssn": "123456789",
		"name": "SMITH BOB  ",
		"vestedBalanceCurrentPlan": 18704.28,
		"vestedBalaceAllLoans": 9437.73,
		"eligibleAmount": 0
	}
}
 

Post Loan

 

This endpoint is used to create a loan request

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
Loan Object
Field Description
ssn
string
Bank account number where the allocated amount will be sent.
Size range: 1..30
residenceCode
string
Residence loan type
Y - residence loan
N - primary loan
amount
int
Loan amount request.
Validation: must be > 1
months
int
Number of months the loan payment is scheduled for
Validation: Must be between 12 and 60 inclusive
frequencyCode
string
Loan payment frequency
W - weekly
B - biweekly
S - semimonthly
Q - quarterly
M - monthly
payment
obj[]
Array of payment objects
Size Range: 0..
Payment Object
Field Description
abaNumber
string, optional
The bank account routing number for the recipient bank.
Size range: 9
companyName
string, optional
The company that holds the bank account.
Size range: 1..50
bankAccountName
string, optional
The name associated with the bank account.
Size range: 1..60
accountNumber
string, optional
The account number for the loan recipient.
Size range: 1..40
methodCode
string, optional
Type of payment method. If a check, do not pass in methodCode.
W - Wire to financial institution
A - ACH/direct deposit to financial institution
N - Paid to non-participant
addressLine1
string, optional
Recipient's address line 1
Size range: 1..30
addressLine2
string, optional
Recipient's address line 2
Size range: 1..30
city
string, optional
Recipient's city
Size range: 1..30
state
string, optional
Recipient's two-character state code
Size range: 2
zip
string, optional
Recipient's zip code
Size range: 5
Format: "NNNNN"
country
string, optional
Recipient's country of residence
Size range: 1..30
overnightCheck
string, optional
Recipient's preference of check to overnight
Validation: Y, N
Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects.
Size range: 2

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/distributions/loan \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '   {
    "amount": 1000,
    "frequencyCode": "B",
    "months": 13,
    "payment": {
        "addressLine1": "123 Washington Ave",
        "bankAccountName": "Bob Smith",
        "city": "Parker",
        "companyName": "Company Name",
        "country": "USA",
        "state": "TX",
        "zip": "76701",
	"overnightCheck": "Y"
    },
    "residenceCode": "N",
    "ssn": "012345678"
}'

Example response (200)

{
  "jobQResponses": [
    {
      "jobId": "5933045",
      "requestId": "6184182",
      "taskGroupId": "3329",
      "taskId": "29",
      "jobStatusCode": "successful",
      "queueDateTime": "2021-09-08T22:19:58.000Z",
      "jobStartDateTime": "2021-09-08T22:20:00.000Z",
      "jobEndDateTime": "2021-09-08T22:20:01.000Z",
      "groupName": "AutoTransfers",
      "taskName": "Create transactions",
      "transactionIds": []
    },
    {
      "jobId": "5933045",
      "requestId": "6184182",
      "taskGroupId": "3329",
      "taskId": "17",
      "jobStatusCode": "successful",
      "queueDateTime": "2021-09-08T22:19:58.000Z",
      "jobStartDateTime": "2021-09-08T22:20:01.000Z",
      "jobEndDateTime": "2021-09-08T22:20:04.000Z",
      "groupName": "Auto Loan Transactio",
      "taskName": "Post New Loan Distributions",
      "transactionIds": [
        1083
      ]
    }
  ]
}
 

Post Hardship

 

This endpoint is used to post hardship requests

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
DISTRIBUTION OBJECT
Field Description
distributionObject
object[]
See Distribution Object
Payee Record Object
Field Description
firstName
string
First name of the recipient
Size range: 1..30
lastName
string
Last name of the recipient
Size range: 1..30
addressLine1
string, optional
Recipient's address line 1
Size range: 1..30
Validation***
addressLine2
string, optional
Recipient's address line 2
Size range: 1..30
Validation***
city
string, optional
Recipient's city
Size range: 1..30
Validation***
state
string, optional
Recipient's two-character state code
Size range: 2
Validation***
zip
string, optional
Recipient's zip code
Size range: 5
Format: "NNNNN"
Validation***
country
string, optional
Recipient's country of residence
Size range: 1..30
sourceTypeCode
string
The account source type where the funds will be allocated.
R - Roth
N - Non Roth
manualFederalTax
float, optional
Amount of manual federal tax to withhold.
manualStateTax
float, optional
Amount of manual state tax to withhold.
payment
obj[]
Array of payment objects
Size Range: 0..
Payment Object
Field Description
accountNumber
string, optional
Bank account number where the allocated amount will be sent.
Size range: 1..30
abaNumber
string, optional
The bank account routing number for the divisional bank.
Size range: 9
contactName
string, optional
For ach or wire, this is the receiving bank name. No company name for regular check.
Size range: 1..50
email
string, optional
Recipient's email
Size range: 1..100
Validation: must include valid email address with '@' symbol
phone
string, optional
Recipient's phone
Size range: 12
Format: 123-456-7890
methodCode
string, optional
Type of payment method
W - Wire to financial institution
A - ACH/direct deposit to financial institution
N - Paid to non-participant
overnightCheck
string, optional
Recipient's preference of check to overnight
Validation: Y, N
Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects.
Size range: 2

**Validation

  • federalWithholdMethodCode is default to T. This cannot be changed with hardship requests.

  • When a hardship is requested, it is always a lump sum percentage based on the fund type.

  • If there are pending sell trades, a hardship request cannot be submitted.

  • The requested hardship amount must be less than or equal to the total balance.

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/distributions/hardship \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '   {
    "distributionName": "hardship all sources",
    "ssn": "123456789",
    "distributionAllocationAmount": 15000,
    "payee": [
        {
            "addressLine1": "4142 Hibiscus Dr.",
	    "addressLine2": "Unit 200",
            "firstName": "Bob",
            "lastName": "Adams",
	    "city": "Little River",
            "state": "SC",
            "zip": "29566",
	    "sourceTypeCode": "N",
	    "manualFederalTax": 5,
	    "manualStateTax": 10,
            "payment": {
	       	"accountNumber": "12345678",
                "abaNumber": "021000021",
                "contactName": "Chase Bank",
                "methodCode": "A",
                "phone": "9723521352",
		"email": "test@gmail.com"
            }
        },
        {
            "addressLine1": "4142 Hibiscus Dr.",
	    "addressLine2": "Unit 200",
            "firstName": "Bob",
            "lastName": "Adams",
	    "city": "Little River",
            "state": "SC",
            "zip": "29566",
      	    "sourceTypeCode": "R",
            "payment": {
	        "accountNumber": "12345678",
                "abaNumber": "021000021",
                "contactName": "Chase",
                "methodCode": "W",
                "phone": "9723521352",
		"email": "test@gmail.com"
            }
        }
    ]
}'

Example response (200)

{
    "jobQResponses": [
	    {
	        "jobId": "6202991",
	        "requestId": "6454775",
		"taskGroupId": "3417",
		"taskId": "29",
		"jobStatusCode": "successful",
		"queueDateTime": "2021-12-21T20:28:30.000Z",
		"jobStartDateTime": "2021-12-21T20:28:31.000Z",
		"jobEndDateTime": "2021-12-21T20:28:31.000Z",
		"groupName": "Auto Hardship Transaction",
		"taskName": "Create transactions",
		"transactionIds": []
	    },
	    {
		"jobId": "6202991",
		"requestId": "6454775",
		"taskGroupId": "3417",
		"taskId": "15",
		"jobStatusCode": "successful",
		"queueDateTime": "2021-12-21T20:28:30.000Z",
		"jobStartDateTime": "2021-12-21T20:28:31.000Z",
		"jobEndDateTime": "2021-12-21T20:28:37.000Z",
		"groupName": "Auto Hardship Transaction",
		"taskName": "Post Withdrawals - In-service, Hardships",
		"transactionIds": [
			773
	        ]
	   }
      ]
 }
 

Post In Service

 

This endpoint is used for In Service requests. For the distributionName use the following:

  • in service over 59.5

  • in service rollover

  • nra

ARGUMENTS
Field Description
planId
url param
string
See Common Fields
DISTRIBUTION OBJECT
Field Description
distributionObject
object[]
See Distribution Object
Payee Record Object
Field Description
firstName
string
First name of the recipient
Size range: 1..30
lastName
string
Last name of the recipient
Size range: 1..30
addressLine1
string, optional
Recipient's address line 1
Size range: 1..30
Validation***
addressLine2
string, optional
Recipient's address line 2
Size range: 1..30
Validation***
city
string, optional
Recipient's city
Size range: 1..30
Validation***
state
string, optional
Recipient's two-character state code
Size range: 2
Validation***
zip
string, optional
Recipient's zip code
Size range: 5
Format: "NNNNN"
Validation***
country
string, optional
Recipient's country of residence
Size range: 1..30
sourceTypeCode
string
The account source type where the funds will be allocated.
R - Roth
N - Non Roth
manualFederalTax
float, optional
Amount of manual federal tax to withhold.
manualStateTax
float, optional
Amount of manual state tax to withhold.
payment
obj[]
Array of payment objects
Size Range: 0..
Payment Object
Field Description
accountNumber
string, optional
Bank account number where the allocated amount will be sent.
Size range: 1..30
abaNumber
string, optional
The bank account routing number for the divisional bank.
Size range: 9
contactName
string, optional
For ach or wire, this is the receiving bank name. No company name for regular check.
Size range: 1..50
email
string, optional
Recipient's email
Size range: 1..100
Validation: must include valid email address with '@' symbol
phone
string, optional
Recipient's phone
Size range: 12
Format: 123-456-7890
methodCode
string, optional
Type of payment method
W - Wire to financial institution
A - ACH/direct deposit to financial institution
N - Paid to non-participant
overnightCheck
string, optional
Recipient's preference of check to overnight
Validation: Y, N
subAccountNumber
string, optional
For rollovers, the account number at the receiving company.
Size range: 1..50
Validation***
rolloverCode
string
Specification of rollover
N - Not a rollover
D - Directed rollover
rolloverToTypeCode
string
Type of money funds are rolling into.
N - Non
Q - Qualified plan
R - Roth IRA
I - IRA
Response
Field Description
jobQResponses
object[]
Array of JobQResponse Objects.
Size range: 2

**Validation

  • In Service 59.5

    • participant must be over the age of 59.5

  • In Service Rollover

    • the requested amount must be less than or equal to the total balance of rollover funds

  • In Service Normal Retirement Age (NRA)

    • participant must be over the normal retirement age of the plan

  • ALL

    • If there are pending sell trades, the request will fail until these are settled.

    • The requested amount must be less than or equal to the total vested balance.

Example request

curl https://rc.ltretire.com/v1/plans/PLAN101/distributions/inservice \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer xxx.xxx.xxx' \
  -d '{
    "distributionName": "in service over 59.5",
    "ssn": "123456789",
    "distributionAllocationAmount": 15000,
    "payee": [
        {
            "addressLine1": "4142 Hibiscus Dr.",
            "firstName": "Bob",
            "lastName": "Smith",
	    "city": "Little River",
            "state": "SC",
            "zip": "29566",
	    "sourceTypeCode": "N",
	    "manualFederalTax": 5,
	    "manualStateTax": 10,
            "payment": {
		"accountNumber": "12345678",
                "abaNumber": "021000021",
                "contactName": "Chase Bank",
                "methodCode": "A",
                "phone": "9723421352",
		"email": "bobsmith@gmail.com",
                "rolloverCode": "N",
                "rolloverToTypeCode": "N"
            }
        },
        {
            "addressLine1": "4142 Hibiscus Dr.",
            "firstName": "Bob",
            "lastName": "Smith",
	    "city": "Little River",
            "state": "SC",
            "zip": "29566",
	    "sourceTypeCode": "R",
            "payment": {
		"accountNumber": "12345678",
                "abaNumber": "021000021",
                "contactName": "Chase",
                "methodCode": "W",
                "phone": "9723421352",
		"email": "bobsmith@gmail.com",
                "rolloverCode": "D",
                "rolloverToTypeCode": "I"
            }
        }
    ]
}'

Example response (200)

{
    "jobQResponses": [
		{
		"jobId": "6204081",
		"requestId": "6455851",
		"taskGroupId": "3421",
		"taskId": "29",
		"jobStatusCode": "successful",
		"queueDateTime": "2022-01-25T15:13:06.000Z",
		"jobStartDateTime": "2022-01-25T15:13:08.000Z",
		"jobEndDateTime": "2022-01-25T15:13:08.000Z",
		"groupName": "Auto InService Transaction",
		"taskName": "Create transactions",
		"transactionIds": []
		},
		{
		"jobId": "6204081",
		"requestId": "6455851",
		"taskGroupId": "3421",
		"taskId": "15",
		"jobStatusCode": "successful",
		"queueDateTime": "2022-01-25T15:13:06.000Z",
		"jobStartDateTime": "2022-01-25T15:13:08.000Z",
		"jobEndDateTime": "2022-01-25T15:13:22.000Z",
		"taskName": "Post Withdrawals - In-service, Hardships",
		"groupName": "Auto InService Transaction",
		"transactionIds": [
				811
			]
		}
	]
}