1. Result
The run prices the loan on the yield path at fair-value Level 3. Prices are per 100 of outstanding notional; the dirty price includes 2.0108 of accrued interest. Verified on engine 3.29.0 on 24 October 2026.
| Output | API field | Value |
|---|---|---|
| Present value | pv | $25,332,821.13 |
| Clean price per 100 | price_clean_mid | 99.3205 |
| Accrued per 100 | accrued_per_100 | 2.0108 |
| Dirty price per 100 | price_per_100 | 101.3313 |
| Yield to maturity | yield_to_maturity | 10.3967% |
| Modified duration | modified_duration | 0.9954 |
| DV01 | dv01 | $2,521.56 |
| Expected loss | expected_loss | $143,751.32 |
| Approach | approach_used | yield |
| Fair-value level | fair_value_level_resolved | 3 |
PV splits into interest $2,757,432.63, principal $22,346,957.59, fees $0.00 and recovery $228,430.91.
2. Inputs
Every input is hypothetical. The borrower, the terms and both curves were written for this example and the Verus test suite; they describe no real company and no market observation. Each curve is a set of hand-set pillars dated 1 January 2026, not SOFR or OIS as published on that date.
| Facility | Value |
|---|---|
| Borrower | Hypothetical Borrower (US, Industrials) |
| Ranking | Senior Secured, private |
| Notional | $25,000,000.00 |
| Coupon | SOFR + 500 bps, 100 bps floor, quarterly reset and payment |
| Conventions | ACT/360, NYC calendar, modified following |
| Dates | Originated 15 January 2024; bullet maturity 15 January 2027 |
| Fees | OID 1.0%; upfront 0.5%; exit 0.0% |
| Valuation date | 1 January 2026 |
| Assumption set | Value |
|---|---|
| Spread | Discount margin 500 bps |
| Liquidity haircut | 25 bps, applied to the exit price only, not to PV |
| Credit | Hazard rate 1.5% a year, years 0–5; recovery 65%, received 6 months after default |
| Discount curve (OIS) | 3M 4.30%, 6M 4.30%, 1Y 4.20%, 3Y 4.00%, 5Y 3.80% |
| Index curve (SOFR) | 3M 4.30%, 6M 4.30%, 1Y 4.20%, 3Y 4.00% |
3. Re-run it
Five calls against the Verus API at https://beta.markst.com/api, each with your X-API-Key header. The full reference is at /docs.
POST /dealswith the deal body below. Leavedeal_idempty: Verus assigns one, and an id already in use is refused.metadata.asset_typeis required.POST /deals/{deal_id}/versionsfreezes the deal and returnsdeal_version_id.POST /assumptionsets/snapshot-adhocwith the assumption-set body below returnsassumption_set_version_id.POST /valuation-runswith the run body below returns the figures in section 1. Send nomarket_data_as_of_date: the run must price on the stated curves, and itsbenchmark_curve.sourcereads “assumption set”.POST /analytics/validationwith the same run body returns the ten checks in section 4. The analytics routes need Portfolio Analytics enabled on your account.
Deal
{
"deal_id": "",
"borrower_name": "Hypothetical Borrower",
"currency": "USD",
"jurisdiction": "US",
"sector": "Industrials",
"capital_structure": "Senior Secured",
"deal_type": "PRIVATE",
"origination_date": "2024-01-15",
"maturity_date": "2027-01-15",
"day_count": "ACT/360",
"business_day_convention": "MODFOLLOW",
"payment_calendar": "NYC",
"status": "ACTIVE",
"facility": {
"notional": 25000000,
"rate_type": "FLOATING",
"floating_rate": {
"index": "SOFR",
"spread_bps": 500,
"floor_bps": 100,
"reset_frequency": "QUARTERLY"
},
"interest_payment_frequency": "QUARTERLY",
"fees": { "oid_pct": 1, "upfront_fee_pct": 0.5, "exit_fee_pct": 0 },
"principal_schedule": { "type": "BULLET", "bullet_date": "2027-01-15" }
},
"observations": {
"payment_history": [],
"covenants": []
},
"metadata": { "asset_type": "direct_lending" }
}Assumption set
{
"assumption_set_id": "AS-WORKED-EXAMPLE",
"name": "Worked example (hypothetical)",
"valuation": {
"valuation_method": "DM",
"discount_margin_bps": 500,
"liquidity_haircut_bps": 25,
"ifrs13_level": 3
},
"market": {
"risk_free_curve": {
"curve_id": "ois",
"as_of_date": "2026-01-01",
"pillars": [
{ "tenor": "3M", "rate": 0.043 },
{ "tenor": "6M", "rate": 0.043 },
{ "tenor": "1Y", "rate": 0.042 },
{ "tenor": "3Y", "rate": 0.04 },
{ "tenor": "5Y", "rate": 0.038 }
]
},
"index_curve": {
"curve_id": "sofr",
"as_of_date": "2026-01-01",
"pillars": [
{ "tenor": "3M", "rate": 0.043 },
{ "tenor": "6M", "rate": 0.043 },
{ "tenor": "1Y", "rate": 0.042 },
{ "tenor": "3Y", "rate": 0.04 }
]
}
},
"credit": {
"model": "HAZARD",
"hazard_term": [
{ "start_year": 0, "end_year": 5, "hazard_pa": 0.015 }
],
"recovery_rate": 0.65,
"recovery_lag_months": 6
}
}Run and validation
{
"valuation_date": "2026-01-01",
"deal_version_id": "<deal_version_id from step 2>",
"assumption_set_version_id": "<assumption_set_version_id from step 3>"
}Reproduce it through these REST calls. The value_deal tool in the Verus MCP connector prices a stored deal on the current market environment, not on stated curves, so it is not a reproduction path for this example.
4. Validation on this run
All ten checks of the Verus validation suite pass on this facility. These are automated internal checks; they test that the engine behaves as specified, not that the methodology is right.
| Check | What it tests | Result | Measured |
|---|---|---|---|
| Determinism | Prices the facility twice from identical inputs. PV and price must agree to 1e-10. | PASS | ΔPV 0.00; Δprice 0.000000 |
| PV Positivity | PV of a performing loan is positive. | PASS | PV 25,332,821.13 |
| Price Boundary | Price per 100 lies between 0 and 200. | PASS | Price 101.3313 |
| PV Upper Boundary | PV stays below twice the notional held. | PASS | PV 25,332,821.13 against a 50,000,000.00 limit |
| Expected Loss Non-negative | Expected loss is zero or positive. | PASS | Expected loss 143,751.32 |
| Spread Monotonicity | Widening the effective spread by 100 bps lowers PV. | PASS | PV 25,332,821.13 → 25,081,967.80 (−250,853.33) |
| PD Monotonicity | Doubling the hazard rate does not raise PV. | PASS | PV 25,332,821.13 → 25,191,252.93 (−141,568.20) |
| Recovery Monotonicity | Raising recovery by 20 points does not lower PV. | PASS | Recovery 65% → 85%: PV 25,332,821.13 → 25,403,107.56 (+70,286.43) |
| Cashflow PV Consistency | Cashflow-row PVs sum to the headline PV. On a blended mark the rows tie to the base leg and the weighted legs to the blend. | PASS | Difference 0.00 |
| Component Additivity | Interest, principal, fee and recovery PVs sum to the headline PV. | PASS | Difference 0.00 |
The same suite runs across the golden fixture set on every engine change. The latest results are in the model risk summary, section 5.
5. What this shows, and what it does not
- It shows that the same inputs on the same engine release return the same figures, and that every input setting them is visible in the API.
- It does not show a fair value for any real loan. The inputs are hypothetical. A real mark runs on the client's own terms, curves and credit view, and the client owns it.
- It is not independent validation. Independent model validation of Verus has not yet been performed; see the model risk summary.
- It is dated. The figures were verified on engine 3.29.0 on 24 October 2026. They are frozen in CI: a release that moves them fails until this page is regenerated.
No API key yet? Request access. For how the engine reaches these numbers, see the methodology; for an illustrative walkthrough of a larger unitranche, see the unitranche case study.