---
title: "Refinance federal loans privately, or stay federal? (forgiveness-aware)"
method: POST
path: "/v1/education/student-loan-refi"
tags: ["Education"]
---

# Refinance federal loans privately, or stay federal? (forgiveness-aware)

`POST /v1/education/student-loan-refi`

## Request

- Base URL: `https://api.numeratica.com`
- URL: `https://api.numeratica.com/v1/education/student-loan-refi`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Should you refinance federal student loans with a private lender? A private refi usually offers a lower fixed rate but permanently forfeits federal protections — income-driven repayment, forgiveness, and PSLF. This runs the borrower's best federal option (reusing the student-loan comparison) and weighs its present value of payments against a private refi's, so the rate saving and the forgiveness given up sit on the same scale. It also reports the refi rate that would merely tie the plain standard federal plan (the pure-rate breakeven), and which federal balance would be forfeited. Deterministic; not lending, tax, or financial advice.

## Request body

- StudentLoanRefiRequest
  - `federal` StudentLoanRequest, required
    - `loan_balance` number, required: Current federal loan balance.
    - `interest_rate` number, required: Annual interest rate (e.g. 0.065).
    - `agi` number, required: Borrower's adjusted gross income.
    - `family_size` integer, required: Household size (IBR discretionary income).
    - `dependents` integer: Number of dependents (RAP −$50/mo each).
    - `state` string: "AK"/"HI" or empty for the 48 contiguous (poverty-guideline region).
    - `guideline_year` integer: Poverty-guideline year (default 2026).
    - `loan_before_2014` boolean: Pre-2014 loans use 15% / 25-year IBR; 2014+ use 10% / 20-year.
    - `standard_term_months` integer: Standard-plan term (default 120).
    - `pursuing_pslf` boolean: Add the 120-payment PSLF outcome.
  - `refi_rate` number, required: Annual fixed rate offered by the private lender.
  - `refi_term_months` integer: Private loan term; omit for 120.
  - `discount_rate` number: Annual, for present-value scoring; omit for 0.05, or set 0 to compare nominal totals (no discounting).

## Response `200`

The refi-vs-federal comparison

- StudentLoanRefiResponse
  - `result_id` string
  - `engine_version` string
  - `inputs` StudentLoanRefiRequest
    - `federal` StudentLoanRequest, required
      - `loan_balance` number, required: Current federal loan balance.
      - `interest_rate` number, required: Annual interest rate (e.g. 0.065).
      - `agi` number, required: Borrower's adjusted gross income.
      - `family_size` integer, required: Household size (IBR discretionary income).
      - `dependents` integer: Number of dependents (RAP −$50/mo each).
      - `state` string: "AK"/"HI" or empty for the 48 contiguous (poverty-guideline region).
      - `guideline_year` integer: Poverty-guideline year (default 2026).
      - `loan_before_2014` boolean: Pre-2014 loans use 15% / 25-year IBR; 2014+ use 10% / 20-year.
      - `standard_term_months` integer: Standard-plan term (default 120).
      - `pursuing_pslf` boolean: Add the 120-payment PSLF outcome.
    - `refi_rate` number, required: Annual fixed rate offered by the private lender.
    - `refi_term_months` integer: Private loan term; omit for 120.
    - `discount_rate` number: Annual, for present-value scoring; omit for 0.05, or set 0 to compare nominal totals (no discounting).
  - `result` object
    - `refi` object
      - `monthly_payment` number
      - `total_paid` number
      - `total_interest` number
      - `months` integer
      - `present_value` number: PV of the payment stream at the discount rate.
    - `best_federal` FederalOption: One federal repayment candidate, scored by present value of payments.
      - `plan` 'standard' | 'rap' | 'ibr' | 'rap_pslf' | 'ibr_pslf'
      - `total_paid` number
      - `forgiven_balance` number
      - `present_value` number
    - `federal_options` FederalOption[]: Every federal candidate considered, scored on the same present-value basis.
      - `plan` 'standard' | 'rap' | 'ibr' | 'rap_pslf' | 'ibr_pslf'
      - `total_paid` number
      - `forgiven_balance` number
      - `present_value` number
    - `forgiveness_forfeited` number: Federal balance the best option forgives (lost by refinancing).
    - `recommendation` 'refinance' | 'stay_federal'
    - `present_value_savings` number: best-federal PV − refi PV (positive ⇒ refinancing is cheaper).
    - `breakeven_refi_rate` number: Refi rate whose PV ties the standard federal plan (pure-rate signal).
  - `disclaimer` string

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key.
- `405`: Method not allowed
- `429`: The key's per-minute request budget is exceeded. Retry after the delay in the Retry-After header.
- `503`: A dependency (e.g. the key store) is temporarily unavailable, or the request exceeded its compute deadline. Retryable.

---

[API](https://skmtc.dev/numeratica/apis/numeratica-financial-planning-calculations-api.md) · [All operations](https://skmtc.dev/numeratica/apis/numeratica-financial-planning-calculations-api/llms.txt) · [OpenAPI document](https://skmtc.dev/numeratica/apis/numeratica-financial-planning-calculations-api/revisions/075bcfbd1ebf?raw)
