TIAA Secure Income Account API

The TIAA Secure Income Account (SIA) API enables recordkeepers and plan administrators to integrate TIAA's guaranteed lifetime income product into custom target-date model portfolios and managed account solutions. Built using the OpenAPI Specification (OAS) and authenticated via OAuth 2.0 Client Credentials Flow, the SIA API supports account setup, contribution management, and participant income projections for defined contribution plan participants.

OpenAPI Specification

tiaa-sia-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: TIAA Secure Income Account API
  description: >-
    The TIAA Secure Income Account (SIA) API enables recordkeepers and plan
    administrators to integrate TIAA's guaranteed lifetime income product into
    custom target-date model portfolios and managed account solutions. The SIA
    API supports participant account setup, contribution management, allocation
    updates, and income projection calculations for defined contribution plans.
    Authentication uses OAuth 2.0 Client Credentials Flow.
  version: '1.0'
  contact:
    name: TIAA Developer Support
    url: https://developer.tiaa.org/public/sia
servers:
  - url: https://api.tiaa.org/sia/v1
    description: TIAA SIA Production API
tags:
  - name: Participants
    description: Participant account management
  - name: Contributions
    description: Contribution and allocation management
  - name: Projections
    description: Income projections and illustrations
  - name: Plans
    description: Plan configuration and eligibility
paths:
  /plans/{planId}/participants:
    get:
      operationId: listParticipants
      summary: List Plan Participants
      description: Returns participants enrolled in the SIA product for a given plan.
      tags:
        - Participants
      security:
        - ClientCredentials: []
      parameters:
        - name: planId
          in: path
          required: true
          schema:
            type: string
          description: Unique plan identifier
        - name: page
          in: query
          schema:
            type: integer
        - name: pageSize
          in: query
          schema:
            type: integer
      responses:
        '200':
          description: List of participants
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParticipantList'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden

    post:
      operationId: enrollParticipant
      summary: Enroll Participant in SIA
      description: Enrolls a new participant in the Secure Income Account product for the plan.
      tags:
        - Participants
      security:
        - ClientCredentials: []
      parameters:
        - name: planId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParticipantEnrollment'
      responses:
        '201':
          description: Participant enrolled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participant'
        '400':
          description: Invalid request

  /plans/{planId}/participants/{participantId}:
    get:
      operationId: getParticipant
      summary: Get Participant Details
      description: Returns SIA account details for a specific participant.
      tags:
        - Participants
      security:
        - ClientCredentials: []
      parameters:
        - name: planId
          in: path
          required: true
          schema:
            type: string
        - name: participantId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Participant details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participant'
        '404':
          description: Participant not found

  /plans/{planId}/contributions:
    post:
      operationId: submitContribution
      summary: Submit Contribution
      description: Submits a contribution or allocation to a participant's SIA account.
      tags:
        - Contributions
      security:
        - ClientCredentials: []
      parameters:
        - name: planId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Contribution'
      responses:
        '200':
          description: Contribution submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContributionResult'
        '400':
          description: Invalid contribution data

  /plans/{planId}/participants/{participantId}/projections:
    get:
      operationId: getIncomeProjection
      summary: Get Income Projection
      description: Returns projected lifetime income amounts for a participant based on current balance and future contributions.
      tags:
        - Projections
      security:
        - ClientCredentials: []
      parameters:
        - name: planId
          in: path
          required: true
          schema:
            type: string
        - name: participantId
          in: path
          required: true
          schema:
            type: string
        - name: retirementAge
          in: query
          schema:
            type: integer
          description: Target retirement age for projection
        - name: projectionDate
          in: query
          schema:
            type: string
            format: date
      responses:
        '200':
          description: Income projection data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IncomeProjection'

  /plans/{planId}:
    get:
      operationId: getPlan
      summary: Get Plan Details
      description: Returns SIA configuration and eligibility rules for a specific plan.
      tags:
        - Plans
      security:
        - ClientCredentials: []
      parameters:
        - name: planId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Plan details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Plan'

components:
  securitySchemes:
    ClientCredentials:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://auth.tiaa.org/oauth2/token
          scopes:
            sia:read: Read SIA data
            sia:write: Write SIA data

  schemas:
    ParticipantList:
      type: object
      properties:
        participants:
          type: array
          items:
            $ref: '#/components/schemas/Participant'
        totalElements:
          type: integer
        page:
          type: integer
        pageSize:
          type: integer

    Participant:
      type: object
      properties:
        participantId:
          type: string
        planId:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        dateOfBirth:
          type: string
          format: date
        enrollmentDate:
          type: string
          format: date
        accountBalance:
          type: number
          format: double
        vestingPercentage:
          type: number
          format: double
        status:
          type: string
          enum:
            - ACTIVE
            - TERMINATED
            - RETIRED
            - DECEASED

    ParticipantEnrollment:
      type: object
      required:
        - firstName
        - lastName
        - dateOfBirth
        - ssn
      properties:
        firstName:
          type: string
        lastName:
          type: string
        dateOfBirth:
          type: string
          format: date
        ssn:
          type: string
          description: Social Security Number (encrypted)
        email:
          type: string
          format: email
        allocationPercentage:
          type: number
          format: double
          description: Initial SIA allocation percentage

    Contribution:
      type: object
      required:
        - participantId
        - amount
        - contributionType
      properties:
        participantId:
          type: string
        amount:
          type: number
          format: double
        contributionType:
          type: string
          enum:
            - EMPLOYEE
            - EMPLOYER
            - ROLLOVER
        payrollDate:
          type: string
          format: date
        allocationPercentage:
          type: number
          format: double

    ContributionResult:
      type: object
      properties:
        confirmationId:
          type: string
        participantId:
          type: string
        amount:
          type: number
          format: double
        processedDate:
          type: string
          format: date-time
        status:
          type: string
          enum:
            - ACCEPTED
            - PENDING
            - REJECTED

    IncomeProjection:
      type: object
      properties:
        participantId:
          type: string
        currentBalance:
          type: number
          format: double
        projectedRetirementAge:
          type: integer
        monthlyIncomeProjection:
          type: number
          format: double
          description: Estimated monthly lifetime income at retirement
        annualIncomeProjection:
          type: number
          format: double
        projectionDate:
          type: string
          format: date
        assumptions:
          type: object
          properties:
            discountRate:
              type: number
              format: double
            mortalityTable:
              type: string
            inflationRate:
              type: number
              format: double

    Plan:
      type: object
      properties:
        planId:
          type: string
        planName:
          type: string
        planType:
          type: string
          enum:
            - 401k
            - 403b
            - 457b
            - QDRO
        siaEnabled:
          type: boolean
        eligibilityRules:
          type: object
          properties:
            minimumAge:
              type: integer
            minimumServiceMonths:
              type: integer
            employeeClassesEligible:
              type: array
              items:
                type: string
        maxAllocationPercentage:
          type: number
          format: double
        minAllocationPercentage:
          type: number
          format: double