API Search endpoints…⌘K Get API credentialsGet access

Create a draft loan product

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
adjustedInstallmentRoundingstring · optional

How the final instalment is rounded when it differs from the others. Absent means the currency's own precision.

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; CONTRACTUAL, monthly-frequency products only. The ONLY external recurrence representation (the internal rule string is never exposed). Derived first repayment dates snap forward to the earliest named day and supplied dates must fall on one of them (days 29-31 follow the existing short-month clamping). Several days collect several instalments a month, so at most one may be 28 or later (they would share February's last date) and they require a repayment interval of 1. Null clears; returned sorted ascending.

repayOnWeekdaystring · optional

The weekday a contractual product collects on (MO..SU). Mutually exclusive with repayOnDay. On a monthly product it needs repayOnWeekdayOccurrence alongside it; on a weekly product every occurrence of the weekday is a collection.

repayOnWeekdayOccurrenceinteger · int32 · optional

Which occurrence of repayOnWeekday in the month a monthly product collects on: 1 to 4 counting from the start of the month, or -1 for the last. Refused on a weekly product.

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.

This is the API reference for Lokta, the agentic loan servicing platform. Go to lokta.ai