API Search endpoints…⌘K

Create a Loan Product (V2)

POST/lokta-lms/api/v2/loanproducts

Creates a Loan Product through the V2 contract.

Functionally equivalent to the V1 create operation — same parameters, validation, defaults, persistence and response — with one deliberate difference: loanScheduleType (CUMULATIVE, PROGRESSIVE or CONTRACTUAL) is mandatory and must be supplied explicitly.

Supports both Cumulative and Progressive loan products; the API version does not determine the schedule type.

Temporary integration tolerance: unknown JSON request-body fields are ignored — they are not validated, persisted, returned or audited, and must not be relied upon. Known fields remain strictly validated. A future release may restore unsupported-parameter rejection.

Request body application/json

loanScheduleTypestring · required
accountMovesOutOfNPAOnlyOnArrearsCompletionboolean · optional
accountingRuleinteger · int32 · optional
allowApprovedDisbursedAmountsOverAppliedboolean · optional
allowAttributeOverridesAllowAttributeOverrides · optional
allowCompoundingOnEodboolean · optional
allowFullTermForTrancheboolean · optional

Allow full term length for each tranche disbursement. Only available for PROGRESSIVE schedule type with multi-disbursement enabled.

allowPartialPeriodInterestCalculationboolean · optional
allowVariableInstallmentsboolean · optional
amortizationTypeinteger · int32 · optional
buyDownExpenseAccountIdinteger · int64 · optional
buyDownFeeCalculationTypestring · optional
One of: FLAT
buyDownFeeIncomeTypestring · optional
One of: FEE, INTEREST
buyDownFeeStrategystring · optional
One of: EQUAL_AMORTIZATION
buydownfeeClassificationToIncomeAccountMappingsarray of PostClassificationToIncomeAccountMappings · optional
canDefineInstallmentAmountboolean · optional
canUseForTopupboolean · optional
capitalizedIncomeCalculationTypestring · optional
One of: FLAT
capitalizedIncomeClassificationToIncomeAccountMappingsarray of PostClassificationToIncomeAccountMappings · optional
capitalizedIncomeStrategystring · optional
One of: EQUAL_AMORTIZATION
capitalizedIncomeTypestring · optional
One of: FEE, INTEREST
chargeOffBehaviourstring · optional
chargeOffExpenseAccountIdinteger · int64 · optional
chargeOffFraudExpenseAccountIdinteger · int64 · optional
chargeOffReasonToExpenseAccountMappingsarray of PostChargeOffReasonToExpenseAccountMappings · optional
chargesarray of LoanProductV2ChargeEntry · optional

Charge entries — existing charge ids plus optional per-association flags.

