Ground-up hotel development underwriting
Ground-up hotel development underwriting. Land + hard costs (S-curve draw) + soft costs + developer fee, funded by a construction loan (LTC) with capitalized interest, refinanced into a permanent loan sized on min(stabilized-value LTV, DSCR) at the CL term. O…
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
Ground-up hotel development underwriting. Land + hard costs (S-curve draw) + soft costs + developer fee, funded by a construction loan (LTC) with capitalized interest, refinanced into a permanent loan sized on min(stabilized-value LTV, DSCR) at the CL term. Occupancy begins the month after construction; the hold is measured from construction end. Returns unlevered and levered project IRR and MOIC. Reconciled to a SHA-pinned Excel model — see /hotel-dev/reconciliation.
Tags: finance · private-equity · real-estate · capital-markets · bazaar
Call contract
- Method
- POST
- Input
- json
- Output
- json
- Last paid call
- 2026-10-04
{
"cl_term_months": 24,
"construction_months": 18,
"developer_fee_pct": 0.02,
"exit_cap_rate": 0.075,
"exit_costs_pct": 0.03,
"hold_years": 5,
"land_cost": 6695000,
"num_keys": 100,
"opex_pct": 0.35,
"other_revenue_pct": 0.15,
"perm_dscr_min": 1.25,
"perm_ltv": 0.65,
"perm_rate": 0.07,
"perm_term_years": 25,
"q1_adr": 195,
"q1_occupancy": 0.55,
"q2_adr": 260,
"q2_occupancy": 0.69,
"q3_adr": 375,
"q3_occupancy": 0.85,
"q4_adr": 310,
"q4_occupancy": 0.59,
"soft_costs": 4515000,
"stabilized_cap_rate": 0.075,
"start_date": "2026-01-01",
"total_hard_costs": 51975000
}{
"debt": {
"construction_loan": 45192956,
"perm_binding_constraint": "LTV",
"perm_loan": 47304469
},
"exit": {
"sale_price": 81910149
},
"summary": {
"levered_irr": 0.1571,
"levered_moic_net": 2,
"total_equity": 24334668,
"unlevered_irr": 0.1082,
"unlevered_moic": 1.69
}
}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/54213.jsonfor the price and payment options. - Pay. Call
GET https://financial-analyst.ai/hotel-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": {
"debt": {
"construction_loan": 45192956,
"perm_binding_constraint": "LTV",
"perm_loan": 47304469
},
"exit": {
"sale_price": 81910149
},
"summary": {
"levered_irr": 0.1571,
"levered_moic_net": 2,
"total_equity": 24334668,
"unlevered_irr": 0.1082,
"unlevered_moic": 1.69
}
},
"type": "json"
}Example shape — generated from the schema, not a captured live response
{
"debt": {
"construction_loan": 45192956,
"perm_binding_constraint": "LTV",
"perm_loan": 47304469
},
"exit": {
"sale_price": 81910149
},
"summary": {
"levered_irr": 0.1571,
"levered_moic_net": 2,
"total_equity": 24334668,
"unlevered_irr": 0.1082,
"unlevered_moic": 1.69
}
}Examples
curl -X POST 'https://financial-analyst.ai/hotel-dev/underwrite' -H 'Content-Type: application/json' --data '{"cl_term_months":24,"construction_months":18,"developer_fee_pct":0.02,"exit_cap_rate":0.075,"exit_costs_pct":0.03,"hold_years":5,"land_cost":6695000,"num_keys":100,"opex_pct":0.35,"other_revenue_pct":0.15,"perm_dscr_min":1.25,"perm_ltv":0.65,"perm_rate":0.07,"perm_term_years":25,"q1_adr":195,"q1_occupancy":0.55,"q2_adr":260,"q2_occupancy":0.69,"q3_adr":375,"q3_occupancy":0.85,"q4_adr":310,"q4_occupancy":0.59,"soft_costs":4515000,"stabilized_cap_rate":0.075,"start_date":"2026-01-01","total_hard_costs":51975000}'
# -> 402 Payment Required; read PAYMENT-REQUIRED
# retry the identical request with PAYMENT-SIGNATUREconst res = await fetch("https://financial-analyst.ai/hotel-dev/underwrite", {
"method": "POST",
"headers": {
"content-type": "application/json"
},
"body": "{\"cl_term_months\":24,\"construction_months\":18,\"developer_fee_pct\":0.02,\"exit_cap_rate\":0.075,\"exit_costs_pct\":0.03,\"hold_years\":5,\"land_cost\":6695000,\"num_keys\":100,\"opex_pct\":0.35,\"other_revenue_pct\":0.15,\"perm_dscr_min\":1.25,\"perm_ltv\":0.65,\"perm_rate\":0.07,\"perm_term_years\":25,\"q1_adr\":195,\"q1_occupancy\":0.55,\"q2_adr\":260,\"q2_occupancy\":0.69,\"q3_adr\":375,\"q3_occupancy\":0.85,\"q4_adr\":310,\"q4_occupancy\":0.59,\"soft_costs\":4515000,\"stabilized_cap_rate\":0.075,\"start_date\":\"2026-01-01\",\"total_hard_costs\":51975000}"
});
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/hotel-dev/underwrite", json=json.loads("{\"cl_term_months\":24,\"construction_months\":18,\"developer_fee_pct\":0.02,\"exit_cap_rate\":0.075,\"exit_costs_pct\":0.03,\"hold_years\":5,\"land_cost\":6695000,\"num_keys\":100,\"opex_pct\":0.35,\"other_revenue_pct\":0.15,\"perm_dscr_min\":1.25,\"perm_ltv\":0.65,\"perm_rate\":0.07,\"perm_term_years\":25,\"q1_adr\":195,\"q1_occupancy\":0.55,\"q2_adr\":260,\"q2_occupancy\":0.69,\"q3_adr\":375,\"q3_occupancy\":0.85,\"q4_adr\":310,\"q4_occupancy\":0.59,\"soft_costs\":4515000,\"stabilized_cap_rate\":0.075,\"start_date\":\"2026-01-01\",\"total_hard_costs\":51975000}"))
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/hotel-dev/underwrite
- Machine-readable
/resources/54213.json