02 · Capital Rail

From verified module to rated pool in one API call.

Pool eligible modules. Get a weighted KeyScore. Get an AAA → NR rating. Get a senior / mezzanine / equity tranche breakdown (70 / 20 / 10) ready for securitization. Then book gain-on-sale and servicing revenue.

The eligibility rule

KeyScore ≥65 on the source module = eligible to enter a pool. Below that, the module stays in the registry but gets routed elsewhere (rehab, supplemental QA, scrap).

The rating function

keystone_pool_rating() is a Postgres function that takes the weighted KeyScore across the pool's eligible modules and emits a letter rating:

  • AAA — weighted KeyScore ≥90
  • AA — 85–89
  • A — 80–84
  • BBB — 72–79
  • NR (not rated) — <72

A pool of 2 × KeyScore-92 modules = AAA, $85,968 collateral, securitization-ready.

The pool-summary API

POST /functions/v1/pool-summary returns:

  • rating — AAA / AA / A / BBB / NR
  • eligible_collateral — total dollar value
  • weighted_keyscore — the weighted-by-value KeyScore
  • securitization_ready — boolean
  • tranches — senior 70% / mezz 20% / equity 10%

Revenue flow

Capital Rail revenue is gain-on-sale + servicing: 1.5% gain-on-sale + 0.35% servicing on pools rated BBB or better (KeyScore ≥72). Below that, fee-for-rating only.

Who pays for it

GSEs (Fannie, Freddie), LIHTC syndicators (Boston Capital, RBC, Raymond James AH, Enterprise CHP), debt funds, community development financial institutions, and private credit funds — anyone underwriting a pool of modular collateral and needing a defensible rating.

The pool is rated by the same KeyScore the lender already trusts. No spreadsheet, no manual underwriting, no inconsistency between deals.
Next step

See a live pool rated in 90 seconds.

The sample workspace ships with two pools — McKinney and LAUSD Classrooms — pre-loaded with rated tranches. You can see the API contract end-to-end.