> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.fortresstech.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.fortresstech.io/_mcp/server.

# List Incomes

GET https://api.fortresstech.io/v1/incomes

List income lines reported on applicants' affordable income checklists. Filter by
customerId, applicationId or certificationId to read one person's or one certification's incomes.


Reference: https://developer.fortresstech.io/api-reference/incomes/list-incomes

## Authentication

- `x-api-key` header (required) — API Key authentication via header

## Response

### 200

A paged array of incomes

- `list of Income`

## Types

### Income

One income line an applicant reported on the affordable income checklist of an application or certification. Employment is reported as pay components, not as jobs: base pay and overtime from the same job are two JOB lines told apart by payComponent, so the number of JOB lines is not the number of jobs. Lines are re-reported per certification, so filter by certificationId (or applicationId) to read one set.

- `customerId` (string, required)
- `type` (enum, optional) — The kind of income. RECENTLY_ENDED_JOB is the applicant's previous job; it carries no amount, and is returned only when the job has an employer, address, phone, supervisor, title or date. Employment rows the applicant marked as self-employment or military pay are SELF_EMPLOYMENT and MILITARY_PAY. COURT_ORDERED_CHILD_SUPPORT is the amount a court ordered, which may differ from the CHILD_SUPPORT actually received.
  - Allowed values: `JOB`, `UNEMPLOYMENT`, `ONLINE`, `CHILD_SUPPORT`, `PENSION`, `FUTURE_JOB`, `SOCIAL_SECURITY`, `GIFTS`, `RECENTLY_ENDED_JOB`, `ALIMONY`, `TRUST`, `PUBLIC_ASSISTANCE`, `VOUCHER`, `OTHER`, `SELF_EMPLOYMENT`, `MILITARY_PAY`, `SUPPLEMENTAL_SECURITY`, `VA_BENEFITS`, `DISABILITY`, `RETIREMENT`, `ABSENT_FAMILY_MEMBER`, `COURT_ORDERED_CHILD_SUPPORT`, `UNEARNED_INCOME_MINOR`
- `payComponent` (enum, optional) — Which part of employment pay a JOB line is: base pay, overtime, tips, bonuses or an anticipated pay increase. Empty when the checklist did not record it (legacy employment totals, rows with no pay type, and Ohio forms, which record an employment type such as Agriculture instead; Fortress treats those as base pay).
  - Allowed values: `BASE_PAY`, `OVERTIME`, `TIPS`, `BONUSES`, `ANTICIPATED_PAY_INCREASE`
- `startDate` (date, optional) — Job start date, from the job the applicant reported. Set only on lines that carry a job (see employerName for which lines do), even when that job has no employer name.
- `endDate` (date, optional) — Job end date, when the applicant reported one. In practice set on RECENTLY_ENDED_JOB lines only; empty for non-job income.
- `annualAmount` (double, optional) — Annual gross amount of this line in USD, as entered on the income checklist.
- `payRate` (double, optional) — Amount paid per pay period (per hour when payFrequency is HOURLY), in USD.
- `payFrequency` (enum, optional) — How often payRate is paid.
  - Allowed values: `HOURLY`, `WEEKLY`, `BI_WEEKLY`, `SEMI_MONTHLY`, `MONTHLY`, `ANNUALLY`
