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

# Update Loan

> Partially update a loan by its external reference. Only send fields that changed. amountDue is immutable.

## Overview

Partially update a loan by its external reference ID. Only the fields that changed need to be sent -- omitted fields are left unchanged.

## Immutable Fields

The following fields **cannot be changed** via this endpoint:

* `id` -- The external loan reference (used as the path parameter)
* `customerId` -- The customer linkage
* `amountDue` -- The origination amount set at creation

## Servicing Status Transitions

Setting `servicingStatus` to `NOT_SERVICING` via this endpoint also **cancels all scheduled payments and communications** for the loan, matching the behavior of `POST /loans/{id}/cancel-servicing`. You can optionally include `stopServicingReason` (defaults to `API_REQUEST`).

For stopping servicing specifically, the dedicated `POST /loans/{id}/cancel-servicing` endpoint remains the primary path.

## Request Body

Only send the fields you want to update:

```json theme={null}
{
  "totalBalance": 300.00,
  "payoffAmount": 300.00,
  "isSettled": false
}
```

Transition to NOT\_SERVICING:

```json theme={null}
{
  "servicingStatus": "NOT_SERVICING",
  "stopServicingReason": "PAID_OFF"
}
```

## Error Responses

| Status Code | Description           |
| ----------- | --------------------- |
| 400         | Invalid enum value    |
| 404         | Loan not found        |
| 500         | Internal server error |


## OpenAPI

````yaml PUT /loans/{id}
openapi: 3.1.0
info:
  title: Finosu API
  description: Finosu API
  license:
    name: MIT
  version: 1.0.0
servers: []
security:
  - apiKeyAuth: []
paths:
  /loans/{id}:
    put:
      description: >-
        Partially update a loan by its external reference. Only send fields that
        changed. amountDue is immutable.
      parameters:
        - name: id
          in: path
          description: External reference ID of the loan
          required: true
          schema:
            type: string
      requestBody:
        description: Fields to update
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateLoan'
        required: true
      responses:
        '200':
          description: Loan updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Loan'
        '400':
          description: Invalid enum value
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Loan not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    UpdateLoan:
      type: object
      description: >-
        Partial update. Only send fields that changed. id, customerId, amountDue
        cannot be changed.
      properties:
        type:
          type: string
          enum:
            - CASH_ADVANCE
            - PERSONAL_LOAN
            - INSTALLMENT_LOAN
        applicationStatus:
          type: string
          enum:
            - PENDING
            - APPROVED
            - FUNDED
            - WITHDRAWN
            - REJECTED
        originalFundedAmount:
          type: number
        originalTotalOwed:
          type: number
        interestRate:
          type: number
        apr:
          type: number
        originationDate:
          type: string
          format: date
        startDate:
          type: string
          format: date
        totalBalance:
          type: number
        payoffAmount:
          type: number
        totalPayoffAmount:
          type: number
        balanceAtTransfer:
          type: number
        preTransferPayments:
          type: number
        dueDate:
          type: string
          format: date
        servicingStatus:
          type: string
          enum:
            - ACTIVE
            - NOT_SERVICING
        stopServicingReason:
          type: string
        isSettled:
          type: boolean
        chargeoffDate:
          type: string
          format: date
        chargeoffAmount:
          type: number
        autopayEnabled:
          type: boolean
        noCallReason:
          type: string
        noTextReason:
          type: string
        noEmailReason:
          type: string
        isVisibleInBorrowerPortal:
          type: boolean
        daysPastDueAtBoarding:
          type: integer
        daysSinceOriginationAtBoarding:
          type: integer
        externalLmsMetadata:
          type: object
    Loan:
      type: object
      properties:
        id:
          type: string
          description: External loan reference ID
        customerId:
          type: string
          description: External customer reference ID
        type:
          type: string
        applicationStatus:
          type: string
        originalFundedAmount:
          type: number
        originalTotalOwed:
          type: number
        interestRate:
          type: number
        apr:
          type: number
        originationDate:
          type: string
          format: date
        startDate:
          type: string
          format: date
        totalBalance:
          type: number
        payoffAmount:
          type: number
        totalPayoffAmount:
          type: number
        balanceAtTransfer:
          type: number
        preTransferPayments:
          type: number
        amountDue:
          type: number
        dueDate:
          type: string
        servicingStatus:
          type: string
        stopServicingReason:
          type: string
        isSettled:
          type: boolean
        chargeoffDate:
          type: string
        chargeoffAmount:
          type: number
        autopayEnabled:
          type: boolean
        noCallReason:
          type: string
        noTextReason:
          type: string
        noEmailReason:
          type: string
        isVisibleInBorrowerPortal:
          type: boolean
        daysPastDueAtBoarding:
          type: integer
        daysSinceOriginationAtBoarding:
          type: integer
        externalLmsMetadata:
          type: object
        portfolioId:
          type: string
          format: uuid
        paymentPlanMinPercentage:
          type: number
        paymentPlanMaxPercentage:
          type: number
        taskType:
          type: string
    Error:
      required:
        - error
        - message
      type: object
      properties:
        error:
          type: integer
          format: int32
        message:
          type: string
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key

````