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.

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.

Coverage notes

  • Geometry first: the service prioritizes getting heights, classes, and attachment locations right. Equipment type guesses 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: unknown rather 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