Credit limit simulation

Determine the loan amount that can be drawn against user's mutual fund and stock holdings.

📘

Superseded by Combined Credit Snapshot

For new integrations, use Combined Credit Snapshot instead — it wraps this credit-limit simulation (along with user state and loan details) into a single call, and is the recommended way to fetch eligibility for both pre-onboarding and connected-user flows. This standalone endpoint remains available and supported.

  1. Works for both stocks and mutual funds - based on the assetType in the request body.
  2. If multiple lenders are eligible, returns the highest credit limit offered by any lender, along with the lender key. You also get details like -
    1. Supported min and max loan amount thresholds for a lender
    2. The offered interest rate
  3. If PAN is provided, it checks if there's a user already existing in the system with the same PAN - and returns the credit limit offered by the lender selected by the user. If the user doesn't exist, or the user hasn't selected a lender yet, it returns the best credit limit and lender from all available options.
  4. If optional params like age and isNri are provided, it can filter out ineligible lenders based on these criteria.
  5. If optional query param aggregateFunds is set to true, it also returns a summary section describing how the limit was calculated per asset category (stocks, ETFs, debt funds, equity funds).

Loan against stocks (STOCKS)

When assetType is STOCKS, pass each demat stock holding in securities[]. isDemat is always true and dpId is mandatory. The same ISIN can appear more than once if the stock is held both externally and as a constituent of one or more smallcases. lender is omitted so the API returns the best offer across all eligible lenders.

Optionally:

  • Pass brokerHoldings (raw broker holdings, currently kite) for cross-validation against securities[].
  • Send aggregateFunds=true as a query parameter to collapse the distribution into a single entry per ISIN + dpId (all external and smallcase-constituent units for a broker account are combined).

RequestPOST /backend/{gatewayname}/v1/creditlimit/simulation?aggregateFunds=true

{
  "referrer": "smallcase",            // optional
  "securities": [
    {
      "assetType": "STOCKS",          // constant
      "isin": "INF200KA1FS1",
      "quantity": 100,                // total quantity held
      "isDemat": true,                // always true for STOCKS
      "lockInQuantity": 9,            // optional; deducted from quantity for the calculation
      "dpId": "1208160075231086",     // mandatory for STOCKS
      "iscid": ""                     // empty if held externally
    },
    {
      "assetType": "STOCKS",
      "isin": "INE0FS801015",         // the same ISIN can repeat if held across multiple smallcases
      "quantity": 100,
      "isDemat": true,
      "lockInQuantity": 0,
      "dpId": "1208160075231086",
      "iscid": "asdas87d97"           // populated when the stock is a smallcase constituent
    }
  ],
  "brokerHoldings": [                  // optional; broker raw holdings for cross-validation (currently kite)
    {
      "broker": "kite",
      "holdings": [
        { "isin": "INF200KA1FS1", "units": 100 },
        { "isin": "INE009A01021", "units": 50 }
      ]
    }
  ]
}

Response — each holding is returned in distribution[] (with STOCKS-specific keys like sid, isETF, riskCategory, selectedQuantity, dpId, iscid). summary aggregates by category, and lender, loanAmountThreshold, and interestRate describe the selected offer. The example below is illustrative (trimmed to three holdings).

