The ESRI service is the bridge between an ArcGIS Online feature layer and the Universal Pole Model. It reads poles from a feature layer into UPM documents, and writes analyzed results — findings, replacement priorities, fix proposals — back to the same layer (or a sibling result layer).
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.
Authentication
ESRI calls require both your platform API key and an AGOL token scoped to the target feature layer. Pass the AGOL token in an X-AGOL-Token header.
Endpoints
POST /pull/polygon
Pull every pole feature inside a polygon into UPM documents.
curl https://$VERTICAL_AI_BASE_URL/pull/polygon \
-H "Authorization: Bearer $VERTICAL_AI_KEY" \
-H "X-AGOL-Token: $AGOL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"feature_layer_url": "https://services.arcgis.com/.../FeatureServer/0",
"polygon": { "rings": [[ [lon,lat], [lon,lat], ... ]] },
"attachment_layer_url": "https://services.arcgis.com/.../FeatureServer/1"
}'
Returns a list of UPM documents, one per pole feature inside the polygon, with attachments joined from the attachment layer.
POST /pull/feature
Pull a single feature by objectid or globalid. Same response shape, single-pole.
POST /push/results
Write analyzed results back to a feature layer. Configurable field map — point the request at your layer’s schema and tell the service which UPM finding/proposal fields go into which feature fields.
POST /push/symbols
Push standardized pole and equipment symbols (transformers, switches, risers) into a feature layer so the rendered map matches platform symbology.
Field mapping
The service ships with a default field map for common AGOL pole-attachment templates, but you almost always want to declare your own. Send a field_map object in the request body:
{
"field_map": {
"pole": {
"objectid": "OBJECTID",
"height_ft": "POLE_HEIGHT",
"class": "POLE_CLASS",
"species": "POLE_SPECIES"
},
"attachment": {
"owner": "ATTACH_OWNER",
"height_ft": "ATTACH_HEIGHT",
"type": "ATTACH_TYPE"
},
"result": {
"verdict": "ANALYSIS_VERDICT",
"fix_summary":"FIX_SUMMARY",
"fix_cost": "FIX_COST_USD"
}
}
}
Fields the map doesn’t reference are left alone.
See also
- Universal Pole Model → — what flows in and out
- Field Capture API → — sibling on-ramp for non-GIS data
- Integrations → — GIS partner categories on the roadmap