> This page is for API.

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

# Retrieve a debt schedule

GET https://api.spreadspace.app/api/borrowers/{borrower_id}/extractions/{doc_id}/debt-schedule

Retrieves a single extracted debt schedule. Requesting a document of any other type returns a 404.

Requires the `extractions:read` scope. Rate limit: 200 requests per minute per key (the `api` lane).

Reference: https://docs.spreadspace.app/api/api-reference/debt-schedules/get-debt-schedule

## Authentication

- `Authorization` header (bearer token, required) — Bearer token. Use `ss_live_…` for live data or `ss_test_…` for the sandbox (test mode). See [Authentication](https://docs.spreadspace.app/api/authentication).

## Request

### Path parameters

- `borrower_id` (string, required) — The borrower's id.
- `doc_id` (string, required) — The document's id.

### Headers

- `SpreadSpace-Version` (string, optional) — Pin the API version, e.g. `2026-10-07`. Omit to get the latest. See [Versioning](https://docs.spreadspace.app/api/versioning).

## Response

### 200

OK

- `DebtScheduleReportData`
  - `form_variant`: `sba_2202` (SBA Form 2202)
    - `applicant` (string, required, nullable) — Name of the applicant.
    - `as_of_date` (string, required, nullable) — Date of the schedule: `YYYY-MM-DD`, `YYYY-MM` or `YYYY` when the printed date reads as one, else the text as printed.
    - `computed_totals` (DebtScheduleReportData_SbaComputedTotals, required) — The liability rows added together, column by column.
    - `debt_schedule` (list of DebtScheduleReportData_SbaLiabilityRow, required) — One entry per liability row.
    - `document_type` ("debt_schedule", required) — Which family of document this is.
    - `status` (string, required) — Always `EXTRACTED` on a schedule the API returns.
    - `entity_source` (string, optional) — What names the applicant when the form does not: the page image (`page_image`); absent when the form names the applicant.
    - `form_revision` (string, optional, nullable) — The form revision printed in the footer.
    - `period_source` (string, optional) — Which part of the document dates the schedule when its printed heading states no date: the page image (`page_image`), the file's name (`filename`) or the file's own creation date (`file_metadata`); absent when the heading dates the schedule.
    - `signals` (list of DebtScheduleReportData_DebtScheduleSignal, optional) — Notes about the schedule's date and entity name.
    - `signature_present` (boolean, optional) — True when the signature line is signed.
    - `signer_title` (string, optional, nullable) — The signer's title.
  - `form_variant`: `freeform` (Filer's own columns)
    - `applicant` (string, required, nullable) — The borrower's name from the schedule's title.
    - `as_of_date` (string, required, nullable) — The schedule's date, when it prints one: `YYYY-MM-DD` when the schedule states a full date, else the month and year as printed.
    - `balance_column` (string, required, nullable) — Which printed column holds the outstanding balance.
    - `columns` (list of string, required) — The printed column headers in order.
    - `creditor_column` (string, required, nullable) — Which printed column names the creditor.
    - `debt_schedule` (list of DebtScheduleReportData_FreeformLiabilityRow, required) — One entry per printed row.
    - `document_type` ("debt_schedule", required) — Which family of document this is.
    - `signals` (list of DebtScheduleReportData_DebtScheduleSignal, required) — Notes about the schedule's date and entity name.
    - `status` (string, required) — Always `EXTRACTED` on a schedule the API returns.
    - `total_balance` (string, required, nullable) — Total outstanding balance across the rows.
    - `column_roles` (list of DebtScheduleReportData_DebtScheduleColumnRole, optional) — What each printed column holds, in column order.
    - `converted_layout` (DebtScheduleReportData_DebtScheduleConvertedLayout, optional) — How the printed columns relate to the standard debt fields.
    - `entity_source` (string, optional) — What names the borrower when the schedule's title does not: the page image (`page_image`); absent when the title names the borrower.
    - `entity_source_sheet` (string, optional) — The sheet of the uploaded workbook that names the borrower, when the schedule's own sheet does not and the workbook names exactly one company; absent otherwise.
    - `period_source` (string, optional) — Which part of the document dates the schedule when its printed heading states no date: the page image (`page_image`), the file's name (`filename`) or the file's own creation date (`file_metadata`); absent when the heading dates the schedule.
    - `printed_total_balance` (string, optional) — The total balance line as printed, when the schedule prints one.
    - `rate_display` (map from string to string, optional) — Interest rate cells with a percent sign, keyed by row and column position.
    - `reporting_unit` (string, optional, nullable) — The unit the schedule's figures were printed in, such as ones, thousands or millions; the figures on the wire are already whole dollars.
    - `scale_multiplier` (integer, optional, nullable) — Scale applied to the printed figures: 1 for whole dollars, 1000 when the schedule was printed in thousands, 1000000 when it was printed in millions.

## Errors

### 400 Bad Request Error

Bad request: validation failed, the cursor is malformed, or the API version is unknown.

- `error` (ApiErrorBody, required) — Inner body of the canonical API error envelope.

### 401 Unauthorized Error

Unauthorized: the bearer token or API key is missing or invalid.

- `error` (ApiErrorBody, required) — Inner body of the canonical API error envelope.

### 402 Payment Required Error

Payment required: the standard error envelope with `type` `subscription_required` when the workspace has no active or trialing subscription, or `billing_required` where a plan entitlement applies.

- `error` (ApiErrorBody, required) — Inner body of the canonical API error envelope.

### 403 Forbidden Error

Forbidden: authentication succeeded but the caller is not permitted to perform this action, for example an API key missing the required scope, an embed session reaching a loan it was not minted for, or a feature outside the workspace's plan.

- `error` (ApiErrorBody, required) — Inner body of the canonical API error envelope.

### 404 Not Found Error

Not found: the resource does not exist or is not visible to the calling tenant.

- `error` (ApiErrorBody, required) — Inner body of the canonical API error envelope.

### 429 Too Many Requests Error

Too many requests: the rate limit was hit, or an idempotency-key replay is still in progress.

- `error` (ApiErrorBody, required) — Inner body of the canonical API error envelope.

### 500 Internal Server Error

Internal server error: an unexpected failure. Quote the `request_id` in support tickets. A mutation sent with an `Idempotency-Key` replays this fault under that key rather than re-running; confirm the resource state before resending with a new key.

- `error` (ApiErrorBody, required) — Inner body of the canonical API error envelope.

## Types

### DebtScheduleReportData_SbaComputedTotals

The liability rows added together, column by column.

- `original_amount_sum` (string, required, nullable) — Original amounts added together.
- `current_balance_sum` (string, required, nullable) — Current balances added together.
- `payment_amount_sum` (string, required, nullable) — Payment amounts added together.

### DebtScheduleReportData_SbaLiabilityRow

One row of the Schedule of Liabilities.

- `creditor_name` (string, required, nullable) — Name of creditor.
- `original_amount` (string, required, nullable) — Original amount.
- `original_date` (string, required, nullable) — Original date.
- `current_balance` (string, required, nullable) — Current balance.
- `current_or_delinquent` (string, required, nullable) — Current or delinquent, as printed.
- `maturity_date` (string, required, nullable) — Maturity date: `YYYY-MM-DD`, `YYYY-MM` or `YYYY` when the cell reads as a date; the cell's text as printed when it states a term instead, such as revolving or on demand.
- `payment_amount` (string, required, nullable) — Payment amount; null when the cell prints a term rather than a figure.
- `how_secured` (string, required, nullable) — How secured or endorsed, and the type of collateral.

### DebtScheduleReportData_DebtScheduleSignal

A note about the schedule's date or entity name.

- `severity` (enum, required) — How much weight the note carries: info or warn.
  - Allowed values: `info`, `warn`
- `code` (string, required) — The note's identifier.
- `detail` (string, required) — The note in words.

### DebtScheduleReportData_FreeformLiabilityRow

One printed row of a free-form schedule.

- `cells` (map from string to string, required) — Every printed cell, keyed by column header. An account number is masked to its last four digits.
- `creditor_name` (string, required, nullable) — The creditor, from the creditor column.
- `current_balance` (string, required, nullable) — The outstanding balance, from the balance column.
- `is_total` (boolean, required) — True when the row is a printed total.
- `original_amount` (string, optional, nullable) — Original loan amount as printed, when a column carries it.
- `original_date` (string, optional, nullable) — Original loan date as printed, when a column carries it.
- `interest_rate` (string, optional, nullable) — Interest rate as printed, when a column carries it.
- `maturity_date` (string, optional, nullable) — Maturity date as printed, when a column carries it.
- `payment_amount` (string, optional, nullable) — Payment amount as printed, when a column carries it.
- `payment_frequency` (string, optional, nullable) — Payment frequency as printed, when a column carries it.
- `how_secured` (string, optional, nullable) — Collateral or security as printed, when a column carries it.
- `loan_status` (string, optional, nullable) — Loan status as printed, when a column carries it.

### DebtScheduleReportData_DebtScheduleColumnRole

What a printed column holds.

- `money` (boolean, required) — True when the column holds dollar figures.
- `rate` (boolean, required) — True when the column holds an interest rate.
- `compact` (boolean, required) — True when the column holds dollar figures other than a rate or an identifier.

### DebtScheduleReportData_DebtScheduleConvertedLayout

How the printed columns relate to the standard debt fields.

- `convert` (boolean, required) — True when at least two standard fields have no printed column of their own.
- `money_roles` (list of string, required) — The standard money fields the rows carry.
- `cell_columns` (list of integer, required) — Positions of the printed money columns that do not restate a standard field.

### ApiErrorBody

Inner body of the canonical API error envelope.

- `type` (string, required) — Stable error type identifier. Pattern-match on this value, not the human-readable message.
- `message` (string, required) — Human-readable error message. Subject to wording changes; do not parse.
- `request_id` (string, optional, nullable) — Per-request correlation ID (matches `X-Request-ID` response header). Quote in support tickets.
- `details` (map from string to string, optional, nullable) — Structured detail. Some error types populate documented keys in every environment: a version conflict (409) carries `current_version`, the version the resource is actually at, so the client can reload and re-apply. Free-form diagnostic detail beyond those keys appears in development environments only. An `insufficient_credits` 402 carries `balance_usd`, `reserved_usd`, `in_flight_docs`, `incoming_docs` and `per_doc_reservation_usd` as decimal strings.

## Examples

**Response**

```json
{
  "form_variant": "sba_2202",
  "applicant": "Greenfield Construction LLC",
  "as_of_date": "2025-12-31",
  "computed_totals": {
    "original_amount_sum": "3180000.00",
    "current_balance_sum": "1760000.00",
    "payment_amount_sum": "26100.00"
  },
  "debt_schedule": [
    {
      "creditor_name": "Citizens Bank",
      "original_amount": "1500000.00",
      "original_date": "2021-03",
      "current_balance": "620000.00",
      "current_or_delinquent": "Current",
      "maturity_date": "2028-10",
      "payment_amount": "19700",
      "how_secured": "Equipment and business assets"
    },
    {
      "creditor_name": "Wells Fargo Bank, N.A.",
      "original_amount": "320000.00",
      "original_date": "2023-06",
      "current_balance": "160000.00",
      "current_or_delinquent": "Current",
      "maturity_date": "2028-03",
      "payment_amount": "6400",
      "how_secured": "Titled vehicles and trailers"
    },
    {
      "creditor_name": "Citizens Bank - revolving line of credit",
      "original_amount": "500000.00",
      "original_date": "2022-07",
      "current_balance": "120000.00",
      "current_or_delinquent": "Current",
      "maturity_date": "2026-07",
      "payment_amount": "Interest only",
      "how_secured": "Accounts receivable"
    },
    {
      "creditor_name": "Foundry Road Holdings LLC - affiliate note",
      "original_amount": "120000.00",
      "original_date": "2020-11",
      "current_balance": "120000.00",
      "current_or_delinquent": "Current",
      "maturity_date": "2027-12",
      "payment_amount": "Due at maturity",
      "how_secured": "Unsecured"
    },
    {
      "creditor_name": "Trade accounts payable",
      "original_amount": "740000.00",
      "original_date": null,
      "current_balance": "740000.00",
      "current_or_delinquent": "Current",
      "maturity_date": null,
      "payment_amount": "Net 30",
      "how_secured": "Unsecured"
    }
  ],
  "document_type": "debt_schedule",
  "status": "EXTRACTED",
  "form_revision": null,
  "signals": [],
  "signature_present": true,
  "signer_title": "Member-Manager"
}
```

**SDK Code**

```python
import requests

url = "https://api.spreadspace.app/api/borrowers/3f9c2b1e8d7a4c5b9e0f1a2b/extractions/7a1d4e9c2b3f4a5d8e6c1b0f/debt-schedule"

headers = {"Authorization": "Bearer <token>"}

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

print(response.json())
```

```javascript
const url = 'https://api.spreadspace.app/api/borrowers/3f9c2b1e8d7a4c5b9e0f1a2b/extractions/7a1d4e9c2b3f4a5d8e6c1b0f/debt-schedule';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

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.spreadspace.app/api/borrowers/3f9c2b1e8d7a4c5b9e0f1a2b/extractions/7a1d4e9c2b3f4a5d8e6c1b0f/debt-schedule"

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

	req.Header.Add("Authorization", "Bearer <token>")

	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.spreadspace.app/api/borrowers/3f9c2b1e8d7a4c5b9e0f1a2b/extractions/7a1d4e9c2b3f4a5d8e6c1b0f/debt-schedule")

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

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

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.spreadspace.app/api/borrowers/3f9c2b1e8d7a4c5b9e0f1a2b/extractions/7a1d4e9c2b3f4a5d8e6c1b0f/debt-schedule")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.spreadspace.app/api/borrowers/3f9c2b1e8d7a4c5b9e0f1a2b/extractions/7a1d4e9c2b3f4a5d8e6c1b0f/debt-schedule', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.spreadspace.app/api/borrowers/3f9c2b1e8d7a4c5b9e0f1a2b/extractions/7a1d4e9c2b3f4a5d8e6c1b0f/debt-schedule");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.spreadspace.app/api/borrowers/3f9c2b1e8d7a4c5b9e0f1a2b/extractions/7a1d4e9c2b3f4a5d8e6c1b0f/debt-schedule")! 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()
```