2.2.15 Private Infrastructure Factor Pricer

Purpose

To estimate the price of a single private infrastructure instrument from its characteristics, using SIPA’s calibrated factor models. The Factor Pricer returns either:

  • a credit spread (in bps) for a senior project finance, senior corporate or junior loan,

  • an equity risk premium (as a decimal) for an equity investment, or

  • a probability of default over a chosen horizon for a project finance or corporate borrower.

Each estimate can optionally be returned with a confidence interval.

The Factor Pricer is made up of five endpoints:

Endpoint

Use

GET /compute-service/v1/factor-pricer

Lists the models available to you.

GET /compute-service/v1/factor-pricer/{model}

Describes a model: its inputs, dummies and calibrated value dates.

GET /compute-service/v1/factor-pricer/{model}/factor-percentile

Locates a raw input value within the model's population.

POST /compute-service/v1/factor-pricer/calculate

Computes a credit spread or equity premium.

POST /compute-service/v1/factor-pricer/credit-risk

Computes a probability of default over a horizon.

Supported Models

model

Description

Output

Calculated by

CreditSpreadProj

Credit Spread (Project Finance)

bps

/calculate

CreditSpreadCorp

Credit Spread (Corporate)

bps

/calculate

CreditSpreadJunior

Credit Spread (Junior)

bps

/calculate

EquityPremia

Equity Premia

decimal, e.g. 0.065 for 6.5%

/calculate

CreditRiskProj

Probability of Default (Project Finance)

probability between 0 and 1

/credit-risk

CreditRiskCorp

Probability of Default (Corporate)

probability between 0 and 1

/credit-risk


1. List Models

Endpoint

GET /compute-service/v1/factor-pricer

Example

  • Response

JSON
{
  "data": {
    "results": [
      {
        "model": "CreditSpreadProj",
        "displayName": "Credit Spread (Project Finance)",
        "assetClasses": ["PI"],
        "unit": "bps",
        "kind": "linear"
      },
      {
        "model": "CreditRiskProj",
        "displayName": "Probability of Default (Project Finance)",
        "assetClasses": ["PI"],
        "unit": "probability",
        "kind": "creditRisk"
      }
    ]
  }
}

kind indicates which endpoint to call: linear models are calculated by /calculate, creditRisk models by /credit-risk.


2. Model Metadata

Purpose

To find out which inputs a model requires, which dummies it accepts and which value dates it is calibrated at. We recommend calling this before /calculate or /credit-risk.

Endpoint

GET /compute-service/v1/factor-pricer/{model}

Parameters

  • model (string, required, path): One of the supported model names, e.g. CreditSpreadProj.

  • assetClass (string, optional, query): Supported values are: "PI", "PE". Default value is "PI" if omitted.

Response fields

  • requiredFactorLoadings: the continuous inputs you must supply in factorLoadings.

  • dummiesByType: the dummies the model accepts, grouped e.g. by Sector, Business Model or Growth.

  • factors: each variable's description and, for continuous variables, its percentile distribution in the model's population.

  • metadata.calibrationDates: the value dates the model can be calculated at.


3. Factor Percentile

Purpose

To show where a raw input sits within the model's population, e.g. "a senior leverage of 0.55 is the 78th percentile of CreditRiskProj borrowers". No calculation is performed.

Endpoint

GET /compute-service/v1/factor-pricer/{model}/factor-percentile

Parameters

  • model (string, required, path): One of the supported model names.

  • assetClass (string, optional, query): Default value is "PI" if omitted.

  • factor (string, required, query): The variable's name, e.g. SnrLev. Supported values are listed in requiredFactorLoadings from the Model Metadata endpoint.

  • value (float, required, query): The raw input value, in the same units as the matching field in factorLoadings.

Example

GET /compute-service/v1/factor-pricer/CreditRiskProj/factor-percentile?factor=SnrLev&value=0.55

Response

JSON
{
  "data": {
    "model": "CreditRiskProj",
    "assetClass": "PI",
    "factor": "SnrLev",
    "variable": "SnrLev_log1plus",
    "rawValue": 0.55,
    "percentile": 78.4,
    "numObservations": 2723
  }
}

