Interest engine

Create interest plan version

Create a new version of an existing interest plan. This endpoint allows you to update specific fields while preserving others from the previous version.

Key features:

  • Creates a new version with the specified start_date.
  • Updates only the provided fields—any field not specified inherits the value from the previous version.
  • Validates that the new start_date is after the start_date of the previous version.
  • Maintains immutable fields like interest_type and tier_calculation.
  • Preserves existing tiers when updating interest_by_tiers—only specified tiers are updated.

This endpoint generates an Interest plan created event.

patch/v1/interest/plan/{interestPlanId}

Request

  • Base URL
    https://sandbox.pismolabs.io/interest-engine
  • URL
    https://sandbox.pismolabs.io/interest-engine/v1/interest/plan/{interestPlanId}
  • Auth
    HTTP bearer

Path parameters

interestPlanIdstring required

Interest plan ID generated during the plan's creation. Must be an alphanumeric UUID with the alphabetical characters in lowercase.

Request body

start_datestring date required

Date to start applying the new interest plan version. Format = YYYY-MM-DD. Must be greater than or equal to current date.

descriptionstring

Interest plan name

fixed_interest_ratenumber float nullable

Nominal annual interest rate, expressed as a decimal fraction. 0.10 = 10% per year. 1.00 = 100% per year. Do not send 10 for 10%. Maximum precision: 8 decimal places. The platform converts this annual rate to the accrual period using accrual_basis and interest_type.

If you pass a value for benchmark, this field must be null. Otherwise, it's required.

marginnumber double

Additive spread, in the same unit and period as the benchmark rate: nominal annual, decimal fraction. If benchmark is 0.025 and margin is 0.0225, the resulting annual rate is 0.0475.

If you pass a value for benchmark, this field is optional. If benchmark is null, this field must be null also.

margin_ratenumber double nullable

Multiplier applied to the benchmark rate, expressed as a decimal fraction of 100%. 1.00 = 100% of the benchmark. 1.10 = 110% of the benchmark. 0.95 = 95% of the benchmark. This is not added to the benchmark—use margin for an additive spread.

If you don't pass a value for benchmark, this field must be null. Otherwise, it's required.

Example request

{
  "start_date": "2025-06-17",
  "description": "BANKING PLAN v2",
  "margin": 0.05,
  "margin_rate": 1.2
}

Response

OK

interest_plan_idstring uuid

Interest plan ID generated during the plan's creation. Must be an alphanumeric UUID with the alphabetical characters in lowercase.

versionstring

ID for the new interest plan version

Example response

{
  "interest_plan_id": "07d84f79-3027-47bd-b628-65528ccc8fb2",
  "version": "2025-06-17"
}

Changes

No recorded changes to this operation across all 1 revision of this API.