Multifamily development underwriting — construction to hold to exit
Multifamily development underwriting — construction to hold to exit. Models construction draws (S-curve or straight-line), capitalized interest, lease-up ramp, construction-to-perm refi, and hold period returns. Returns development yield on cost, spread to ca…
by financial-analyst.ai · discovered, not yet claimed by its owner · updated 2026-10-04
Mirrored from Coinbase's public x402 Bazaar. The description is the provider's own text and has not been reviewed here; the payment requirements are copied as published.
What it does
Multifamily development underwriting — construction to hold to exit. Models construction draws (S-curve or straight-line), capitalized interest, lease-up ramp, construction-to-perm refi, and hold period returns. Returns development yield on cost, spread to cap rate, profit on cost, IRR and MOIC.
Tags: finance · private-equity · real-estate · capital-markets · bazaar
Call contract
- Method
- POST
- Input
- json
- Output
- json
- Last paid call
- 2026-10-04
{
"address": "1200 North Loop Blvd, Minneapolis, MN",
"construction_ltc": 0.65,
"construction_months": 24,
"construction_rate": 0.085,
"draw_schedule": "s_curve",
"exit_cap_rate": 0.055,
"hard_costs": 14000000,
"hold_years": 5,
"land_cost": 2000000,
"perm_ltv": 0.7,
"perm_rate": 0.065,
"soft_costs": 2500000,
"stabilized_cap_rate": 0.055,
"unit_types": [
{
"count": 40,
"label": "1BR",
"monthly_rent": 1800
},
{
"count": 20,
"label": "2BR",
"monthly_rent": 2300
}
]
}{
"development_metrics": {
"development_yield_pct": "5.21%",
"profit_on_cost_pct": "-5.3%",
"spread_to_cap_bps": "-29bps"
},
"returns": {
"irr_pct": "12.4%",
"moic": 1.85
}
}Use with an agent
- Discover. Agents find this listing with
GET https://bazaar.saylorinnovations.com/discovery/search?query=…, the MCP toolsearch_resources, or/discovery/resources. - Inspect. Fetch
/resources/54210.jsonfor the price and payment options. - Pay. Call
GET https://financial-analyst.ai/mf-dev/underwrite. The provider answers402with its payment requirements. An x402 client signs one of the options below and retries withPAYMENT-SIGNATURE. - Execute. The provider returns
200with the data. Agent Bazaar is not in the request path and never sees your payment.
For humans
You don't need an account or an API key; you need a wallet holding a small amount of USDC on Base, and an x402-capable client (see the examples below). Call the endpoint unpaid first to see exactly what it asks for.
Pricing & payment
- Price
- $2 / request
- Protocol
- x402 v2
- Auth
- No account or API key. Pay per request.
- Networks
- Base
- Demand
- 1 calls · 1 unique payers in 30d (public x402 Bazaar data)
x402 payment requirements
| Scheme | Network | Asset | Amount | Pay to | Timeout |
|---|---|---|---|---|---|
| exact | Base eip155:8453 | USDC | $2 | 0xDA158f96C7d02e787EC75858d108366BDa6aAeb3 | 300s |
accepts[] (raw JSON)
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0xDA158f96C7d02e787EC75858d108366BDa6aAeb3",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "2000000",
"amountUsd": 2,
"maxTimeoutSeconds": 300
}
]Schemas
Output schema (JSON Schema)
{
"example": {
"development_metrics": {
"development_yield_pct": "5.21%",
"profit_on_cost_pct": "-5.3%",
"spread_to_cap_bps": "-29bps"
},
"returns": {
"irr_pct": "12.4%",
"moic": 1.85
}
},
"type": "json"
}Example shape — generated from the schema, not a captured live response
{
"development_metrics": {
"development_yield_pct": "5.21%",
"profit_on_cost_pct": "-5.3%",
"spread_to_cap_bps": "-29bps"
},
"returns": {
"irr_pct": "12.4%",
"moic": 1.85
}
}Examples
curl -X POST 'https://financial-analyst.ai/mf-dev/underwrite' -H 'Content-Type: application/json' --data '{"address":"1200 North Loop Blvd, Minneapolis, MN","construction_ltc":0.65,"construction_months":24,"construction_rate":0.085,"draw_schedule":"s_curve","exit_cap_rate":0.055,"hard_costs":14000000,"hold_years":5,"land_cost":2000000,"perm_ltv":0.7,"perm_rate":0.065,"soft_costs":2500000,"stabilized_cap_rate":0.055,"unit_types":[{"count":40,"label":"1BR","monthly_rent":1800},{"count":20,"label":"2BR","monthly_rent":2300}]}'
# -> 402 Payment Required; read PAYMENT-REQUIRED
# retry the identical request with PAYMENT-SIGNATUREconst res = await fetch("https://financial-analyst.ai/mf-dev/underwrite", {
"method": "POST",
"headers": {
"content-type": "application/json"
},
"body": "{\"address\":\"1200 North Loop Blvd, Minneapolis, MN\",\"construction_ltc\":0.65,\"construction_months\":24,\"construction_rate\":0.085,\"draw_schedule\":\"s_curve\",\"exit_cap_rate\":0.055,\"hard_costs\":14000000,\"hold_years\":5,\"land_cost\":2000000,\"perm_ltv\":0.7,\"perm_rate\":0.065,\"soft_costs\":2500000,\"stabilized_cap_rate\":0.055,\"unit_types\":[{\"count\":40,\"label\":\"1BR\",\"monthly_rent\":1800},{\"count\":20,\"label\":\"2BR\",\"monthly_rent\":2300}]}"
});
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}import httpx
import json
res = httpx.request("POST", "https://financial-analyst.ai/mf-dev/underwrite", json=json.loads("{\"address\":\"1200 North Loop Blvd, Minneapolis, MN\",\"construction_ltc\":0.65,\"construction_months\":24,\"construction_rate\":0.085,\"draw_schedule\":\"s_curve\",\"exit_cap_rate\":0.055,\"hard_costs\":14000000,\"hold_years\":5,\"land_cost\":2000000,\"perm_ltv\":0.7,\"perm_rate\":0.065,\"soft_costs\":2500000,\"stabilized_cap_rate\":0.055,\"unit_types\":[{\"count\":40,\"label\":\"1BR\",\"monthly_rent\":1800},{\"count\":20,\"label\":\"2BR\",\"monthly_rent\":2300}]}"))
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerDetails
- Provider
- financial-analyst.ai
- Endpoint
- https://financial-analyst.ai/mf-dev/underwrite
- Machine-readable
/resources/54210.json