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

Prev Next

You can model certain kinds of loan as instruments of type FlexibleLoan in LUSID. See all supported instruments.

Note: This article does not currently cover a FlexibleLoan instrument linked to a LoanFacility.

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 out according to a payment schedule you define, typically once a month.

Mastering an instrument

There are numerous tools 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 of identifiers, and the facility to store extra information as properties.

Fields in the economic definition object are specific to FlexibleLoan. For more information on these fields, examine the FlexibleLoan schema, or alternatively select FlexibleLoan from the definition dropdown in the UpsertInstruments API reference:

Consider the following call to the UpsertInstruments API to create a loan facility fixed at 5% with interest payments made once per year:

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 the fields, examine the 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 or a single 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 for the instrument.

  • Generates extra fields that are stored as part of the instrument definition and can be filtered on.

  • Supplies default values for fields not explicitly specified in the request:

{
  "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 units held in a FlexibleLoan 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 single fixed unit, or rather dynamically sync the number of units to the balance. The method you choose determines how you should establish the holding.

Load two 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 API on the settlement date and examine the number of units held and the cost.

The number of units is fixed at 1 and the cost is £0, despite drawing (in this case) £100 from the loan facility:

The number of units and the cost is set to the amount drawn from the loan facility, in this case £100:

Auditing LUSID’s calculations of transaction amounts

Navigate to Portfolio Management > Transactions in Output mode to call the BuildTransactions API with a suitable window to examine the output transactions that generated these holdings.

Two output transactions:

One output transaction:

Valuing your position

To value your position, work through our 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 as follows:

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 with appropriate metrics, for example: