Create a Loan Product (V2)
/lokta-lms/api/v2/loanproductsCreates 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 · requiredaccountMovesOutOfNPAOnlyOnArrearsCompletionboolean · optionalaccountingRuleinteger · int32 · optionalallowApprovedDisbursedAmountsOverAppliedboolean · optionalallowAttributeOverridesAllowAttributeOverrides · optionalallowCompoundingOnEodboolean · optionalallowFullTermForTrancheboolean · optionalAllow full term length for each tranche disbursement. Only available for PROGRESSIVE schedule type with multi-disbursement enabled.
allowPartialPeriodInterestCalculationboolean · optionalallowVariableInstallmentsboolean · optionalamortizationTypeinteger · int32 · optionalbuyDownExpenseAccountIdinteger · int64 · optionalbuyDownFeeCalculationTypestring · optionalFLATbuyDownFeeIncomeTypestring · optionalFEE, INTERESTbuyDownFeeStrategystring · optionalEQUAL_AMORTIZATIONbuydownfeeClassificationToIncomeAccountMappingsarray of PostClassificationToIncomeAccountMappings · optionalcanDefineInstallmentAmountboolean · optionalcanUseForTopupboolean · optionalcapitalizedIncomeCalculationTypestring · optionalFLATcapitalizedIncomeClassificationToIncomeAccountMappingsarray of PostClassificationToIncomeAccountMappings · optionalcapitalizedIncomeStrategystring · optionalEQUAL_AMORTIZATIONcapitalizedIncomeTypestring · optionalFEE, INTERESTchargeOffBehaviourstring · optionalchargeOffExpenseAccountIdinteger · int64 · optionalchargeOffFraudExpenseAccountIdinteger · int64 · optionalchargeOffReasonToExpenseAccountMappingsarray of PostChargeOffReasonToExpenseAccountMappings · optionalchargesarray of LoanProductV2ChargeEntry · optionalCharge entries — existing charge ids plus optional per-association flags.
closeDatestring · optionalcreditAllocationarray of CreditAllocationData · optionalcurrencyCodestring · optionaldateFormatstring · optionaldaysInMonthTypeinteger · int32 · optionaldaysInYearCustomStrategystring · optionaldaysInYearTypeinteger · int32 · optionaldeferredFeeIncomeAccountIdinteger · int64 · optionaldeferredIncomeLiabilityAccountIdinteger · int64 · optionaldelinquencyBucketIdinteger · int64 · optionaldescriptionstring · optionaldigitsAfterDecimalinteger · int32 · optionaldisallowExpectedDisbursementsboolean · optionaldisallowInterestCalculationOnPastDueboolean · optionaldisbursedAmountPercentageForDownPaymentnumber · optionaldueDaysForRepaymentEventinteger · int32 · optionalenableAccrualActivityPostingboolean · optionalenableAutoRepaymentForDownPaymentboolean · optionalenableBuyDownFeeboolean · optionalenableDownPaymentboolean · optionalenableIncomeCapitalizationboolean · optionalenableInstallmentLevelDelinquencyboolean · optionalexternalIdstring · optionalfeeToIncomeAccountMappingsarray of LoanProductChargeToGLAccountMapper · optionalfixedLengthinteger · int32 · optionalfixedPrincipalPercentagePerInstallmentnumber · optionalfundIdinteger · int64 · optionalfundSourceAccountIdinteger · int64 · optionalgoodwillCreditAccountIdinteger · int64 · optionalgraceOnArrearsAgeinginteger · int32 · optionalgraceOnInterestPaymentinteger · int32 · optionalgraceOnPrincipalPaymentinteger · int32 · optionalholdGuaranteeFundsboolean · optionalinArrearsToleranceinteger · int32 · optionalinMultiplesOfinteger · int32 · optionalincludeInBorrowerCycleboolean · optionalincomeFromBuyDownAccountIdinteger · int64 · optionalincomeFromCapitalizationAccountIdinteger · int64 · optionalincomeFromChargeOffFeesAccountIdinteger · int64 · optionalincomeFromChargeOffInterestAccountIdinteger · int64 · optionalincomeFromChargeOffPenaltyAccountIdinteger · int64 · optionalincomeFromFeeAccountIdinteger · int64 · optionalincomeFromGoodwillCreditFeesAccountIdinteger · int64 · optionalincomeFromGoodwillCreditInterestAccountIdinteger · int64 · optionalincomeFromGoodwillCreditPenaltyAccountIdinteger · int64 · optionalincomeFromPenaltyAccountIdinteger · int64 · optionalincomeFromRecoveryAccountIdinteger · int64 · optionalinstallmentAmountInMultiplesOfinteger · int32 · optionalinterestCalculationPeriodTypeinteger · int32 · optionalinterestOnLoanAccountIdinteger · int64 · optionalinterestRateFrequencyTypeinteger · int32 · optionalinterestRatePerPeriodnumber · double · optionalinterestRateVariationsForBorrowerCyclearray · optionalinterestRecalculationCompoundingMethodinteger · int32 · optionalinterestRecognitionOnDisbursementDateboolean · optionalinterestTypeinteger · int32 · optionalisArrearsBasedOnOriginalScheduleboolean · optionalisCompoundingToBePostedAsTransactionboolean · optionalisEqualAmortizationboolean · optionalisInterestRecalculationEnabledboolean · optionalisLinkedToFloatingInterestRatesboolean · optionalloanPortfolioAccountIdinteger · int64 · optionalloanScheduleProcessingTypestring · optionallocalestring · optionalmaxInterestRatePerPeriodnumber · double · optionalmaxNumberOfRepaymentsinteger · int32 · optionalmaxPrincipalnumber · double · optionalmaxTrancheCountinteger · int32 · optionalmerchantBuyDownFeeboolean · optionalminInterestRatePerPeriodnumber · double · optionalminNumberOfRepaymentsinteger · int32 · optionalminPrincipalnumber · double · optionalminimumDaysBetweenDisbursalAndFirstRepaymentinteger · int32 · optionalmultiDisburseLoanboolean · optionalnamestring · optionalnumberOfRepaymentVariationsForBorrowerCyclearray · optionalnumberOfRepaymentsinteger · int32 · optionaloutstandingLoanBalancenumber · double · optionaloverAppliedCalculationTypestring · optionaloverAppliedNumberinteger · int32 · optionaloverDueDaysForRepaymentEventinteger · int32 · optionaloverdueDaysForNPAinteger · int32 · optionaloverpaymentLiabilityAccountIdinteger · int64 · optionalpaymentAllocationarray of AdvancedPaymentData · optionalpaymentChannelToFundSourceMappingsarray of GetLoanPaymentChannelToFundSourceMappings · optionalpenaltyToIncomeAccountMappingsarray of LoanProductChargeToGLAccountMapper · optionalpreClosureInterestCalculationStrategyinteger · int32 · optionalprincipalnumber · double · optionalprincipalThresholdForLastInstallmentinteger · int32 · optionalprincipalVariationsForBorrowerCyclearray · optionalratesarray of RateData · optionalrecalculationCompoundingFrequencyIntervalinteger · int32 · optionalrecalculationCompoundingFrequencyOnDayTypeinteger · int32 · optionalrecalculationCompoundingFrequencyTypeinteger · int32 · optionalrecalculationRestFrequencyIntervalinteger · int32 · optionalrecalculationRestFrequencyTypeinteger · int32 · optionalreceivableFeeAccountIdinteger · int64 · optionalreceivableInterestAccountIdinteger · int64 · optionalreceivablePenaltyAccountIdinteger · int64 · optionalrepaymentEveryinteger · int32 · optionalrepaymentFrequencyTypeinteger · int64 · optionalrepaymentStartDateTypeinteger · int32 · optionalrescheduleStrategyMethodinteger · int32 · optionalshortNamestring · optionalstartDatestring · optionalsupportedInterestRefundTypesarray · optionaltransactionProcessingStrategyCodestring · optionaltransfersInSuspenseAccountIdinteger · int64 · optionaluseBorrowerCycleboolean · optionalwriteOffAccountIdinteger · int64 · optionalwriteOffReasonsToExpenseMappingsarray of PostWriteOffReasonToExpenseAccountMappings · optionalbeneficiaryTypestring · optionalSystem-defined disbursement payee category. Optional; product-type applicability is a client-side concern until the parameter-metadata framework serves it.
BORROWER, MERCHANT, DEALER, BUILDER, PRIOR_LENDERbpiMethodstring · optionalhow the stub between disbursement and the first instalment is billed. Priced by the CONTRACTUAL schedule type; refused for the others.
EMI_PLUS_BPI, PRE_EMI_INTEREST, BPI_WITHIN_EMI, CAPITALIZE_BPIbrokenPeriodDayCountstring · optionalday-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.
ACT_365, ACT_360, D30_360_US, D30E_360, ACT_ACTcoLendingEligibleboolean · optionalWhether the product may participate in a co-lending arrangement. Optional; defaults to false.
collectBpiAtDisbursementboolean · optionalwhether 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 · optionalwhether 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 · optionalCreate 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 · optionalstable 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).
ACT_365, ACT_360, D30_360_US, D30E_360, ACT_ACTdefaultRoundingModestring · optionalproduct-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.
UP, DOWN, CEILING, FLOOR, HALF_UP, HALF_DOWN, HALF_EVENinterestRateStepnumber · optionalfixed nominal rate increment in percentage points per annum. Fixed-rate products only — must be null/omitted for floating products. Null = continuous.
maximumDaysBetweenDisbursalAndFirstRepaymentinteger · int32 · optionalmaximum 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 · optionalpayment-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.
STANDARD_PMT, PRECISE_PMTprincipalStepnumber · optionalprincipal increment anchored at minimumPrincipal. Null/omitted = continuous band. Requires the complete principal band when supplied; the default principal must sit on the grid.
productCategoryTagsarray · optionalStable category-tag codes from code group LoanProductCategory. Optional; duplicates rejected.
productTypestring · optionalStable product-type code from code group LoanProductType (see productTypeOptions in the template). Optional.
repayOnDayarray · optionalpinned 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 · optionalresidual (balloon) schedule eligibility flag. Declarative: stored as sent; the residual schedule engine consumes it in a later phase.
scheduleSolverstring · optionaldeclarative 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.
SOLVE_EMI, TARGET_EMI, MERCHANT_DISCOUNT, FLAT_RATE, TOTAL_INTEREST_PCTtenorStepinteger · int32 · optionalincrement in NUMBER OF INSTALLMENTS over the repayment-count band (never a calendar duration). Null/omitted = continuous.
Responses
200OKResponse fields
resourceIdinteger · int64 · optionalEvery 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.