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 |
|---|---|
|
|
Lists the models available to you. |
|
|
Describes a model: its inputs, dummies and calibrated value dates. |
|
|
Locates a raw input value within the model's population. |
|
|
Computes a credit spread or equity premium. |
|
|
Computes a probability of default over a horizon. |
Supported Models
|
model |
Description |
Output |
Calculated by |
|---|---|---|---|
|
|
Credit Spread (Project Finance) |
bps |
|
|
|
Credit Spread (Corporate) |
bps |
|
|
|
Credit Spread (Junior) |
bps |
|
|
|
Equity Premia |
decimal, e.g. 0.065 for 6.5% |
|
|
|
Probability of Default (Project Finance) |
probability between 0 and 1 |
|
|
|
Probability of Default (Corporate) |
probability between 0 and 1 |
|
1. List Models
Endpoint
GET /compute-service/v1/factor-pricer
Example
-
Response
{
"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 ModelorGrowth. -
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 inrequiredFactorLoadingsfrom 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
{
"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 andmetadata.valueDateFallbackAppliedis returned astrue. 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. EithercountryorbenchmarkRateOverrideis 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
truewhere they apply to the instrument; omit them (or setfalse) for the base case. At most one sector dummy may be set totrue.
|
model |
Required inputs |
Optional dummies |
|---|---|---|
|
CreditSpreadProj |
|
Sector: |
|
CreditSpreadCorp |
|
Sector: |
|
CreditSpreadJunior |
|
Sector: |
|
EquityPremia |
|
Sector: |
-
-
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
{
"model": "CreditSpreadProj",
"assetClass": "PI",
"valueDate": "2026-06-30",
"country": "GBR",
"factorLoadings": {
"faceValue": 17625000,
"maturity": 20,
"pd": 0.048,
"roads": true
},
"confidenceLevel": 0.95
}
Response
{
"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
confidenceLevelis supplied. -
benchmarkRateUsed / benchmarkRateSource: the benchmark rate applied and where it came from (
"override"whenbenchmarkRateOverridewas 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
horizonStarttohorizonrather than from today, e.g.horizonStart: 5, horizon: 10for default between years 5 and 10. Must be less thanhorizon. -
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 |
|
|
|
CreditRiskCorp |
|
|
-
-
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
{
"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
{
"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 |
Python SDK
The same calculations are available in the sipametrics Python SDK through factor_pricer_calculate and factor_pricer_credit_risk.