The field-capture service turns structured pole observations from drone platforms, photogrammetry pipelines, LIDAR processors, and mobile field-survey apps into a Universal Pole Model document. It’s the parser that exists for everything that isn’t SPIDA, O-Calc, or PLS.
If your capture platform exports per-pole JSON, CSV, or a feature-layer style payload, you can usually map it straight in.
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 /ingest
Ingest one pole’s worth of capture data and return a UPM document.
curl https://$VERTICAL_AI_BASE_URL/ingest \
-H "Authorization: Bearer $VERTICAL_AI_KEY" \
-H "Content-Type: application/json" \
-d '{
"source": "drone | photogrammetry | lidar | field-survey",
"pole": {
"external_id": "POLE-12345",
"location": { "lat": 38.5816, "lon": -121.4944 },
"height_ft": 45,
"class": "3",
"species": "DOUGLAS_FIR"
},
"attachments": [
{ "type": "primary", "height_ft": 38.5, "direction_deg": 90 },
{ "type": "neutral", "height_ft": 32.0, "direction_deg": 90 },
{ "type": "comm", "height_ft": 22.0, "direction_deg": 90, "owner": "telco-x" }
],
"framing_hint": "horizontal | vertical | triangular | unknown"
}'
The service infers crossarm groupings, insulator types, and circuit voltages from the attachment list and any framing hint you provide, then writes the result into the canonical UPM shape.
POST /ingest/batch
Same payload, repeated. Returns a UPM per pole keyed by your external_id.
POST /enrich
Take a partial UPM (for example, one with attachments but no load_case) and fill in everything that can be derived: setting depth from ANSI tables, load case from elevation, soil class from USDA NRCS, weather state from the local design district. Use this when your capture pipeline produces geometry but not engineering inputs.
Coverage notes
- Geometry first: the service prioritizes getting heights, classes, and attachment locations right. Equipment type guesses (which transformer model, which insulator catalog entry) default to generic placeholders that can be refined on the UI or via subsequent edits.
- Voltage inference uses both the declared attachment type and any communicating circuits already on the pole. When ambiguous, it tags the attachment
voltage_class: unknownrather than guessing. - Owner tags flow through. If your capture data records the owning utility per attachment, joint-use workflows downstream will pick that up automatically.
See also
- Universal Pole Model → — what the service produces
- Integrations → — partner categories we’re actively building toward
- Clearance API → — first analyzer to run on a fresh ingest