---
title: "Modelling private credit in LUSID"
slug: "modelling-loan-instruments-in-lusid"
updated: 2026-07-04T14:12:28Z
published: 2026-07-04T14:12:28Z
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 loans 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 you define, 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)

### 

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://<your-domain>.lusid.com/api/api/instruments?scope=mycustominstrscope"
   -H "Content-Type: application/json-patch+json"
   -H "Authorization: Bearer <your-API-access-token>"
   -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 other instrument types, LUSID does not use the number of portfolio units held in a `FlexibleLoan` instrument 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 to establish the holding.

Static holding unitsDynamic holding units

Load two sequential transactions into LUSID:

|  | Transaction characteristics | Transaction type characteristics |
| --- | --- | --- |
| **Transaction #1** | Units: `1` Price: `0` Total consideration: `0` | Movement #1: - Movement type: `StockMovement` - Direction: `1` - Side: `Side1` |
| **Transaction #2** | Units: <the amount to draw> Price: `1` Total consideration: <the amount to draw> | Movement #1: - Movement type: `BalanceAdjustment` - Direction: `1` - Side: <custom side; see below> Movement #2: - Movement type: `CashCommitment` - Direction: `-1` - Side: `Side2` Custom side for `BalanceAdjustment` movement: - Security: `Txn:LusidInstrumentId` - Currency: `Txn:TradeCurrency` - Rate: `Txn:TradeToPortfolioRate` - Units: `0` - Amount: `Txn:TotalConsideration` |

Load a single transaction into LUSID:

|  | Transaction characteristics | Transaction type characteristics |
| --- | --- | --- |
| **Transaction #1** | Units: <the amount to draw> Price: `1` Total consideration: <the amount to draw> | Movement #1: - Movement type: `BalanceAdjustment` - Direction: `1` - Side: <custom side; see below> Movement #2: - Movement type: `StockMovement` - Direction: `1` - Side: `Side1` Movement #3: - Movement type: `CashCommitment` - Direction: `-1` - Side: `Side2` Custom side for `BalanceAdjustment` movement: - Security: `Txn:LusidInstrumentId` - Currency: `Txn:TradeCurrency` - Rate: `Txn:TradeToPortfolioRate` - Units: `0` - Amount: `Txn:TotalConsideration` |

### 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)

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)

### 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)

A single output transaction is generated:

![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-VEZZHTE6.png)

## 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`.

To change the default pricing model, [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)

Holding units and holding balance are in sync:

![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-2ZA0UBXG.png)