{
  "code": 0,
  "data": {
    "distribution": [
      {
        "assetType": "STOCKS",
        "securityCode": "INF200KA1FS1",
        "securityName": "SBI Nifty 50 ETF",
        "sid": "SBFP",
        "isETF": true,
        "riskCategory": 1,
        "category": "EQUITY",
        "inputQuantity": 100,
        "allowableQty": 91,
        "selectedQuantity": 91,
        "price": 270.4,
        "marketValue": 24606.4,
        "totalMarketValue": 27040,
        "inputLTV": 50,
        "actualLTV": 45,
        "bufferLTV": 5,
        "drawingPower": 11072,
        "isDemat": true,
        "dpId": "1208160075231086",
        "iscid": "",
        "isEligible": true
      },
      {
        "assetType": "STOCKS",
        "securityCode": "INE399C01030",
        "securityName": "Suprajit Engineering Ltd.",
        "sid": "SUPE",
        "isETF": false,
        "riskCategory": 2,
        "category": "EQUITY",
        "inputQuantity": 100,
        "allowableQty": 100,
        "selectedQuantity": 100,
        "price": 474.5,
        "marketValue": 47450,
        "totalMarketValue": 47450,
        "inputLTV": 50,
        "actualLTV": 45,
        "bufferLTV": 5,
        "drawingPower": 21352,
        "isDemat": true,
        "dpId": "1208160075231086",
        "iscid": "asdas87d97",
        "isEligible": true
      },
      {
        "assetType": "STOCKS",
        "securityCode": "INE284S01014",
        "securityName": "SJS Enterprises Ltd.",
        "sid": "SJS",
        "isETF": false,
        "riskCategory": 3,
        "category": "EQUITY",
        "inputQuantity": 100,
        "allowableQty": 100,
        "selectedQuantity": 0,
        "price": 1295.9,
        "marketValue": 0,
        "totalMarketValue": 129590,
        "inputLTV": 0,
        "actualLTV": 0,
        "bufferLTV": 5,
        "drawingPower": 0,
        "isDemat": true,
        "dpId": "1208160075231086",
        "iscid": "",
        "isEligible": false
      }
    ],
    "flags": {
      "isDematEnabled": true
    },
    "summary": {                  // returned only when aggregateFunds is set to true
      "category": {
        "stocks": {
          "marketValue": 236628,
          "ltv": 45,
          "drawingPower": 48166,
          "marketValueEligible": 107038,
          "marketValueInEligible": 129590
        },
        "etfs": {
          "marketValue": 35208,
          "ltv": 42,
          "drawingPower": 14747,
          "marketValueEligible": 35208,
          "marketValueInEligible": 0
        },
        "equity": {
          "marketValue": 0,
          "ltv": 0,
          "drawingPower": 0,
          "marketValueEligible": 0,
          "marketValueInEligible": 0
        },
        "debt": {
          "marketValue": 0,
          "ltv": 0,
          "drawingPower": 0,
          "marketValueEligible": 0,
          "marketValueInEligible": 0
        }
      },
      "maxDrawingAmount": 62913,
      "maxMarketValueForEligible": 142246,
      "maxMarketValueForInEligible": 129590
    },
    "lender": "bajaj_finserv",
    "loanAmountThreshold": {
      "minAmount": 25000,
      "maxAmount": 20000000
    },
    "interestRate": 10.5
  },
  "message": "SUCCESS"
}

Loan against mutual funds (MUTUALFUND)

When assetType is MUTUALFUND, pass each MF holding in securities[]. SoA / RTA holdings use isDemat: false; demat-held MFs use isDemat: true and must include dpId. Optional pan, age, isNri, and name help filter ineligible lenders and — when pan matches an existing user — return the lender that user has selected. lender is omitted so the API returns the best offer across all eligible lenders.

RequestPOST /backend/{gatewayname}/v1/creditlimit/simulation?aggregateFunds=true

{
  "referrer": "smallcase",            // optional
  "securities": [
    {
      "assetType": "MUTUALFUND",
      "isin": "INF209K01VA3",
      "quantity": 1375.823,
      "isDemat": false,
      "lockInQuantity": 0
    },
    {
      "assetType": "MUTUALFUND",
      "isin": "INF277K01303",
      "quantity": 324.455,
      "isDemat": false,
      "lockInQuantity": 0
    },
    {
      "assetType": "MUTUALFUND",
      "isin": "INF209K011W7",
      "quantity": 100,
      "isDemat": true,                // demat-held MF
      "lockInQuantity": 20,
      "dpId": "1234567898765432"      // mandatory when isDemat is true
    }
  ],
  "pan": "ABCDP1234F",                 // optional
  "age": 20,                          // optional
  "isNri": false,                     // optional
  "name": "John Doe"                  // optional
}