closeDatestring · optional
creditAllocationarray of CreditAllocationData · optional
currencyCodestring · optional
dateFormatstring · optional
daysInMonthTypeinteger · int32 · optional
daysInYearCustomStrategystring · optional
daysInYearTypeinteger · int32 · optional
deferredFeeIncomeAccountIdinteger · int64 · optional
deferredIncomeLiabilityAccountIdinteger · int64 · optional
delinquencyBucketIdinteger · int64 · optional
descriptionstring · optional
digitsAfterDecimalinteger · int32 · optional
disallowExpectedDisbursementsboolean · optional
disallowInterestCalculationOnPastDueboolean · optional
disbursedAmountPercentageForDownPaymentnumber · optional
dueDaysForRepaymentEventinteger · int32 · optional
enableAccrualActivityPostingboolean · optional
enableAutoRepaymentForDownPaymentboolean · optional
enableBuyDownFeeboolean · optional
enableDownPaymentboolean · optional
enableIncomeCapitalizationboolean · optional
enableInstallmentLevelDelinquencyboolean · optional
externalIdstring · optional
feeToIncomeAccountMappingsarray of LoanProductChargeToGLAccountMapper · optional
fixedLengthinteger · int32 · optional
fixedPrincipalPercentagePerInstallmentnumber · optional
fundIdinteger · int64 · optional
fundSourceAccountIdinteger · int64 · optional
goodwillCreditAccountIdinteger · int64 · optional
graceOnArrearsAgeinginteger · int32 · optional
graceOnInterestPaymentinteger · int32 · optional
graceOnPrincipalPaymentinteger · int32 · optional
holdGuaranteeFundsboolean · optional
inArrearsToleranceinteger · int32 · optional
inMultiplesOfinteger · int32 · optional
includeInBorrowerCycleboolean · optional
incomeFromBuyDownAccountIdinteger · int64 · optional
incomeFromCapitalizationAccountIdinteger · int64 · optional
incomeFromChargeOffFeesAccountIdinteger · int64 · optional
incomeFromChargeOffInterestAccountIdinteger · int64 · optional
incomeFromChargeOffPenaltyAccountIdinteger · int64 · optional
incomeFromFeeAccountIdinteger · int64 · optional
incomeFromGoodwillCreditFeesAccountIdinteger · int64 · optional
incomeFromGoodwillCreditInterestAccountIdinteger · int64 · optional
incomeFromGoodwillCreditPenaltyAccountIdinteger · int64 · optional
incomeFromPenaltyAccountIdinteger · int64 · optional
incomeFromRecoveryAccountIdinteger · int64 · optional
installmentAmountInMultiplesOfinteger · int32 · optional
interestCalculationPeriodTypeinteger · int32 · optional
interestOnLoanAccountIdinteger · int64 · optional
interestRateFrequencyTypeinteger · int32 · optional
interestRatePerPeriodnumber · double · optional
interestRateVariationsForBorrowerCyclearray · optional
interestRecalculationCompoundingMethodinteger · int32 · optional
interestRecognitionOnDisbursementDateboolean · optional
interestTypeinteger · int32 · optional
isArrearsBasedOnOriginalScheduleboolean · optional
isCompoundingToBePostedAsTransactionboolean · optional
isEqualAmortizationboolean · optional
isInterestRecalculationEnabledboolean · optional
isLinkedToFloatingInterestRatesboolean · optional
loanPortfolioAccountIdinteger · int64 · optional
loanScheduleProcessingTypestring · optional
localestring · optional
maxInterestRatePerPeriodnumber · double · optional
maxNumberOfRepaymentsinteger · int32 · optional
maxPrincipalnumber · double · optional
maxTrancheCountinteger · int32 · optional
merchantBuyDownFeeboolean · optional
minInterestRatePerPeriodnumber · double · optional
minNumberOfRepaymentsinteger · int32 · optional
minPrincipalnumber · double · optional
minimumDaysBetweenDisbursalAndFirstRepaymentinteger · int32 · optional
multiDisburseLoanboolean · optional
namestring · optional
numberOfRepaymentVariationsForBorrowerCyclearray · optional
numberOfRepaymentsinteger · int32 · optional
outstandingLoanBalancenumber · double · optional
overAppliedCalculationTypestring · optional
overAppliedNumberinteger · int32 · optional
overDueDaysForRepaymentEventinteger · int32 · optional
overdueDaysForNPAinteger · int32 · optional
overpaymentLiabilityAccountIdinteger · int64 · optional
paymentAllocationarray of AdvancedPaymentData · optional
paymentChannelToFundSourceMappingsarray of GetLoanPaymentChannelToFundSourceMappings · optional
penaltyToIncomeAccountMappingsarray of LoanProductChargeToGLAccountMapper · optional
preClosureInterestCalculationStrategyinteger · int32 · optional
principalnumber · double · optional
principalThresholdForLastInstallmentinteger · int32 · optional
principalVariationsForBorrowerCyclearray · optional
ratesarray of RateData · optional
recalculationCompoundingFrequencyIntervalinteger · int32 · optional
recalculationCompoundingFrequencyOnDayTypeinteger · int32 · optional
recalculationCompoundingFrequencyTypeinteger · int32 · optional
recalculationRestFrequencyIntervalinteger · int32 · optional
recalculationRestFrequencyTypeinteger · int32 · optional
receivableFeeAccountIdinteger · int64 · optional
receivableInterestAccountIdinteger · int64 · optional
receivablePenaltyAccountIdinteger · int64 · optional
repaymentEveryinteger · int32 · optional
repaymentFrequencyTypeinteger · int64 · optional
repaymentStartDateTypeinteger · int32 · optional
rescheduleStrategyMethodinteger · int32 · optional
shortNamestring · optional
startDatestring · optional
supportedInterestRefundTypesarray · optional
transactionProcessingStrategyCodestring · optional
transfersInSuspenseAccountIdinteger · int64 · optional
useBorrowerCycleboolean · optional
writeOffAccountIdinteger · int64 · optional
writeOffReasonsToExpenseMappingsarray of PostWriteOffReasonToExpenseAccountMappings · optional
beneficiaryTypestring · optional

System-defined disbursement payee category. Optional; product-type applicability is a client-side concern until the parameter-metadata framework serves it.

One of: BORROWER, MERCHANT, DEALER, BUILDER, PRIOR_LENDER
bpiMethodstring · optional

how the stub between disbursement and the first instalment is billed. Priced by the CONTRACTUAL schedule type; refused for the others.

One of: EMI_PLUS_BPI, PRE_EMI_INTEREST, BPI_WITHIN_EMI, CAPITALIZE_BPI
brokenPeriodDayCountstring · optional

day-count convention for broken (stub) periods — same choices as dayCountConvention (parity). Null = regular-period behaviour. Declarative product configuration: stored as sent; the broken-period interest engine consumes it in a later phase.

