---
title: "Update loan product"
method: PATCH
path: "/v2/loan-products/{productId}"
tags: ["Loan products"]
---

# Update loan product

`PATCH /v2/loan-products/{productId}`

## Request

- Base URL: `https://sandbox.pismolabs.io/lending`
- URL: `https://sandbox.pismolabs.io/lending/v2/loan-products/{productId}`
- Auth: HTTP bearer

Update an existing loan product with only the fields that are passed in the request body.

This endpoint generates a [Loan product updated](https://developers.pismo.io/events/docs/lending-loan-product-update-1) event.

## Path parameters

- `productId` string, required: Loan product ID

## Headers

- `Idempotency-Key` string, uuid

## Request body

- UpdateLoanProductV2Request: Request body for updating a loan product. Only provided fields will be updated.
  - `disbursement_method` LoanProductV2DisbursementMethod: Disbursement method
    - `type` 'NONE' | 'SINGLE' | 'MULTIPLE', required: Disbursement method type or how the loan is delivered.
  - `interest_plan_ids` string[]: List of interest plan IDs
  - `loan_activation_method` 'ON_BOOKING' | 'ON_DISBURSEMENT' | 'ON_DISBURSEMENT_OR_REPAYMENT' | 'ON_REPAYMENT': Indicate when the system changes a loan to active status. Default is `ON_DISBURSEMENT_OR_REPAYMENT`. If disbursement method type is `NONE`, you cannot set to `ON_DISBURSEMENT`, and if set to `ON_DISBURSEMENT_OR_REPAYMENT` the system changes the loan status on repayment.
  - `minimum_total_payment` number, double: Minimum total payment for the loan product. Must be positive.
  - `parameters` LoanProductV2Parameters: Loan product parameters
    - `overdue_threshold_days` number: Number of days before the account is considered overdue
    - `stop_accrual_number_of_days` number: Maximum period during which delinquency-related charges accrue after a payment is overdue, based on lender policy or local regulations. Once this threshold is reached, new penalty charges stop posting, so the outstanding debt no longer increases.
    - `delinquency_closure_days` number, nullable: Number of days past due after which all loans for the account are automatically closed or canceled using the delinquency closure process. When `null`, the loan product does not enable this delinquency closure feature. Value must be greater than `overdue_threshold_days` when both fields are provided. Returns `ELND0378` if `delinquency_closure_days` are less than or equal to `overdue_threshold_days`.
    - `bring_to_present_value_on_delinquency` boolean: Should the platform bring future installments to present value before cancellation when closing due to delinquency? When set to `true`, at least one `processing_codes.present_value_discount` code must be configured on the loan product (either provided in the same request or already present on the product for updates). Returns `ELND0380` otherwise.
    - `backdating_enabled` boolean: Does the product allow backdated payments? (These payments do not get penalized for arriving after the effective payment date). Defaults to `false`.
    - `max_backdating_window_days` number: Maximum age (in days) of a backdated `repayment_date`. Meaningful only when `backdating_enabled` is `true`; defaults to 60 when backdating is enabled and no value is provided. Returns `ELND0379` if set while `backdating_enabled` is not `true`.
  - `processing_codes` UpdateProcessingCodes: Processing codes to update. Only provided fields will be updated.
    - `booking` ProcessingCode[]: List of booking processing codes
    - `disbursement` DisbursementPC: Define processing codes for disbursement operations.
      - `external` ProcessingCode[]: List of processing codes for external account
      - `internal` ProcessingCode[]: List of processing codes for internal account
    - `early_final_settlement` EfsPC: Define processing codes for early final settlement (EFS) operations.
      - `fee` ProcessingCode[]: List of fee processing codes for early final settlement
    - `insurance` InsurancePC: Define processing codes for insurance operations.
      - `booking` ProcessingCode[]: List of booking processing codes
      - `repayment` ProcessingCode[]: List of repayment processing codes
    - `penalty_accruals` ProcessingCode[]: List of penalty accruals processing codes
    - `penalty_waiver` ProcessingCode[]: List of penalty waiver processing codes
    - `prepayment` PrepaymentPC: Define processing codes for prepayment operations.
      - `fee` ProcessingCode[]: List of fee processing codes for prepayment
    - `present_value_discount` ProcessingCode[]: List of present value discount processing codes
    - `repayment` ProcessingCode[]: List of repayment processing codes
    - `restructuring` ProcessingCode[]: List of restructuring processing codes
  - `product_name` string: Open text that describes the product

## Response `200`

Loan product updated successfully.

- LoanProductV2Response
  - `collateral` 'NONE' | 'SINGLE' | 'COLLATERAL_MULTIPLE', required: Collateral
  - `currency` integer, required: ISO 4217 currency code
  - `disbursement_method` LoanProductV2DisbursementMethod, required: Disbursement method
    - `type` 'NONE' | 'SINGLE' | 'MULTIPLE', required: Disbursement method type or how the loan is delivered.
  - `processing_codes` ProcessingCodes, required: Define processing codes for each operation during the loan lifecycle.
    - `booking` ProcessingCode[]: List of booking processing code
    - `disbursement` DisbursementPC: Define processing codes for disbursement operations.
      - `external` ProcessingCode[]: List of processing codes for external account
      - `internal` ProcessingCode[]: List of processing codes for internal account
    - `early_final_settlement` EfsPC: Define processing codes for early final settlement (EFS) operations.
      - `fee` ProcessingCode[]: List of fee processing codes for early final settlement
    - `insurance` InsurancePC: Define processing codes for insurance operations.
      - `booking` ProcessingCode[]: List of booking processing codes
      - `repayment` ProcessingCode[]: List of repayment processing codes
    - `penalty_accruals` ProcessingCode[]: List of penalty accruals processing codes
    - `penalty_waiver` ProcessingCode[]: List of penalty waiver processing codes
    - `prepayment` PrepaymentPC: Define processing codes for prepayment operations.
      - `fee` ProcessingCode[]: List of fee processing codes for prepayment
    - `present_value_discount` ProcessingCode[]: List of present value discount processing codes
    - `repayment` ProcessingCode[]: List of repayment processing codes
    - `restructuring` ProcessingCode[]: List of restructuring processing codes
  - `product_id` string, required: Loan product ID. Accepts either a lowercase UUID (e.g., "2717a296-124a-47cc-b2a1-91e80dc723eb") or an uppercase alphanumeric string with underscores (e.g., "MY_LOAN_PRODUCT_001"). If not provided during creation, a UUID is auto-generated.
  - `product_name` string, required: Open text that describes the product
  - `status` 'ACTIVE' | 'INACTIVE', required: Product status
  - `created_at` string, date-time: Loan created date in UTC. Format = YYYY-MM-DDThh:mm:ss.SSSZ
  - `early_final_settlement` LoanProductEFS: Define some early settlement requirements.
    - `penalty` PenaltyV2, required: Penalty configuration for early settlement or prepayment
      - `type` 'PERCENTAGE' | 'FIXED_AMOUNT', required: Type of penalty calculation
      - `value` number, double, required: Penalty value. For `PERCENTAGE` penalty type, enter a value between 0 and 1 (such as 0.05 for 5%). For `FIXED_AMOUNT` penalty type, enter the fixed amount value.
    - `lock_in_period` integer: Minimum number of installments that must be made before early settlement is possible.
  - `grace_period_days` integer: Number of calendar days after the installment due date during which late fees and delinquency are not applied. A value of `0` or omitted indicates no grace period.
  - `interest_plan_ids` string[]: List of interest plan IDs
  - `loan_activation_method` 'ON_BOOKING' | 'ON_DISBURSEMENT' | 'ON_DISBURSEMENT_OR_REPAYMENT' | 'ON_REPAYMENT': Indicate when the system changes a loan to active status. Default is `ON_DISBURSEMENT_OR_REPAYMENT`. If disbursement method type is `NONE`, you cannot set to `ON_DISBURSEMENT`, and if set to `ON_DISBURSEMENT_OR_REPAYMENT` the system changes the loan status on repayment.
  - `minimum_total_payment` number, double: Minimum total payment for the loan product. Must be positive.
  - `parameters` LoanProductV2Parameters: Loan product parameters
    - `overdue_threshold_days` number: Number of days before the account is considered overdue
    - `stop_accrual_number_of_days` number: Maximum period during which delinquency-related charges accrue after a payment is overdue, based on lender policy or local regulations. Once this threshold is reached, new penalty charges stop posting, so the outstanding debt no longer increases.
    - `delinquency_closure_days` number, nullable: Number of days past due after which all loans for the account are automatically closed or canceled using the delinquency closure process. When `null`, the loan product does not enable this delinquency closure feature. Value must be greater than `overdue_threshold_days` when both fields are provided. Returns `ELND0378` if `delinquency_closure_days` are less than or equal to `overdue_threshold_days`.
    - `bring_to_present_value_on_delinquency` boolean: Should the platform bring future installments to present value before cancellation when closing due to delinquency? When set to `true`, at least one `processing_codes.present_value_discount` code must be configured on the loan product (either provided in the same request or already present on the product for updates). Returns `ELND0380` otherwise.
    - `backdating_enabled` boolean: Does the product allow backdated payments? (These payments do not get penalized for arriving after the effective payment date). Defaults to `false`.
    - `max_backdating_window_days` number: Maximum age (in days) of a backdated `repayment_date`. Meaningful only when `backdating_enabled` is `true`; defaults to 60 when backdating is enabled and no value is provided. Returns `ELND0379` if set while `backdating_enabled` is not `true`.
  - `penalty_plan_codes` string[]: List of charge plan codes in order
  - `prepayment` LoanProductPrepayment: Defines some prepayment requirements.
    - `penalty` PenaltyV2, required: Penalty configuration for early settlement or prepayment
      - `type` 'PERCENTAGE' | 'FIXED_AMOUNT', required: Type of penalty calculation
      - `value` number, double, required: Penalty value. For `PERCENTAGE` penalty type, enter a value between 0 and 1 (such as 0.05 for 5%). For `FIXED_AMOUNT` penalty type, enter the fixed amount value.
    - `reduce_option` ReduceOption[], required: List of options to define how to reduce an outstanding loan amount. `INSTALLMENT` reduces the installment amounts over time but keeps the same maturity date. `TERM` applies the prepayment amount to reduce the loan term (duration), changing the loan maturity date. With either option, if the amount paid is not enough to cover a full installment amount, it partially pays the installment based on the prepayment hierarchy settings.
    - `lock_in_period` integer: Minimum number of installments that must be made before early settlement is possible.
  - `product_type` 'BNPL' | 'PERSONAL': Loan product type
  - `repayment_calculation_method` 'RATES': Method used to calculate the repayment amount
  - `repayment_hierarchy_code` string: Repayment hierarchy code. Must be normalized (Unicode NFC), and may contain a UUID, or uppercase letters, numbers, and underscore.
  - `updated_at` string, date-time: Loan last updated date in UTC. Format = YYYY-MM-DDThh:mm:ss.SSSZ.
  - `version` integer: Product version

## Other responses

- `202`: Duplicated request identified by Idempotency key.
- `400`: A validation error occurred.
- `404`: Not Found
- `500`: Internal Server Error

---

[API](https://skmtc.dev/pismo/apis/lending.md) - [All operations](https://skmtc.dev/pismo/apis/lending/llms.txt) - [OpenAPI document](https://skmtc.dev/pismo/apis/lending/revisions/a288022e3d8b?raw)