Response — each holding is returned in distribution[] (category EQUITY / DEBT). summary aggregates by category, and lender, loanAmountThreshold, and interestRate describe the selected offer. The example below is illustrative.

{
  "code": 0,
  "data": {
    "distribution": [
      {
        "assetType": "MUTUALFUND",
        "securityCode": "INF209K01VA3",
        "securityName": "Aditya Birla SL Liquid Fund",
        "category": "DEBT",
        "inputQuantity": 1375.823,
        "allowableQty": 1375.82,
        "selectedQuantity": 0,
        "price": 432.5951,
        "marketValue": 595172.99,
        "totalMarketValue": 595174.29,
        "inputLTV": 90,
        "actualLTV": 85,
        "bufferLTV": 5,
        "drawingPower": 505897,
        "isDemat": false,
        "isETF": false,
        "isEligible": true
      },
      {
        "assetType": "MUTUALFUND",
        "securityCode": "INF277K01303",
        "securityName": "Tata Aggressive Hybrid Fund",
        "category": "EQUITY",
        "inputQuantity": 324.455,
        "allowableQty": 324.45,
        "selectedQuantity": 0,
        "price": 448.1076,
        "marketValue": 145388.51,
        "totalMarketValue": 145390.75,
        "inputLTV": 50,
        "actualLTV": 45,
        "bufferLTV": 5,
        "drawingPower": 65424,
        "isDemat": false,
        "isETF": false,
        "isEligible": true
      }
    ],
    "flags": {
      "isDematEnabled": true
    },
    "summary": {                  // returned only when aggregateFunds is set to true
      "category": {
        "debt": {
          "marketValue": 595174,
          "ltv": 84.99,
          "drawingPower": 505897,
          "marketValueEligible": 595174,
          "marketValueInEligible": 0
        },
        "equity": {
          "marketValue": 145390,
          "ltv": 44.99,
          "drawingPower": 65424,
          "marketValueEligible": 145390,
          "marketValueInEligible": 0
        },
        "etfs": {
          "marketValue": 0,
          "ltv": 0,
          "drawingPower": 0,
          "marketValueEligible": 0,
          "marketValueInEligible": 0
        },
        "stocks": {
          "marketValue": 0,
          "ltv": 0,
          "drawingPower": 0,
          "marketValueEligible": 0,
          "marketValueInEligible": 0
        }
      },
      "maxDrawingAmount": 571321,
      "maxMarketValueForEligible": 740565,
      "maxMarketValueForInEligible": 0
    },
    "lender": "bajaj_finserv",
    "loanAmountThreshold": {
      "minAmount": 25000,
      "maxAmount": 20000000
    },
    "interestRate": 10.5
  },
  "message": "SUCCESS"
}
Path Params
string
required
Defaults to gatewaydemo
Query Params
boolean
Defaults to false

Optional. When true, the distribution is aggregated by ISIN + dpId and the summary section is returned.

Body Params
securities
array of objects
required

Required | Array of the user's MF and/or stock holdings.

securities*
brokerHoldings
array of objects

Optional. Broker raw holdings (currently kite) for cross-validation against securities[].

brokerHoldings
string

Optional. Defaults to your partner name.

string

Optional. User's PAN.

number

Optional. Validated against the lender's allowed age range when provided.

boolean
Defaults to false

Optional. Use isNri (isNRI is deprecated). NRI users are rejected with not_eligible_wrt_nri_status (4407).

string

Optional. User's name.

string
Defaults to bajaj_finserv

Optional. Omit to get the best offer across all eligible lenders.

Headers
string
required
Defaults to gatewayDemo_secret

Required | apiSecret shared for authentication

string
required
Defaults to eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJndWVzdCI6dHJ1ZSwiaWF0IjoxNjU0MzIxMDAwfQ.qiZ_w1yFYXhkdLMlqI28XJOXitfZwr64e2oL-lMEHZU

Required | JWT created with payload {"iss":"<your_gateway_name>"}, and signed with the shared secret

Response

Language
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json