# ATCO > ATCO Ltd. (TSX: ACO.X) is a Calgary, Alberta diversified global corporation and the controlling shareholder of Canadian Utilities Limited. Through ATCO Electric, ATCO Gas, ATCO Pipelines, ATCO EnPower, ATCO Australia and ATCO Energy it operates regulated electricity transmission and distribution, natural gas distribution and transmission, storage/renewables/hydrogen assets, and competitive energy retail. ATCO publishes exactly one public API: ATCO Electric's DER hosting capacity feature service, an anonymously queryable Esri ArcGIS REST feature service with 880,623 feeder segments. There is no developer portal, no API documentation, no OpenAPI from ATCO, and no consumer energy data API of any kind. Generated by the API Evangelist enrichment pipeline on 2026-07-27. ATCO serves no llms.txt of its own — /llms.txt returns 404 on atco.com, electric.atco.com, gas.atco.com and atcoenergy.com. ## What an agent should know first - **One API, completely ungated.** The ATCO Electric Hosting Capacity Feature Service needs no key, token, signup, referer or licence acceptance. `Access-Control-Allow-Origin: *` is returned, so it is directly callable from a browser. - **Errors come back as HTTP 200.** ArcGIS REST returns application errors with status 200 and an `{"error": {"code": ..., "message": ..., "details": [...]}}` body. Checking the HTTP status alone will report every failure as a success — parse the body for an `error` member. - **Always send `f=json`.** Omitting the `f` parameter returns the ArcGIS HTML services-directory page, not JSON. Format is chosen by `f`, not by the Accept header. - **Paginate.** maxRecordCount is 1000. Use `resultOffset` + `resultRecordCount` and keep going while `exceededTransferLimit` is true. Setting `returnGeometry=false` raises the ceiling to 32,000 features per request. - **No consumer data path exists.** There is no API, OAuth flow, consent framework or third-party onboarding for an ATCO customer's usage or billing data. Do not look for one — My Account is a Salesforce CloudCraze human login. ## APIs - [ATCO Electric Hosting Capacity Feature Service](https://services7.arcgis.com/cw2emabghNLkoYlB/arcgis/rest/services/AGO_HostingCapacity/FeatureServer): DER hosting capacity in kW for ATCO Electric's Alberta distribution system. 880,623 polyline feeder segments across 135 substations, from a CYME hosting capacity study loaded 2025-10-31. Fields: FEEDER (circuit), PHASE, SUB_NAME, SUB_NUM, DATELOADED, DER_CAP_KW, DER_CAP_KW1, PROJECT_AREA, Shape__Length. - [Micro-generation page](https://electric.atco.com/en-ca/connections-services/new-connections-changes/micro-generation.html): the ATCO Electric page that links the hosting capacity map. This is what makes it a published ATCO surface rather than a find. - [Connect to the grid](https://electric.atco.com/en-ca/connections-services/new-connections-changes/connect-grid.html): the second on-site link to the same map. - [DER Hosting Capacity Map application](https://atco.maps.arcgis.com/apps/webappviewer/index.html?id=fa9c52c758b64f90ada01c9d27609d8d): the human-facing web app over the feature service. ## Operations - `getFeatureServiceInfo` — `GET /?f=json` — feature service descriptor (capabilities, maxRecordCount, layer list). - `getHostingCapacityLayerInfo` — `GET /0?f=json` — layer 0 descriptor (field definitions, edit dates, query capabilities). - `queryHostingCapacity` — `GET /0/query` — the main read. SQL `where`, spatial filter, `outFields`, `outStatistics`, `returnCountOnly`, `returnDistinctValues`, `resultOffset`/`resultRecordCount`, `f=json|geojson|pbf`. - `queryHostingCapacityByPost` — `POST /0/query` — same parameters, form-encoded, for long where clauses or geometries. Still a read. - `queryTopHostingCapacityFeatures` — `GET /0/queryTopFeatures` — top N features per group. Requires both `topFilter` and `where`. ## Worked examples (all verified anonymously on 2026-07-27) - Total features: `GET /0/query?where=1%3D1&returnCountOnly=true&f=json` → `{"count":880623}` - Segments on one substation: `POST /0/query` with `where=SUB_NAME='BONNYVILLE'&returnCountOnly=true&f=json` → `{"count":34009}` - All substation names: `GET /0/query?where=1%3D1&outFields=SUB_NAME&returnDistinctValues=true&returnGeometry=false&f=json` → 135 rows - GeoJSON page: `GET /0/query?where=1%3D1&outFields=*&resultRecordCount=2&returnGeometry=false&f=geojson` - Highest-capacity segment per substation: `GET /0/queryTopFeatures?where=1%3D1&topFilter={"groupByFields":"SUB_NAME","topCount":1,"orderByFields":"DER_CAP_KW DESC"}&outFields=SUB_NAME,DER_CAP_KW&returnGeometry=false&f=json` ## Specs and artifacts - [OpenAPI 3.1 (API Evangelist generated)](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/openapi/atco-electric-hosting-capacity-openapi.yml): generated from the Esri descriptors plus live probes. ATCO publishes no OpenAPI. - [FeatureServer descriptor (verbatim)](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/openapi/atco-electric-hosting-capacity-featureserver.esri.json) - [Feature layer 0 descriptor (verbatim)](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/openapi/atco-electric-hosting-capacity-layer-0.esri.json) - [API conventions](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/conventions/atco-conventions.yml): pagination, content negotiation, caching, error transport. - [Error catalogue](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/errors/atco-problem-types.yml): the real error envelope, with verified provocations. - [Data model](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/data-model/atco-data-model.yml): field-by-field entity definition. - [Authentication profile](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/authentication/atco-authentication.yml): anonymous. - [Conformance](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/conformance/atco-conformance.yml): what the API does and does not implement, including the Green Button and CDR register checks. - [Lifecycle](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/lifecycle/atco-lifecycle.yml): no versioning, deprecation, SLA or status page; how to detect data refreshes instead. - [Agent skill: query hosting capacity](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/skills/atco-query-hosting-capacity.md) - [Response examples](https://raw.githubusercontent.com/api-evangelist/atco/refs/heads/main/examples/atco-hosting-capacity-examples.yml): real captured responses. ## Company - [ATCO](https://www.atco.com/) - [About ATCO](https://www.atco.com/en-ca/about-us.html) - [ATCO Electric](https://electric.atco.com/en-ca.html) - [ATCO Gas](https://gas.atco.com/en-ca.html) - [ATCO Energy (retail)](https://www.atcoenergy.com/) - [News](https://www.atco.com/en-ca/about-us/news.html) - [Contact](https://www.atco.com/en-ca/about-us/contact.html) - [Privacy](https://www.atco.com/en-ca/privacy.html) - [Terms of Use](https://www.atco.com/en-ca/terms-of-use.html) - [Investors](https://www.atco.com/en-ca/investors.html) ## What does not exist Recorded so an agent stops looking. Each was probed, not assumed. - No developer portal. developer.atco.com, developers.atco.com, api.atco.com, docs.atco.com and data.atco.com do not resolve in DNS. - No OpenAPI or Swagger from ATCO — /openapi.json, /swagger.json and /api-docs return 404 on every ATCO host. - No GitHub organization — api.github.com/orgs/atco and /orgs/atcoenergy both return 404. - No SDKs, no CLI, no Postman collection, no MCP server. - No webhooks, no events, no AsyncAPI, no streaming surface. - No /.well-known/ documents of any kind; no security.txt; no OpenID Connect discovery. - No changelog, no status page, no SLA, no deprecation policy, no rate-limit policy. - No consumer energy data API. Alberta has no Green Button mandate, ATCO is not a Green Button Alliance member, and it is absent from the Australian CDR energy data holder register (84 brands checked directly, 2026-07-27). - No published usage terms or licence on the hosting capacity data — the ArcGIS item has licenseInfo null and accessInformation empty.