- `hoursPerWeek` (double, optional) — Hours worked per week. Only set when payFrequency is HOURLY.
- `employerName` (string, optional) — Employer of a JOB or RECENTLY_ENDED_JOB line. The checklist does not store an employer per line, so the applicant's current job is attached only where the match is unambiguous: the one base-pay JOB line when the checklist has exactly one (payComponent BASE_PAY, or an Ohio employment-type line, which Fortress treats as base pay), or a legacy employment total. Overtime, tips, bonuses and anticipated-increase lines, lines with no pay type, every JOB line of a checklist with several base-pay lines, and every JOB line of a list longer than the cap have no employer details. RECENTLY_ENDED_JOB carries the applicant's previous job. The job is the one on file as of the last completed certification, not necessarily this line's certification.
- `employerAddress` (string, optional) — Employer street, city, state and ZIP code as one line (e.g. "1 Main St, Austin, TX 78701").
- `employerPhone` (string, optional) — Employer phone number, as entered.
- `supervisorName` (string, optional) — Name of the supervisor at the employer.
- `jobTitle` (string, optional) — Position held at the employer.
- `militaryBranch` (string, optional) — Branch of service for MILITARY_PAY. Not populated yet: Fortress keeps it only in the raw portal answers.
- `payer` (string, optional) — Who pays this income (e.g. the alimony payer). Not populated yet: Fortress keeps it only in the raw portal answers.
- `source` (string, optional) — Name the applicant gave an OTHER income line (e.g. "Alimony", "Annuity").
- `lineNumber` (integer, optional) — Position of the line in the checklist list it came from (employment or other income), starting at 1; 1 for single-value lines.
- `listTruncated` (boolean, optional, nullable) — True when the list on the application holds more items than the API returns. The API returns the first 10 employment lines and the first 12 other-income lines of a checklist. Set on every line read from a list: `true` when the list holds more, `false` when it ends within the cap. Empty on lines not read from a list (single-value lines and RECENTLY_ENDED_JOB).
- `id` (string, optional)
- `readableId` (string, optional)
- `idempotencyId` (string, optional)
- `createdAt` (datetime, optional)
- `updatedAt` (datetime, optional)
- `deletedAt` (datetime, optional)
- `applicantId` (string, optional) — The applicant record (one per person per application) this line belongs to.
- `applicationId` (string, optional)
- `certificationId` (string, optional) — The certification this line was reported on. Empty for lines reported on an application before it had a certification; read those by applicationId.
- `householdId` (string, optional)
- `propertyId` (string, optional)
- `organizationId` (string, optional)
- `customer` (customers_components-schemas-Base, optional)

### customers_components-schemas-Base

- `firstName` (string, optional)
- `middleName` (string, optional)
- `lastName` (string, optional)
- `preferredName` (string, optional)
- `suffix` (string, optional)
- `birthDate` (date, optional)
- `status` (enum, optional)
  - Allowed values: `APPLICANT`, `RESIDENT`, `PRIOR`
- `email` (string, optional)
- `phone` (string, optional)
- `gender` (string, optional)
- `headOfHousehold` (boolean, optional) — Indicates whether the customer is the head of household
- `relationship` (enum, optional) — Relationship of the customer to the head of household (null for head of household)
  - Allowed values: `PARTNER`, `PARENT`, `ADULT_CHILD`, `ROOMMATE`, `CHILD`, `GUARANTOR`, `OTHER`
- `passportNumberLastFour` (string, optional, nullable) — Last 4 characters of the passport number, spaces and dashes removed. null when no passport number is on file or it has 4 characters or fewer. The full number is never returned.
- `passportCountry` (string, optional, nullable) — Name of the country that issued the passport (for example "United States"). null when no passport country is on file.
- `alienRegistrationNumberLastFour` (string, optional, nullable) — Last 4 characters of the alien registration number (A-Number), spaces and dashes removed. null when no number is on file or it has 4 characters or fewer. The full number is never returned.
- `citizenshipStatus` (string, optional, nullable) — HUD member citizenship code from the affordable certification: EC (citizen or national), EN (non-citizen with eligible immigration status), IC (ineligible non-citizen child of head or spouse), IN (ineligible non-citizen), IP (ineligible parent of head or spouse), ND (no documentation submitted), PV (eligibility pending verification), XX (not a family member, for example a foster). Only records on certifications that are not deleted count; when the applicant has more than one, the most recently updated one is used. null when none is recorded.
- `maritalStatus` (string, optional, nullable) — Marital status from the rental application as stored, for example single, married, divorced, separated or widowed. null when not answered.
- `spouseName` (string, optional, nullable) — Spouse full name from the rental application (first, middle and last name). null when no spouse is recorded.
- `studentType` (string, optional, nullable) — Student type code from the rental application: f_tK_12 (full-time, kindergarten to grade 12), f_tPost12 (full-time, after grade 12) or p_t (part-time); a few older applications hold free text such as Full-time or Part-Time. Returned as stored, even when the application does not mark the customer as a student. null when the answer is not a student (n_s, Not a student or No es estudiante) or the question was not answered.
- `currentAddressStreet` (string, optional, nullable) — First street line of the current address the customer gave on the rental application. null when no current address is on file or the line is blank.
- `currentAddressStreet2` (string, optional, nullable) — Second street line (apartment, suite, unit) of the current address from the rental application. null when blank or no current address is on file.
- `currentAddressCity` (string, optional, nullable) — City of the current address from the rental application. null when blank or no current address is on file.
- `currentAddressState` (string, optional, nullable) — Two-letter state or territory code of the current address from the rental application (for example "NY"). null when no state is on file or the stored value is not a known state or territory code.
- `currentAddressZipCode` (string, optional, nullable) — ZIP code of the current address from the rental application, as entered. null when blank or no current address is on file.
- `lenderName` (string, optional, nullable) — Name of the landlord or mortgage lender for the current address, as entered on the rental application. null when blank or no current address is on file.
- `id` (string, optional)
- `readableId` (string, optional)
- `idempotencyId` (string, optional)
- `createdAt` (datetime, optional)
- `updatedAt` (datetime, optional)
- `deletedAt` (datetime, optional)
- `householdId` (string, optional)
- `propertyId` (string, optional)
- `organizationId` (string, optional)