One of: ACT_365, ACT_360, D30_360_US, D30E_360, ACT_ACT
coLendingEligibleboolean · optional

Whether the product may participate in a co-lending arrangement. Optional; defaults to false.

collectBpiAtDisbursementboolean · optional

whether broken-period interest is collected at disbursement. Refused for a schedule type that prices no broken period. Not yet consumed: no transaction or journal entry nets it from the proceeds (mock-up term preEmi). Defaults to false; explicit null is rejected. Declarative: stored as sent; the BPI engine consumes it in a later phase.

computeAprForKfsboolean · optional

whether APR should be computed for KFS disclosures. Optional; defaults to false. Declarative: stored as sent; the APR/KFS engine consumes it in a later phase.

createAsDraftboolean · optional

Create the product as a DRAFT: it cannot originate loans whatever its start and close dates say, and appears in no product selection list, until POST /v2/loanproducts/{productId}/activate releases it. Optional; defaults to false, in which case the product has no activation lifecycle at all and behaves exactly as it does today. TRANSITIONAL — this exists so the activation flow can be exercised before clients integrate the activate call; drafting becomes the V2 default once they do.

dayCountConventionstring · optional

stable day-count convention name — the V2-only ALTERNATIVE way to fulfil the mandatory daysInMonthType/daysInYearType axes (the backend derives and persists both). Supplying the raw axes alone remains valid (convention stays null); supplying both requires consistency with the derivation (ACT_365→1/365, ACT_360→1/360, ACT_ACT→1/1, D30_360_US and D30E_360→30/360 — stored distinctly; the engine-level US-vs-30E distinction is deferred).

One of: ACT_365, ACT_360, D30_360_US, D30E_360, ACT_ACT
defaultRoundingModestring · optional

product-level java.math.RoundingMode NAME (never an ordinal or any internal identifier). Null inherits tenant rounding. Declarative: persisted via the shared rounding profile; engine wiring consumes it in a later phase.

One of: UP, DOWN, CEILING, FLOOR, HALF_UP, HALF_DOWN, HALF_EVEN
interestRateStepnumber · optional

fixed nominal rate increment in percentage points per annum. Fixed-rate products only — must be null/omitted for floating products. Null = continuous.

maximumDaysBetweenDisbursalAndFirstRepaymentinteger · int32 · optional

maximum calendar days between disbursement and the first repayment — the ceiling sibling of minimumDaysBetweenDisbursalAndFirstRepayment (must be >= the floor). ACTIVELY enforced at loan origination for both schedule types. Null/omitted = no ceiling.

pmtTypestring · optional

payment-formula variant. Optional; defaults to STANDARD_PMT (current engine behaviour). PRECISE_PMT is stored as declarative configuration; the precise-PMT engine consumes it in a later phase. Explicit null is rejected — send STANDARD_PMT to reset.

One of: STANDARD_PMT, PRECISE_PMT
principalStepnumber · optional

principal increment anchored at minimumPrincipal. Null/omitted = continuous band. Requires the complete principal band when supplied; the default principal must sit on the grid.

productCategoryTagsarray · optional

Stable category-tag codes from code group LoanProductCategory. Optional; duplicates rejected.

productTypestring · optional

Stable product-type code from code group LoanProductType (see productTypeOptions in the template). Optional.

repayOnDayarray · optional

pinned monthly repayment day(s), 1-31, unique — monthly-frequency products only. The ONLY external recurrence representation (the internal rule string is never exposed). Exactly ONE day is active: derived first repayment dates snap forward to it and supplied dates must fall on it (days 29-31 follow the existing short-month clamping). More than one day is rejected until the semi-monthly engine is delivered. Null clears; returned sorted ascending.

residualEnabledboolean · optional

residual (balloon) schedule eligibility flag. Declarative: stored as sent; the residual schedule engine consumes it in a later phase.

scheduleSolverstring · optional

declarative input-mode selection for a configurator/LOS (D-27). Optional and NULLABLE — omitted or null means "not configured"; there is no server default. All five values are storable and none changes backend behaviour. The backend never derives Loan terms from scheduleSolver: Loan Product and Loan APIs always receive fully determined Principal, tenor and interest-rate values regardless of the configured solver.

One of: SOLVE_EMI, TARGET_EMI, MERCHANT_DISCOUNT, FLAT_RATE, TOTAL_INTEREST_PCT
tenorStepinteger · int32 · optional

increment in NUMBER OF INSTALLMENTS over the repayment-count band (never a calendar duration). Null/omitted = continuous.

Responses

200OK

Response fields

resourceIdinteger · int64 · optional

Every request authenticates with HTTP Basic and carries a Tenant-Identifier header. See the conventions for dates, commands, pagination and errors. Open this operation in the interactive explorer, or read it as Markdown.