--- title: "Modelling private credit in LUSID" slug: "modelling-loan-instruments-in-lusid" updated: 2026-09-08T08:32:36Z published: 2026-09-08T08:32:36Z canonical: "support.lusid.com/modelling-loan-instruments-in-lusid" --- > ## Documentation Index > Fetch the complete documentation index at: https://support.lusid.com/llms.txt > Use this file to discover all available pages before exploring further. # Modelling private credit in LUSID You can model certain kinds of loan as instruments of type `FlexibleLoan` in LUSID. [See all supported instruments](/v1/docs/what-instruments-does-lusid-support). > **Note**: This article does not currently cover linking a `FlexibleLoan` instrument to a `LoanFacility` instrument. A `FlexibleLoan` is designed for revolving credit facilities and drawdown loans where the outstanding principal balance can change on any day of an interest period. Unlike bonds, this means LUSID cannot derived accrued interest from flow conventions. A `FlexibleLoan` accrues interest on the loan's outstanding balance every day. These daily amounts accumulate over the interest period and are paid according to a payment schedule, typically once a month. ## Mastering an instrument There are [numerous tools](/v1/docs/how-do-i-master-an-instrument) you can use to master a `FlexibleLoan` in the LUSID Security Master. Some fields are common to all types of instrument, such as an intuitive `name`, the [requirement to specify a set](/v1/docs/understanding-instrument-identifiers) of `identifiers`, and the facility to [store extra information](/v1/docs/properties) as `properties`. Fields in the economic `definition` object are specific to `FlexibleLoan`. For more information on these fields, examine the [FlexibleLoan](https://www.lusid.com/docs/api/lusid/schemas/FlexibleLoan/) schema, or alternatively select **FlexibleLoan** from the **definition** dropdown in the [UpsertInstruments](https://www.lusid.com/docs/api/lusid/endpoints/instruments/UpsertInstruments) API reference: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-59VO2V6X.png?sv=2026-02-06&spr=https&st=2026-11-09T06%3A14%3A33Z&se=2026-11-09T07%3A14%3A33Z&sr=c&sp=r&sig=SFxPVMwTqKEPx7UhKIJbAKmppQrtvwbRpiWsNPLebec%3D) ### Consider the following `UpsertInstruments` API call to create a loan facility fixed at 5% with interest payments once per year: REST APIPython SDK ```json curl -X POST "https://.lusid.com/api/api/instruments?scope=mycustominstrscope"   -H "Content-Type: application/json-patch+json"   -H "Authorization: Bearer "   -d '{  "upsert_request_1": {    "name": "FlexLoan-1Jan2024",    "identifiers": {"ClientInternal": {"value": "FlexLoan-1Jan2024"}},    "definition": {      "instrumentType": "FlexibleLoan",      "startDate": "2019-01-01T00:00:00Z",      "maturityDate": "2024-01-01T00:00:00Z",      "domCcy": "GBP",      "schedules": [        {          "scheduleType": "FixedSchedule",          "startDate": "2019-01-01T00:00:00Z",          "maturityDate": "2024-01-01T00:00:00Z",          "paymentCurrency": "GBP",          "notional": 1,          "couponRate": 0.05,          "flowConventions": {            "paymentFrequency": "1Y",            "dayCountConvention": "ActualActual",            "rollConvention": "None",            "currency": "GBP",            "paymentCalendars": [],            "resetCalendars": []          }        }      ]    }  } }' ``` *Coming soon* For information on all fields, examine the [FlexibleLoan](https://www.lusid.com/docs/api/lusid/schemas/FlexibleLoan/) schema. Note in particular the following: - The `instrumentType` must be `FlexibleLoan`. - The `startDate` is typically the transaction date but can be before or after if required. - The `schedules` array **must** contain either a single [fixed schedule](/v1/docs/modelling-complex-bonds-in-lusid#specifying-a-fixed-schedule) or a single [floating schedule](/v1/docs/modelling-complex-bonds-in-lusid#specifying-a-floating-schedule). Note the interest rate calculation features of a schedule are the same as for a `ComplexBond`. Providing the request is successful, the response: - Confirms the globally-unique [LUID](/v1/docs/what-is-a-lusid-instrument-id-or-luid) for the instrument. - Generates extra fields that are stored as part of the instrument definition and can be [filtered on](/v1/docs/filtering-information-retrieved-from-lusid). - Supplies default values for fields not explicitly specified in the request: ```json {  "values": {    "upsert_request_1": {      "scope": "mycustominstrscope",      "lusidInstrumentId": "LUID_00003H3C",      "version": {        "effectiveFrom": "0001-01-01T00:00:00.0000000+00:00",        "asAtDate": "2026-07-03T10:02:47.2951040+00:00",        "asAtCreated": "2026-07-03T10:02:47.2951040+00:00",        "userIdCreated": "00u91lo2d7X42sdse2p7",        "requestIdCreated": "2026070310-69fe7aa91e47450fb3684d24d4dcb27b",        "reasonCreated": "",        "asAtModified": "2026-07-03T10:02:47.2951040+00:00",        "userIdModified": "00u91lo2d7X42sdse2p7",        "requestIdModified": "2026070310-69fe7aa91e47450fb3684d24d4dcb27b",        "reasonModified": "",        "asAtVersionNumber": 1,        "entityUniqueId": "bf38498c-ac69-4cca-b1cf-e357e98df438"      },      "name": "FlexLoan-1Jan2024",      "identifiers": {        "LusidInstrumentId": "LUID_00003H3C",        "ClientInternal": "FlexLoan-1Jan2024"      },      "properties": [],      "instrumentDefinition": {        "startDate": "2019-01-01T00:00:00.0000000+00:00",        "maturityDate": "2024-01-01T00:00:00.0000000+00:00",        "domCcy": "GBP",        "schedules": [          {            "startDate": "2019-01-01T00:00:00.0000000+00:00",            "maturityDate": "2024-01-01T00:00:00.0000000+00:00",            "flowConventions": {              "currency": "GBP",              "paymentFrequency": "1Y",              "dayCountConvention": "ActualActual",              "rollConvention": "None",              "paymentCalendars": [],              "resetCalendars": [],              "settleDays": 0,              "resetDays": 0,              "leapDaysIncluded": true,              "accrualDateAdjustment": "Adjusted",              "businessDayConvention": "None",              "accrualDayCountConvention": "ActualActual"            },            "couponRate": 0.05,            "notional": 1,            "paymentCurrency": "GBP",            "stubType": "None",            "scheduleType": "FixedSchedule"          }        ],        "instrumentType": "FlexibleLoan"      },      "state": "Active",      "assetClass": "Credit",      "domCcy": "GBP",      "relationships": [],    }  },  "staged": {},  "failed": {},   ... } ``` ## Establishing a position Unlike most instrument types, LUSID does not use the number of units held in a `FlexibleLoan` instrument in a portfolio to determine interest payments or present value. Instead, calculations are driven by the outstanding balance. This means you can choose whether to establish a holding with a static number of units, or rather dynamically sync the number of units to the balance. The method you choose determines how you should establish the holding. Static holding unitsDynamic holding units Load two sequential transactions into LUSID: | | [Transaction](/v1/docs/how-do-i-create-or-update-a-transaction) characteristics | [Transaction type](https://support.lusid.com/docs/how-do-i-create-a-transaction-type) characteristics | | --- | --- | --- | | **Transaction #1** | Units: `1` (or any other number you want to hold) Price: `0` Total consideration: `0` | Movement #1: - Movement type: `StockMovement` - Direction: `1` - Side: `Side1` | | **Transaction #2** | Units: Price: `1` Total consideration: | Movement #1: - Movement type: `BalanceAdjustment` - Direction: `1` - Side: : - Security: `Txn:LusidInstrumentId` - Currency: `Txn:TradeCurrency` - Rate: `Txn:TradeToPortfolioRate` - Units: `0` - Amount: `Txn:TotalConsideration` Movement #2: - Movement type: `CashCommitment` - Direction: `-1` - Side: `Side2` | Load a single transaction into LUSID: | | [Transaction](/v1/docs/how-do-i-create-or-update-a-transaction) characteristics | [Transaction type](https://support.lusid.com/docs/how-do-i-create-a-transaction-type) characteristics | | --- | --- | --- | | **Transaction #1** | Units: Price: `1` Total consideration: | Movement #1: - Movement type: `BalanceAdjustment` - Direction: `1` - Side: : - Security: `Txn:LusidInstrumentId` - Currency: `Txn:TradeCurrency` - Rate: `Txn:TradeToPortfolioRate` - Units: `0` - Amount: `Txn:TotalConsideration` Movement #2: - Movement type: `StockMovement` - Direction: `1` - Side: `Side1` Movement #3: - Movement type: `CashCommitment` - Direction: `-1` - Side: `Side2` | ### Confirming positions on the settlement date Navigate to **Portfolio Management > Holdings** in the LUSID web app to call the [GetHoldings](https://www.lusid.com/docs/api/lusid/endpoints/transaction-portfolios/GetHoldings/) API on the settlement date and examine the number of units held and the cost. Static holding unitsDynamic holding units In this example, the number of units is fixed at 1 and the cost is £0, despite drawing £100 from the loan facility: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-2ATDD2YJ.png?sv=2026-02-06&spr=https&st=2026-11-09T06%3A14%3A33Z&se=2026-11-09T07%3A14%3A33Z&sr=c&sp=r&sig=SFxPVMwTqKEPx7UhKIJbAKmppQrtvwbRpiWsNPLebec%3D) In this example, the number of units and the cost is set to the amount drawn from the loan facility, £100: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-RYYGSYKR.png?sv=2026-02-06&spr=https&st=2026-11-09T06%3A14%3A33Z&se=2026-11-09T07%3A14%3A33Z&sr=c&sp=r&sig=SFxPVMwTqKEPx7UhKIJbAKmppQrtvwbRpiWsNPLebec%3D) ### Auditing LUSID’s calculations of transaction amounts Navigate to **Portfolio Management > Transactions** in **Output** mode to call the [BuildTransactions](https://www.lusid.com/docs/api/lusid/endpoints/transaction-portfolios/BuildTransactions/) API with a suitable window to examine the output transactions that generated these holdings. Static holding unitsDynamic holding units Two output transactions are generated: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-VVAUYGLJ.png?sv=2026-02-06&spr=https&st=2026-11-09T06%3A14%3A33Z&se=2026-11-09T07%3A14%3A33Z&sr=c&sp=r&sig=SFxPVMwTqKEPx7UhKIJbAKmppQrtvwbRpiWsNPLebec%3D) A single output transaction is generated: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-VEZZHTE6.png?sv=2026-02-06&spr=https&st=2026-11-09T06%3A14%3A33Z&se=2026-11-09T07%3A14%3A33Z&sr=c&sp=r&sig=SFxPVMwTqKEPx7UhKIJbAKmppQrtvwbRpiWsNPLebec%3D) ## Valuing your position To value your position, work through our [valuation checklist](/v1/docs/valuation-checklist). Note the following: - No market data is required. - The only valid pricing model is the dedicated `FlexibleLoanPricer`. - The most useful metric to report is `Holding/Balance`. [Create a recipe](/v1/docs/how-do-i-create-or-generate-a-recipe) as follows: ```json curl -X POST 'https://mydomain.lusid.com/api/api/recipes'  -H 'Content-Type: application/json-patch+json'  -H 'Authorization: Bearer myAPIAccessToken'  -d '{  "configurationRecipe": {    "scope": "MyRecipes",    "code": "MyBasicRecipe",    "market": {      "marketRules": []    },    "pricing": {      "modelRules": [        {          "instrumentType": "FlexibleLoan",          "modelName": "FlexibleLoanPricer"        }      ]    }  } }' ``` You can then [generate a valuation report](/v1/docs/how-do-i-perform-a-valuation) with appropriate metrics, for example: Static holding unitsDynamic holding units Holding units and holding balance are not in sync: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-NFVN4GUB.png?sv=2026-02-06&spr=https&st=2026-11-09T06%3A14%3A33Z&se=2026-11-09T07%3A14%3A33Z&sr=c&sp=r&sig=SFxPVMwTqKEPx7UhKIJbAKmppQrtvwbRpiWsNPLebec%3D) Holding units and holding balance are in sync: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-2ZA0UBXG.png?sv=2026-02-06&spr=https&st=2026-11-09T06%3A14%3A33Z&se=2026-11-09T07%3A14%3A33Z&sr=c&sp=r&sig=SFxPVMwTqKEPx7UhKIJbAKmppQrtvwbRpiWsNPLebec%3D)