## Examples

**Response**

```json
[
  {
    "customerId": "string",
    "type": "JOB",
    "payComponent": "BASE_PAY",
    "startDate": "2023-01-15",
    "endDate": "2023-01-15",
    "annualAmount": 1.1,
    "payRate": 1.1,
    "payFrequency": "HOURLY",
    "hoursPerWeek": 1.1,
    "employerName": "string",
    "employerAddress": "string",
    "employerPhone": "string",
    "supervisorName": "string",
    "jobTitle": "string",
    "militaryBranch": "string",
    "payer": "string",
    "source": "string",
    "lineNumber": 1,
    "listTruncated": true,
    "id": "string",
    "readableId": "string",
    "idempotencyId": "string",
    "createdAt": "2024-01-15T09:30:00Z",
    "updatedAt": "2024-01-15T09:30:00Z",
    "deletedAt": "2024-01-15T09:30:00Z",
    "applicantId": "string",
    "applicationId": "string",
    "certificationId": "string",
    "householdId": "string",
    "propertyId": "string",
    "organizationId": "string",
    "customer": {
      "firstName": "string",
      "middleName": "string",
      "lastName": "string",
      "preferredName": "string",
      "suffix": "string",
      "birthDate": "2023-01-15",
      "status": "APPLICANT",
      "email": "string",
      "phone": "string",
      "gender": "string",
      "headOfHousehold": true,
      "relationship": "PARTNER",
      "passportNumberLastFour": "string",
      "passportCountry": "string",
      "alienRegistrationNumberLastFour": "string",
      "citizenshipStatus": "string",
      "maritalStatus": "string",
      "spouseName": "string",
      "studentType": "string",
      "currentAddressStreet": "string",
      "currentAddressStreet2": "string",
      "currentAddressCity": "string",
      "currentAddressState": "string",
      "currentAddressZipCode": "string",
      "lenderName": "string",
      "id": "string",
      "readableId": "string",
      "idempotencyId": "string",
      "createdAt": "2024-01-15T09:30:00Z",
      "updatedAt": "2024-01-15T09:30:00Z",
      "deletedAt": "2024-01-15T09:30:00Z",
      "householdId": "string",
      "propertyId": "string",
      "organizationId": "string"
    }
  }
]
```

**SDK Code**

```python
import requests

url = "https://api.fortresstech.io/v1/incomes"

headers = {"x-api-key": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.fortresstech.io/v1/incomes';
const options = {method: 'GET', headers: {'x-api-key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.fortresstech.io/v1/incomes"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.fortresstech.io/v1/incomes")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.fortresstech.io/v1/incomes")
  .header("x-api-key", "<apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.fortresstech.io/v1/incomes', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.fortresstech.io/v1/incomes");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["x-api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.fortresstech.io/v1/incomes")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```