percentile is between 0 and 100. Values outside the population's observed range return 0 or 100.


4. Calculate Credit Spread / Equity Premium

Purpose

To compute a credit spread (bps) or an equity risk premium (decimal) for one instrument, with an optional confidence interval.

Endpoint

POST /compute-service/v1/factor-pricer/calculate

Parameters

  • model (string, required): Supported values are: "CreditSpreadProj", "CreditSpreadCorp", "CreditSpreadJunior", "EquityPremia".

  • assetClass (string, required): Supported values are: "PI", "PE". Only "PI" is currently calibrated.

  • valueDate (date, required): The calibration date to use, e.g. "2026-06-30". Models are calibrated monthly; if the date supplied is not a calibrated date, the latest earlier calibration is used and metadata.valueDateFallbackApplied is returned as true. Calibrated dates can be obtained from the Model Metadata endpoint.

  • factorLoadings (FactorLoadings object, required): The instrument's characteristics. Please refer to the FactorLoadings section below.

  • country (string, optional): 3-letter ISO country code, e.g. "GBR". Used to look up the 3-month risk-free rate at the value date as the benchmark rate. Either country or benchmarkRateOverride is required for models that use a benchmark rate.

  • benchmarkRateOverride (float, optional): Benchmark rate to use instead of the country lookup, as a decimal. Acceptable values include: 0.02 represents 2%.

  • confidenceLevel (float, optional): Confidence level of the interval to return. Acceptable values are between 0 and 1 exclusive, e.g. 0.95 for a 95% interval. No interval is returned if omitted.

  • instrumentName (string, optional): A label for your own reference.

  • FactorLoadings (object) All rates and ratios are decimals, e.g. 0.35 represents 35%. Dummies are true where they apply to the instrument; omit them (or set false) for the base case. At most one sector dummy may be set to true.

model

Required inputs

Optional dummies

CreditSpreadProj

faceValue, maturity, pd

Sector: energyAndWaterResources, environmentalServices, power, roads, windAndSolar

CreditSpreadCorp

faceValue, maturity, pd

Sector: airports, energyAndWaterResources, rail; Business model: merchant

CreditSpreadJunior

faceValue, maturity, pd

Sector: power, rail, renewables, roads, social; Business model: merchant

EquityPremia

investment, leverage, roa, size, termSpread

Sector: airports, energyAndWaterResources, environmentalServices, port, roads, social, windAndSolar; growth

    • faceValue (float): Face value of the loan in absolute currency units, e.g. 17625000.

    • maturity (float): Remaining maturity in years. Must not be negative.

    • pd (float): Probability of default as a decimal between 0 and 1, e.g. 0.048 for 4.8%.

    • investment (float): Investment rate as a decimal, e.g. 0.042 for 4.2%.

    • leverage (float): Leverage as a decimal, e.g. 0.35 for 35%.

    • roa (float): Return on assets as a decimal, e.g. 0.06 for 6%.

    • size (float): Size in absolute currency units.

    • termSpread (float): Term spread as a decimal, e.g. 0.015 for 150bps.

Example

Request

JSON
{
  "model": "CreditSpreadProj",
  "assetClass": "PI",
  "valueDate": "2026-06-30",
  "country": "GBR",
  "factorLoadings": {
    "faceValue": 17625000,
    "maturity": 20,
    "pd": 0.048,
    "roads": true
  },
  "confidenceLevel": 0.95
}

Response

JSON
{
  "data": {
    "results": {
      "predictedValue": 212.4,
      "lowerBound": 188.9,
      "upperBound": 238.7,
      "benchmarkRateUsed": 0.0398,
      "benchmarkRateSource": "3-month risk-free rate (GBR, 2026-06-30)"
    }
  },
  "metadata": {
    "valueDate": "2026-06-30",
    "valueDateFallbackApplied": false
  }
}
  • predictedValue: the estimate, in bps for credit spreads or as a decimal for equity premia.

  • lowerBound / upperBound: returned only when confidenceLevel is supplied.

  • benchmarkRateUsed / benchmarkRateSource: the benchmark rate applied and where it came from ("override" when benchmarkRateOverride was supplied).


