Industrial ground-up development underwriting — construction to hold to exit
Industrial ground-up development underwriting — construction to hold to exit. S-curve hard cost draws, blended LTC construction loan, capitalized interest, per-tenant NNN lease stabilization, perm loan sizing, TI/LC reserves on rollover. Returns yield on cost…
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
Industrial ground-up development underwriting — construction to hold to exit. S-curve hard cost draws, blended LTC construction loan, capitalized interest, per-tenant NNN lease stabilization, perm loan sizing, TI/LC reserves on rollover. Returns yield on cost, spread to cap, 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
{
"cl_advance_rate": 0.65,
"cl_rate": 0.085,
"construction_months": 24,
"developer_fee_pct": 0.02,
"draw_schedule": "s_curve",
"exit_cap_rate": 0.06,
"hard_costs": 52500000,
"hold_years": 5,
"land_cost": 8000000,
"opex_per_sf_yr": 3.5,
"perm_ltv": 0.65,
"perm_rate": 0.065,
"soft_costs": 5250000,
"stabilization_months": 12,
"stabilized_cap_rate": 0.055,
"start_date": "2026-01-01",
"tenants": [
{
"escalator_pct": 0.025,
"label": "Tenant A",
"lease_start_month": 25,
"rent_per_sf_yr": 7.5,
"rentable_sf": 200000,
"term_months": 120
}
],
"total_sf": 350000
}{
"development": {
"dev_yield_on_cost_pct": "6.8%",
"profit_on_cost_pct": "22.7%",
"spread_to_cap_rate_bp": 125
},
"summary": {
"levered_irr_pct": 21.8,
"levered_moic_net": 2.61,
"unlevered_irr_pct": 14.2,
"unlevered_moic": 1.92
}
}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/54212.jsonfor the price and payment options. - Pay. Call
GET https://financial-analyst.ai/industrial-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": {
"dev_yield_on_cost_pct": "6.8%",
"profit_on_cost_pct": "22.7%",
"spread_to_cap_rate_bp": 125
},
"summary": {
"levered_irr_pct": 21.8,
"levered_moic_net": 2.61,
"unlevered_irr_pct": 14.2,
"unlevered_moic": 1.92
}
},
"type": "json"
}Example shape — generated from the schema, not a captured live response
{
"development": {
"dev_yield_on_cost_pct": "6.8%",
"profit_on_cost_pct": "22.7%",
"spread_to_cap_rate_bp": 125
},
"summary": {
"levered_irr_pct": 21.8,
"levered_moic_net": 2.61,
"unlevered_irr_pct": 14.2,
"unlevered_moic": 1.92
}
}Examples
curl -X POST 'https://financial-analyst.ai/industrial-dev/underwrite' -H 'Content-Type: application/json' --data '{"cl_advance_rate":0.65,"cl_rate":0.085,"construction_months":24,"developer_fee_pct":0.02,"draw_schedule":"s_curve","exit_cap_rate":0.06,"hard_costs":52500000,"hold_years":5,"land_cost":8000000,"opex_per_sf_yr":3.5,"perm_ltv":0.65,"perm_rate":0.065,"soft_costs":5250000,"stabilization_months":12,"stabilized_cap_rate":0.055,"start_date":"2026-01-01","tenants":[{"escalator_pct":0.025,"label":"Tenant A","lease_start_month":25,"rent_per_sf_yr":7.5,"rentable_sf":200000,"term_months":120}],"total_sf":350000}'
# -> 402 Payment Required; read PAYMENT-REQUIRED
# retry the identical request with PAYMENT-SIGNATUREconst res = await fetch("https://financial-analyst.ai/industrial-dev/underwrite", {
"method": "POST",
"headers": {
"content-type": "application/json"
},
"body": "{\"cl_advance_rate\":0.65,\"cl_rate\":0.085,\"construction_months\":24,\"developer_fee_pct\":0.02,\"draw_schedule\":\"s_curve\",\"exit_cap_rate\":0.06,\"hard_costs\":52500000,\"hold_years\":5,\"land_cost\":8000000,\"opex_per_sf_yr\":3.5,\"perm_ltv\":0.65,\"perm_rate\":0.065,\"soft_costs\":5250000,\"stabilization_months\":12,\"stabilized_cap_rate\":0.055,\"start_date\":\"2026-01-01\",\"tenants\":[{\"escalator_pct\":0.025,\"label\":\"Tenant A\",\"lease_start_month\":25,\"rent_per_sf_yr\":7.5,\"rentable_sf\":200000,\"term_months\":120}],\"total_sf\":350000}"
});
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/industrial-dev/underwrite", json=json.loads("{\"cl_advance_rate\":0.65,\"cl_rate\":0.085,\"construction_months\":24,\"developer_fee_pct\":0.02,\"draw_schedule\":\"s_curve\",\"exit_cap_rate\":0.06,\"hard_costs\":52500000,\"hold_years\":5,\"land_cost\":8000000,\"opex_per_sf_yr\":3.5,\"perm_ltv\":0.65,\"perm_rate\":0.065,\"soft_costs\":5250000,\"stabilization_months\":12,\"stabilized_cap_rate\":0.055,\"start_date\":\"2026-01-01\",\"tenants\":[{\"escalator_pct\":0.025,\"label\":\"Tenant A\",\"lease_start_month\":25,\"rent_per_sf_yr\":7.5,\"rentable_sf\":200000,\"term_months\":120}],\"total_sf\":350000}"))
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/industrial-dev/underwrite
- Machine-readable
/resources/54212.json