The loading service is the source of truth for the operating points that drive every other analyzer. Clearance, sag, and span-clearance all pull from it so they agree on grade, district, tension limits, and check temperatures.

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 /grade

Returns the construction grade per NESC Rule 242 / GO-95 Rule 42 / Table 3 for the supplied pole.

POST /district

Returns the loading district (NESC Heavy / Medium / Light / Warm Island) or zone (GO-95 Heavy / Light) from state or elevation. The fallback uses Google Elevation under the hood when only a coordinate is supplied.

POST /tensions

Returns conductor tension limits per NESC Rule 261H, with Aeolian damper flags where applicable.

POST /sag-temps

Returns the sag-check temperatures used by the sag service: NESC Rule 232 and GO-95 Rule 43.3.

POST /load-case-default

Returns a PLA-compatible default load case stub for a given grade + district. Useful when you need a load case to feed back into your PLA tool but don’t have one yet.

POST /anchor-strength/check

Computes the allowable pull-out load for a guy anchor and compares it to the applied guy tension. Backed by three published data sources, with the richer ones taking priority:

  • Discrete plate-anchor table — utility-validated rows keyed on (rod size × soil pair × lead angle × new-vs-in-service), plus a sibling PISA helix table
  • Non-PISA anchor catalog — cross-plate, expanding, swamp, manta-ray, and rock-anchor max-allowable values
  • PISA holding-capacity chart — 8/10/12/14-inch + twin 8/10 helices interpolated against an integer 0-8 soil class, rod-strength capped
{
  "anchor_type": "plate | pisa | cross_plate | expanding | swamp | manta_ray | rock",
  "anchor_size": "16 | MR-2 | 8_dbl | ...",
  "rod_size":    "5/8 | 3/4 | 1 | 1-1/4",
  "soil_class":  "rocky | dry | average | moist | wet_organic",
  "lead_angle_deg": 45,
  "condition":   "new | in_service",
  "guy_tension_lb": 5000
}

Soil class is translated internally to the lookup table’s native scheme — an integer 0-8 numeric class for PISA chart interpolation, an A-E catalog class for the non-PISA catalog, or an A-D paired class for the discrete plate / PISA tables. The response carries allowable_load_lb, applied_load_lb, percent_used, the source the value came from, and a notes[] array citing the matched table row. Falls back to the legacy plate-area × bearing model when no published row matches.

POST /verify

Cross-checks a declared load case against the prescribed rules and returns pass/fail with citation references. Use this before running analysis when the load case came from a third-party file.

curl https://$VERTICAL_AI_BASE_URL/verify \
  -H "Authorization: Bearer $VERTICAL_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "NESC",
    "grade": "B",
    "district": "HEAVY",
    "tensions": {...},
    "temperatures": {...}
  }'

Why this exists

Every utility distribution analysis depends on the same handful of code-aligned numbers. Spreading them across services creates drift — clearance might use Heavy district while sag uses Medium, and the result is a pole that “passes” in one tool and “fails” in another.

The loading API centralizes the math so every analyzer downstream agrees on grade, district, tension, and temperature.

See also