openapi: 3.2.0 info: title: SCE DRPEP ArcGIS REST Services Query API version: '11.1' summary: Anonymous, key-free Esri ArcGIS REST interface behind Southern California Edison's Distribution Resources Plan External Portal (DRPEP). description: 'Machine-readable description of the anonymous grid-data API that Southern California Edison serves at `drpep.sce.com`. SCE publishes **no** OpenAPI, no developer portal, and no written API reference for this surface; this document was generated by API Evangelist from live, unauthenticated probes of the service itself (ArcGIS Enterprise 11.1 REST, `f=json`) on 2026-07-27 and from the service, layer, and field descriptors saved verbatim under `arcgis/` in this repository. Every path, parameter, and example below was observed answering anonymously with HTTP 200 - nothing here is aspirational. The catalog exposes 15 hosted FeatureServers covering 47 feature layers and 11 tables: Integration Capacity Analysis (ICA) circuit segments and their generation/load constraint layers, distribution circuits, substations, the Distribution Deferral Opportunity Report (DDOR), the Grid Needs Assessment (GNA), Locational Net Benefit Analysis (LNBA), Public Safety Power Shutoff (PSPS) boundaries, CPUC fire-threat tiers, transmission projects, available-load and subtransmission heat maps, and load-growth penetration. The ICA circuit-segment layer alone answers 676,467 features. Read-only: every hosted service advertises `capabilities: Query` (DRP_Transmission_Projects also allows `Extract`). There is no write surface, no API key, and no rate-limit header. The sibling `Utilities` folder on the same server is NOT open - it returns `{"error":{"code":499,"message":"Token Required"}}`. This spec does not cover SCE Green Button Connect My Data. That interface is real and mandated by CPUC tariff Rule 26, but SCE discloses no base URI, endpoint, or scope publicly; see `authentication/` and the repository review for what is actually known.' termsOfService: https://www.sce.com/terms-conditions contact: name: API Evangelist (generator of this description, not the API operator) url: https://apievangelist.com x-generated-by: api-evangelist enrichment pipeline x-generated-on: '2026-07-27' x-provenance: api-evangelist-generated from live anonymous probes; NOT published by Southern California Edison x-source-probes: - https://drpep.sce.com/arcgis_server/rest/info?f=json - https://drpep.sce.com/arcgis_server/rest/services?f=json - https://drpep.sce.com/arcgis_server/rest/services/Hosted?f=json - https://drpep.sce.com/arcgis_server/rest/services/Hosted/ICA_Layer/FeatureServer?f=json - https://drpep.sce.com/arcgis_server/rest/services/Hosted/ICA_Layer/FeatureServer/0?f=json - https://drpep.sce.com/arcgis_server/rest/services/Hosted/ICA_Layer/FeatureServer/0/query?where=1%3D1&returnCountOnly=true&f=json servers: - url: https://drpep.sce.com description: SCE Distribution Resources Plan External Portal (production, anonymous) tags: - name: Query description: Attribute and spatial queries against a feature layer or table. paths: /arcgis_server/rest/services/Hosted/{serviceName}/FeatureServer/{layerId}/query: get: operationId: queryFeatureLayer tags: - Query summary: Query features from a layer or table description: 'The workhorse operation. Runs a SQL-92 attribute filter and/or a spatial filter against one layer and returns matching features as Esri JSON (`f=json`) or GeoJSON (`f=geojson`, verified working). Paging is offset-based via `resultOffset` + `resultRecordCount`; when a response is truncated the body carries `exceededTransferLimit: true` and the caller must page. Errors are returned with HTTP 200 and an `error` envelope, not an HTTP error status.' parameters: - name: serviceName in: path required: true description: Name of a hosted feature service, as returned by `listHostedServices`. schema: type: string enum: - AVL_LOAD_CAP_TOGGLE - AVL_LOAD_HEAT_MAP_TOGGLE - DDOR_Layer - DRP_PSPS_Layer - DRP_ScreenL_08202021 - DRP_Transmission_Projects - Distribution_circuits - Firemap - GNA_Layer - ICA_Layer - ICA_Tables - LNBA_Layer - LOAD_GROWTH_PEN_HTMAP - MGEP_AVL_LOAD_HEAT_MAP - SUBTRANS_HEATMAP example: ICA_Layer - name: layerId in: path required: true description: Zero-based id of a layer or table inside the feature service, as returned by `getFeatureService`. See `x-drpep-inventory` in this document for the full 58-entry layer/table map. schema: type: integer minimum: 0 example: 0 - name: where in: query required: false description: SQL-92 WHERE clause applied to the layer attributes. Use `1=1` to select everything. A malformed clause returns HTTP 200 with an ArcGIS error envelope (code 500, 'Syntax error'). schema: type: string default: 1=1 example: circuit_name = 'Acapulco' - name: objectIds in: query required: false description: Comma-separated list of ObjectIDs to fetch instead of a where clause. schema: type: string - name: geometry in: query required: false description: Geometry used to spatially filter the layer, in the format implied by geometryType (e.g. an envelope `xmin,ymin,xmax,ymax`). schema: type: string - name: geometryType in: query required: false description: Type of the geometry filter. schema: type: string enum: - esriGeometryPoint - esriGeometryMultipoint - esriGeometryPolyline - esriGeometryPolygon - esriGeometryEnvelope - name: spatialRel in: query required: false description: Spatial relationship applied between the input geometry and the layer geometry. schema: type: string enum: - esriSpatialRelIntersects - esriSpatialRelContains - esriSpatialRelCrosses - esriSpatialRelWithin - esriSpatialRelTouches - esriSpatialRelOverlaps - esriSpatialRelEnvelopeIntersects default: esriSpatialRelIntersects - name: inSR in: query required: false description: Spatial reference of the input geometry (WKID). schema: type: string example: '4326' - name: outSR in: query required: false description: Spatial reference the returned geometry is projected into (WKID). schema: type: string example: '4326' - name: outFields in: query required: false description: Comma-separated attribute list to return, or `*` for all. Field names come from the layer descriptor. schema: type: string default: '*' example: circuit_name,ica_overall_pv - name: returnGeometry in: query required: false description: Whether to include geometry with each feature. Set false for attribute-only pulls. schema: type: boolean default: true - name: returnCountOnly in: query required: false description: 'Return only the matching feature count. Verified: `where=1=1&returnCountOnly=true` on ICA - Circuit Segments returned 676,467.' schema: type: boolean default: false - name: returnIdsOnly in: query required: false description: Return only the matching ObjectIDs - the standard way to page a layer larger than maxRecordCount. schema: type: boolean default: false - name: orderByFields in: query required: false description: Comma-separated ORDER BY expression. Supported (supportsOrderBy is true on these layers). schema: type: string - name: groupByFieldsForStatistics in: query required: false description: Fields to group by when computing outStatistics. schema: type: string - name: outStatistics in: query required: false description: JSON array of statistic definitions (count/sum/min/max/avg/stddev). Supported (supportsStatistics is true). schema: type: string - name: resultOffset in: query required: false description: Zero-based offset for pagination. Supported (supportsPagination is true). schema: type: integer minimum: 0 - name: resultRecordCount in: query required: false description: Maximum number of features to return in this page; capped by the layer maxRecordCount (2,000 or 5,000 on these services). schema: type: integer minimum: 1 - name: returnDistinctValues in: query required: false description: Return distinct values for the requested outFields (supportsDistinct is true). schema: type: boolean default: false - name: resultType in: query required: false description: Query result hint. schema: type: string enum: - none - standard - tile - name: f in: query required: false description: Response format. `json` (Esri JSON), `pjson` (pretty JSON), `geojson` (GeoJSON - verified supported on hosted feature layers), or `html` (the default ArcGIS REST Services Directory page). Always send `f=json` for machine use; without it the service returns HTML. schema: type: string enum: - json - pjson - geojson - html default: html example: json responses: '200': description: A feature set, a count, an id list, or an ArcGIS error envelope - all with HTTP 200. content: application/json: schema: oneOf: - $ref: '#/components/schemas/FeatureSet' - $ref: '#/components/schemas/CountResult' - $ref: '#/components/schemas/ErrorEnvelope' examples: count: summary: returnCountOnly on ICA - Circuit Segments (verified 2026-07-27) value: count: 676467 featureSet: summary: One ICA circuit segment, attributes only (verified 2026-07-27) value: features: - attributes: circuit_name: Acapulco ica_overall_pv: 0 exceededTransferLimit: true objectIdFieldName: objectid fields: - name: circuit_name alias: Circuit Name type: esriFieldTypeString length: 50 - name: ica_overall_pv alias: Photovoltaic Static Grid type: esriFieldTypeDouble error: summary: Malformed where clause (verified 2026-07-27) value: error: code: 500 message: Syntax error []. details: [] application/geo+json: schema: type: object description: GeoJSON FeatureCollection, returned when f=geojson. components: schemas: ErrorEnvelope: type: object description: ArcGIS error envelope. Returned with HTTP 200; the transport status is not the error signal. properties: error: type: object properties: code: type: integer examples: - 400 - 404 - 498 - 499 - 500 message: type: string messageCode: type: string details: type: array items: type: string Field: type: object properties: name: type: string alias: type: string type: type: string description: Esri field type, e.g. esriFieldTypeString. length: type: integer FeatureSet: type: object description: Esri JSON feature set returned by a query. properties: objectIdFieldName: type: string globalIdFieldName: type: string geometryType: type: string spatialReference: type: object fields: type: array items: $ref: '#/components/schemas/Field' exceededTransferLimit: type: boolean description: True when the result was truncated at maxRecordCount - page with resultOffset. features: type: array items: type: object properties: attributes: type: object geometry: type: object CountResult: type: object properties: count: type: integer externalDocs: description: DRPEP portal (Esri Experience Builder app over these services) url: https://drpep.sce.com/drpep/ x-drpep-inventory: - service: AVL_LOAD_CAP_TOGGLE id: 0 name: AVL_LOAD_CAP_FULL_SUBMITTAL kind: layer geometryType: esriGeometryPolyline fieldCount: 128 - service: AVL_LOAD_CAP_TOGGLE id: 1 name: AVL_LOAD_CAP_FULL_AND_PARTIAL_SUBMITTAL kind: layer geometryType: esriGeometryPolyline fieldCount: 128 - service: AVL_LOAD_HEAT_MAP_TOGGLE id: 0 name: GRID_RANK_AGGR_FULL kind: layer geometryType: esriGeometryPolygon fieldCount: 6 - service: AVL_LOAD_HEAT_MAP_TOGGLE id: 1 name: GRID_RANK_AGGR_FULL_PARTIAL kind: layer geometryType: esriGeometryPolygon fieldCount: 6 - service: DDOR_Layer id: 0 name: DDOR Substations kind: layer geometryType: esriGeometryPoint fieldCount: 33 - service: DDOR_Layer id: 1 name: DDOR Subtransmission kind: layer geometryType: esriGeometryPolyline fieldCount: 33 - service: DDOR_Layer id: 2 name: DDOR - Circuits kind: layer geometryType: esriGeometryPolyline fieldCount: 36 - service: DDOR_Layer id: 3 name: DDOR FGDB DATE TIME kind: table geometryType: null fieldCount: 3 - service: DRP_PSPS_Layer id: 0 name: PSPS_Subtransmission kind: layer geometryType: esriGeometryPolyline fieldCount: 14 - service: DRP_PSPS_Layer id: 1 name: PSPS_Circuit kind: layer geometryType: esriGeometryPolyline fieldCount: 16 - service: DRP_ScreenL_08202021 id: 0 name: Sheet1 kind: table geometryType: null fieldCount: 3 - service: DRP_Transmission_Projects id: 0 name: CAISO_APPROVED_POLYGON kind: layer geometryType: esriGeometryPolygon fieldCount: 16 - service: DRP_Transmission_Projects id: 1 name: UTILITY_APPROVED_POLYGON kind: layer geometryType: esriGeometryPolygon fieldCount: 16 - service: DRP_Transmission_Projects id: 2 name: CPUC_APPROVED_POLYGON kind: layer geometryType: esriGeometryPolygon fieldCount: 16 - service: Distribution_circuits id: 0 name: Distribution Circuits kind: layer geometryType: esriGeometryPolyline fieldCount: 11 - service: Firemap id: 0 name: Tree_Mortality___Tier_1 kind: layer geometryType: esriGeometryPolygon fieldCount: 10 - service: Firemap id: 1 name: CPUC_Fire_Threat_Areas____Tier_2___Elevated kind: layer geometryType: esriGeometryPolygon fieldCount: 10 - service: Firemap id: 2 name: CPUC_Fire_Threat_Areas____Tier_3___Extreme kind: layer geometryType: esriGeometryPolygon fieldCount: 10 - service: GNA_Layer id: 0 name: GNA Substations kind: layer geometryType: esriGeometryPoint fieldCount: 31 - service: GNA_Layer id: 1 name: GNA Subtransmission kind: layer geometryType: esriGeometryPolyline fieldCount: 25 - service: GNA_Layer id: 2 name: GNA - Circuits kind: layer geometryType: esriGeometryPolyline fieldCount: 39 - service: GNA_Layer id: 3 name: Circuit Level Planning Assumptions kind: table geometryType: null fieldCount: 23 - service: GNA_Layer id: 4 name: GNA FGDB DATE TIME kind: table geometryType: null fieldCount: 3 - service: GNA_Layer id: 5 name: Substation Level Planning Assumptions kind: table geometryType: null fieldCount: 20 - service: ICA_Layer id: 0 name: ICA - Circuit Segments kind: layer geometryType: esriGeometryPolyline fieldCount: 29 - service: ICA_Layer id: 1 name: ICA - Circuit Segments, Non-3 Phase kind: layer geometryType: esriGeometryPolyline fieldCount: 16 - service: ICA_Layer id: 2 name: ICA - Generation Op Flex kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 3 name: ICA - Generation Protection kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 4 name: ICA - Generation Steady State Voltage kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 5 name: ICA - Generation Thermal kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 6 name: ICA - Generation Voltage Variation kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 7 name: ICA - Load Steady State Voltage kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 8 name: ICA - Load Thermal kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 9 name: ICA - Load Voltage Variation kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 10 name: ICA - Solar Op Flex kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 11 name: ICA - Solar PV Static Grid kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 12 name: ICA - Unavailable Circuit Segments kind: layer geometryType: esriGeometryPolyline fieldCount: 8 - service: ICA_Layer id: 13 name: ICA - Uniform Generation Op Flex kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 14 name: ICA - Uniform Generation Static Grid kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 15 name: ICA - Uniform Load Static Grid kind: layer geometryType: esriGeometryPolyline fieldCount: 17 - service: ICA_Layer id: 16 name: Substations kind: layer geometryType: esriGeometryPoint fieldCount: 14 - service: ICA_Layer id: 17 name: RAM - Circuits kind: layer geometryType: esriGeometryPolyline fieldCount: 16 - service: ICA_Layer id: 18 name: Transmission Circuits kind: layer geometryType: esriGeometryPolyline fieldCount: 6 - service: ICA_Layer id: 19 name: SCE Service Territory kind: layer geometryType: esriGeometryPolygon fieldCount: 9 - service: ICA_Tables id: 0 name: DRPEP_FGDB_DATE_TIME kind: table geometryType: null fieldCount: 3 - service: ICA_Tables id: 1 name: Historical Circuit Load Profile kind: table geometryType: null fieldCount: 12 - service: ICA_Tables id: 2 name: Historical Substation Load Profile kind: table geometryType: null fieldCount: 9 - service: ICA_Tables id: 3 name: ICA Single Consolidated Table kind: table geometryType: null fieldCount: 26 - service: ICA_Tables id: 4 name: Forecasted Circuit Load Profile kind: table geometryType: null fieldCount: 12 - service: LNBA_Layer id: 0 name: DER Growth Scenario, Planning kind: layer geometryType: esriGeometryPolyline fieldCount: 10 - service: LNBA_Layer id: 1 name: LNBA Short-term, Planning kind: layer geometryType: esriGeometryPolyline fieldCount: 23 - service: LNBA_Layer id: 2 name: LNBA Mid-term, Planning kind: layer geometryType: esriGeometryPolyline fieldCount: 23 - service: LNBA_Layer id: 3 name: LNBA Long-term, Planning kind: layer geometryType: esriGeometryPolyline fieldCount: 23 - service: LNBA_Layer id: 4 name: LNBA_FGDB_DATE_TIME kind: table geometryType: null fieldCount: 3 - service: LOAD_GROWTH_PEN_HTMAP id: 0 name: GRID_RANK_AGGR kind: layer geometryType: esriGeometryPolygon fieldCount: 5 - service: MGEP_AVL_LOAD_HEAT_MAP id: 0 name: GRID_RANK_AGGR_FULL kind: layer geometryType: esriGeometryPolygon fieldCount: 6 - service: MGEP_AVL_LOAD_HEAT_MAP id: 1 name: GRID_RANK_AGGR_FULL_PARTIAL kind: layer geometryType: esriGeometryPolygon fieldCount: 6 - service: SUBTRANS_HEATMAP id: 0 name: Subtrans_heatmap kind: layer geometryType: esriGeometryPoint fieldCount: 19