The replacement-cost service estimates what it costs to act on a pole — replace it, raise an attachment, swap an insulator, transfer comms. It reads the fix proposals already on a Universal Pole Model (produced by the clearance, classification, and loading analyzers) and returns a costed scope of work.

Direct REST access requires Tier B onboarding. URLs and bearer-token credentials are issued during embedder onboarding — until then, route equivalent calls through the Overhead gateway →. Email hello@epcstudio.io to start.

Endpoints

POST /estimate

Estimate cost for a single pole’s worth of fix proposals.

curl https://$VERTICAL_AI_BASE_URL/estimate \
  -H "Authorization: Bearer $VERTICAL_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "pole_model": { ... },
    "labor_rates": "default | utility-specific",
    "region": "us-west | us-southeast | ..."
  }'

Returns:

{
  "pole_id": "demo-pole-001",
  "scope": [
    { "action": "replace_pole", "from_class": "5", "to_class": "3", "material_usd": 1280, "labor_usd": 1820 },
    { "action": "transfer_comm", "count": 2, "labor_usd": 640 }
  ],
  "totals": { "material_usd": 1280, "labor_usd": 2460, "total_usd": 3740 },
  "confidence": "high | medium | low"
}

POST /estimate/batch

Same shape, repeated. Returns a per-pole estimate keyed by pole_id.

POST /split/cost-causation

Apply FCC §224 cost-causation rules to split the cost across the pole owner and each attacher, based on which finding triggered which work item.

{
  "splits": [
    { "payer": "pole_owner", "usd": 1280, "reason": "end-of-life replacement" },
    { "payer": "telco-x",    "usd": 1820, "reason": "new attachment driving height upgrade" },
    { "payer": "isp-y",      "usd":  640, "reason": "comm transfer" }
  ]
}

This is the call that drives BEAD per-payer appendices.

How rates are set

The default rate book ships with regional defaults appropriate for sandbox use. Production callers usually supply a utility-specific rate book (per-hour labor, per-unit material) — email hello@epcstudio.io to wire one in. The service treats your rate book as input, not as something we configure for you.

See also