5. Calculate Probability of Default

Purpose

To compute the probability that a borrower defaults within a given horizon, with an optional confidence interval.

Endpoint

POST /compute-service/v1/factor-pricer/credit-risk

Parameters

  • model (string, required): Supported values are: "CreditRiskProj", "CreditRiskCorp".

  • assetClass (string, required): Supported values are: "PI", "PE". Only "PI" is currently calibrated.

  • valueDate (date, required): The calibration date to use. Credit risk models have a single calibrated date, which can be obtained from the Model Metadata endpoint. Unlike /calculate, no fallback is applied.

  • horizon (float, required): Horizon in years, e.g. 5 for a five-year probability of default. Must be greater than 0.

  • horizonStart (float, optional): Set to compute the probability of default within the window from horizonStart to horizon rather than from today, e.g. horizonStart: 5, horizon: 10 for default between years 5 and 10. Must be less than horizon.

  • country, benchmarkRateOverride, confidenceLevel, instrumentName: As for the Calculate Credit Spread / Equity Premium endpoint above. For credit risk, the interval covers the uncertainty in the model's fitted coefficients only.

  • factorLoadings (FactorLoadings object, required): The borrower's characteristics.

model

Required inputs

Optional dummies

CreditRiskProj

cfads, cashRatio, quickRatio, remainingTime, roa, snrLev

contracted, developingEconomies

CreditRiskCorp

age, cashRatio, debtToAsset, ebitToTa, interestCoverageRatio, size

merchant

    • cfads (float): Cash flow available for debt service, in absolute currency units.

    • cashRatio (float): Cash and equivalents / current liabilities, e.g. 0.32.

    • quickRatio (float): Quick assets / current liabilities, e.g. 0.92.

    • remainingTime (float): Remaining life of the project in years.

    • roa (float): Return on assets as a decimal, e.g. 0.106 for 10.6%.

    • snrLev (float): Senior leverage as a decimal, e.g. 0.55 for 55%.

    • age (float): Age of the company in years.

    • debtToAsset (float): Debt / total assets as a decimal, e.g. 0.35 for 35%.

    • ebitToTa (float): EBIT / total assets as a decimal, e.g. 0.053 for 5.3%.

    • interestCoverageRatio (float): EBIT / interest expense, as a multiple, e.g. 32.3.

    • size (float): Size in absolute currency units.

Example

Request

JSON
{
  "model": "CreditRiskProj",
  "assetClass": "PI",
  "valueDate": "2026-06-30",
  "horizon": 5,
  "country": "GBR",
  "factorLoadings": {
    "snrLev": 0.55,
    "cashRatio": 0.44,
    "cfads": 35000000,
    "roa": 0.106,
    "remainingTime": 22,
    "quickRatio": 1.52,
    "contracted": true
  },
  "confidenceLevel": 0.95
}

Response

JSON
{
  "data": {
    "results": {
      "probabilityOfDefault": 0.0379,
      "lowerBound": 0.0291,
      "upperBound": 0.0493,
      "benchmarkRateUsed": null,
      "benchmarkRateSource": null
    }
  },
  "metadata": {
    "valueDate": "2026-06-30"
  }
}

probabilityOfDefault: a probability between 0 and 1; 0.0379 is a 3.79% chance of default over the horizon.


Errors

Status

Cause

401

Not authenticated, or your subscription does not cover the requested model.

422

Invalid request, for example: an unsupported model or input; a dummy that does not belong to the model; more than one sector dummy set; a value date the model is not calibrated at; neither country nor benchmarkRateOverride supplied for a model that needs a benchmark rate; or a credit risk model sent to /calculate. The response's detail explains the problem.

Python SDK

The same calculations are available in the sipametrics Python SDK through factor_pricer_calculate and factor_pricer_credit_risk.