> ## Documentation Index
> Fetch the complete documentation index at: https://docs.capcells.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Read the serviced schedule

> The plan as it stands on a date: what each period still remains owed, the day each settled one settled, and every recomputation applied.

The Loan's own `periods[]` are [frozen at issuance](/api-reference/loans/read); the serviced Schedule is where the Loan stands **now** — a prepayment's recalculated figures, a rollover's segment, and per Period what remains and what settled when. [Payments](/lending/payments) works the recalculation through; [Products](/lending/products) works the rollover.

**A validator.** The answer carries an `ETag` over the Loan's Client's book and the date — the schedule and the delinquency are folded from every Receipt of the Client, so anything recorded about the Client moves it. Send it back in `If-None-Match` and an unchanged book on the same date is answered `304` with no body, before anything is derived, as on [the payment options](/api-reference/clients/payment-options).

## Path parameters

<ParamField path="tenant_id" type="string" required>
  The Tenancy the Loan belongs to.
</ParamField>

<ParamField path="loan_id" type="string" required>
  The Loan. Another Tenancy's and one that never existed are both `404`.
</ParamField>

## Query parameters

<ParamField query="on" type="string" required>
  The civil date the answer stands as of, `YYYY-MM-DD`. Required and never defaulted — the Platform supplies no today. Absent is `422`.
</ParamField>

## Response

<ResponseField name="loan_id" type="string" required>
  The Loan, and `reference` beside it.
</ResponseField>

<ResponseField name="on" type="string" required>
  The date the answer is as of, echoed.
</ResponseField>

<ResponseField name="periods" type="array" required>
  Every Period the Loan services on that date — the issued ones at their current figures, a rollover's settlement and segment included.

  <Expandable title="period">
    <ResponseField name="index" type="integer" required>
      From 1; index 0 is the payment at the anchor where the Archetype collects one. A rollover appends further indexes.
    </ResponseField>

    <ResponseField name="scheduled_on" type="string" required>
      The unadjusted date. Interest reads this one.
    </ResponseField>

    <ResponseField name="due_on" type="string" required>
      The adjusted date collection waits for.
    </ResponseField>

    <ResponseField name="principal" type="object" required>
      The components as they stand — recalculated where a prepayment recalculated them, with `interest`, `fee`, `tax` and the derived `payment` beside them.
    </ResponseField>

    <ResponseField name="settled_on" type="string">
      The value date the Period stood fully settled. Present exactly on settled Periods.
    </ResponseField>

    <ResponseField name="remaining" type="object">
      What the Period still asks for: `principal` and `charges`, apart. Present on Periods not yet settled.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash Read theme={null}
  curl "https://api.capcells.com/v1/tenants/$TENANT_ID/loans/$LOAN_ID/schedule?on=2026-04-13" \
    -H "Authorization: $(capcells_sign "$CAPCELLS_API_KEY" GET "/v1/tenants/$TENANT_ID/loans/$LOAN_ID/schedule?on=2026-04-13")"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 After a prepayment theme={null}
  {
    "loan_id": "7771aef0-9e65-4a0a-a902-aab4e970d33f",
    "reference": "loan-0001",
    "on": "2026-04-13",
    "periods": [
      { "index": 1, "scheduled_on": "2026-04-02", "due_on": "2026-04-06",
        "payment": { "minor_units": 90066, "currency": "MXN" },
        "settled_on": "2026-04-06", … },
      { "index": 2, "scheduled_on": "2026-05-02", "due_on": "2026-05-04",
        "payment": { "minor_units": 67014, "currency": "MXN" },
        "remaining": {
          "principal": { "minor_units": 37238, "currency": "MXN" },
          "charges": { "minor_units": 29776, "currency": "MXN" }
        }, … },
      …
    ]
  }
  ```

  ```json 200 After a rollover theme={null}
  {
    "loan_id": "3439988a-fd7d-4d6a-9fac-44d7bb0415fc",
    "reference": "payday-0001",
    "on": "2026-03-30",
    "periods": [
      { "index": 1, "scheduled_on": "2026-03-16", "due_on": "2026-03-17",
        "payment": { "minor_units": 0, "currency": "MXN" },
        "settled_on": "2026-03-16", … },
      { "index": 2, "scheduled_on": "2026-03-16", "due_on": "2026-03-16",
        "interest": { "minor_units": 7000, "currency": "MXN" },
        "fee": { "minor_units": 10000, "currency": "MXN" },
        "payment": { "minor_units": 19720, "currency": "MXN" }, … },
      { "index": 3, "scheduled_on": "2026-03-30", "due_on": "2026-03-30",
        "principal": { "minor_units": 100000, "currency": "MXN" },
        "payment": { "minor_units": 108120, "currency": "MXN" }, … }
    ]
  }
  ```
</ResponseExample>

The first example is the worked Loan after its statutory prepayment: Period 1 settled, the rest recalculated to 67014 (MXN 670.14). The second is a rolled payday Loan: the original Period settled by the roll, index 2 the settlement it charged — interest and the rollover fee — and index 3 the segment carrying the principal forward.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.