The replacement-planning service operates at the portfolio level — it consumes the costed proposals from many poles at once and produces a phased plan that groups adjacent work, respects budget envelopes, and surfaces the highest-priority fixes first.
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 /plan
Generate a phased replacement plan from a collection of analyzed poles.
curl https://$VERTICAL_AI_BASE_URL/plan \
-H "Authorization: Bearer $VERTICAL_AI_KEY" \
-H "Content-Type: application/json" \
-d '{
"poles": [ ... UPM documents ... ],
"constraints": {
"annual_budget_usd": 2500000,
"phase_count": 3,
"group_radius_ft": 1500
},
"priorities": ["code_violation", "near_term_failure", "joint_use_request"]
}'
Returns a plan with:
- Projects — adjacent poles grouped by
group_radius_ftso a crew can hit them in one mobilization. - Phases — projects bucketed by priority and budget so the customer can fit the plan into an annual capital plan.
- Sequence rationale — why each project sits where it sits (which finding drove it, which constraint pulled it forward or pushed it back).
POST /enrich
Enrich a UPM with the planning-relevant fields the service derives: replacement-priority score, projected replacement year, dependency on neighbor poles (e.g., a span guy that requires the upstream pole to be fixed first).
Inputs that matter
Planning quality scales with input completeness:
- Findings on every pole. Run clearance, loading, and classification first so the planner has something to prioritize.
- Cost estimates. If you’ve already run replacement-cost, the planner uses those numbers; otherwise it falls back to per-action defaults.
- Asset age and condition. If your capture pipeline tagged install year or inspection condition into the UPM
metadatabucket, the planner reads it. Otherwise it relies on findings alone.
See also
- Replacement Cost API → — per-pole cost numbers planning consumes
- Universal Pole Model → — input shape