# SaskPower
> SaskPower (Saskatchewan Power Corporation) is the provincial Crown corporation that generates, transmits, distributes and retails essentially all electricity in Saskatchewan, Canada — more than 550,000 customers, ~5,437 MW of capacity, no competitive wholesale market operator beside it. Its API posture is the inverse of a regulated open-banking-style utility: no energy-data mandate applies to it, so there is no consumer data API and no consent surface at all — yet five anonymous, undocumented, key-free data endpoints serve provincial generation mix, system demand, interchange, live outages and smart-meter deployment geometry to anyone who knows the URLs.
Generated by API Evangelist from the SaskPower APIs.json profile and live probes. Method: generated. Date: 2026-07-27.
SaskPower does not publish an llms.txt of its own (https://www.saskpower.com/llms.txt returns HTTP 404).
## What an agent needs to know first
- **There is no specification.** No OpenAPI, Swagger, GraphQL, AsyncAPI, MCP server, Postman collection, WSDL or SDK exists for SaskPower. `/openapi.json` and `/swagger.json` return HTTP 404 on www.saskpower.com and HTTP 596 on api.saskpower.com. `/developers`, `/developer`, `/api`, `/apis`, `/docs`, `/data`, `/open-data` and `/opendata` all resolve to a Sitecore soft-404 that answers **HTTP 200** with `
404` — on this site a 200 is not evidence a resource exists. No developer, docs, data or opendata subdomain resolves.
- **There is no developer program and nothing to sign up for.** The former TIBCO/Mashery ESB developer portal at api-info.saskpower.com is NXDOMAIN. The gateway it fronted, api.saskpower.com, is still live and answers every public path with HTTP 596 `ERR_596_SERVICE_NOT_FOUND`.
- **The five data feeds below need no credentials.** Anonymous HTTPS GET, no key, no signup, no referer check, no published rate limit. Verified 2026-07-27.
- **No CORS.** No `Access-Control-Allow-Origin` is returned on any feed, so browser-side use is blocked; consume server-side.
- **Open ≠ openly licensed.** SaskPower's Digital Terms and Conditions (February 2022), linked from the "Where Your Power Comes From" page, grant only "a limited license to use, display or print short extracts of the content for your **personal non-commercial** use only", prohibit anyone to "market, commercially exploit, reproduce, copy, download, derivatize, modify or distribute any content ... without SaskPower's written permission", and reserve the right to revoke that licence at any time without notice. `outagemap.saskpower.com/robots.txt` is a blanket `Disallow: /`. Treat these feeds as reachable-but-restricted, and get written permission before building on them.
- **Errors hide behind HTTP 200.** Sitecore controllers return `{errorCode, errorMessage, errorDetails, callId, time}` alongside the payload with a 200 status even on backend failure. Check `errorCode`, not the status code.
- **Dates are not ISO 8601.** JSON payloads use Microsoft `/Date()/` literals; outage alert timestamps are unqualified display strings like `Jul 27 10:27` with no year and no timezone. Saskatchewan is CST year-round (UTC-6, no DST), but that is never stated in the data.
- **No caching validators.** Every feed is served `Cache-Control: no-cache, no-store` with no ETag and no Last-Modified, so conditional requests are impossible and each poll is a full transfer (635 KB and 857 KB for the two KML documents).
- **There is no consumer energy data API.** Smart-meter usage is visible only to the account holder inside MySaskPower behind an Azure AD B2C browser login. There is no Green Button, no ESPI, no third-party consent flow, no accreditation scheme, and no way for an application to be authorized to read another person's data.
## APIs (all anonymous GET, all undocumented by SaskPower)
- [Power Use Dashboard Data](https://www.saskpower.com/ignitionapi/PowerUseDashboard/GetPowerUseDashboardData): `GET https://www.saskpower.com/ignitionapi/PowerUseDashboard/GetPowerUseDashboardData` — provincial `systemDemand`, `systemSupply`, `generation`, `netInterchange` (negative when exporting), `historicalPeakDemand`, and `generationByType[]` per fuel with MW, percentage, a `greenEnergy` flag and named contributing stations. JSON, ~7.9 KB. Note the payload's `asOfDate` can lag the request by days — it is not real time.
- [Live Outage JSON Feed](https://www.saskpower.com/api/sitecore/Content/GetOutageJsonFile): `GET https://www.saskpower.com/api/sitecore/Content/GetOutageJsonFile` — `Outages[]` of `{OutageId, RegionId, Region, Planned: "Planned"|"Unplanned", Alerts[{CreateDate, Message}]}`. JSON, ~4 KB.
- [Planned Outages RSS](https://www.saskpower.com/ignitionapi/Content/GetRSSFeed): `GET https://www.saskpower.com/ignitionapi/Content/GetRSSFeed` — RSS 2.0, one item per planned outage with area, date/time window, reason, status and comments in a CDATA HTML fragment. The feed's own `atom:link` self-reference (`/feeds/outages.xml`) is dead; use this path.
- [Outage Map KML](https://outagemap.saskpower.com/Files/GetKmlFile): `GET https://outagemap.saskpower.com/Files/GetKmlFile` (optionally `?rid=`) — KML 2.1 polygons per service region with planned/unplanned/just-resolved styles. Mirrored at `https://www.saskpower.com/api/sitecore/Content/GetOutageKmlFile`.
- [Smart Meter Installation Map KML](https://www.saskpower.com/api/sitecore/Content/GetSmartMeterKmlFile): `GET https://www.saskpower.com/api/sitecore/Content/GetSmartMeterKmlFile` — KML 2.1 deployment zones styled in-progress / coming-up / complete / unassigned. Served as `text/html` despite the XML body. This is where meters are being installed, never a reading.
## Artifacts derived by API Evangelist
- [Captured live responses](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/examples/saskpower-examples.yml) — the verbatim payloads the endpoints returned on 2026-07-27.
- [JSON Schema: Power Use Dashboard](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/json-schema/saskpower-power-use-dashboard.schema.json) and [JSON Schema: Outages](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/json-schema/saskpower-outages.schema.json) — derived from those captures, not published by SaskPower.
- [Conventions](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/conventions/saskpower-conventions.yml) — transport, dates, caching, licensing, and what does not exist (no idempotency, no pagination, no versioning, no rate-limit signalling).
- [Error codes](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/errors/saskpower-error-codes.yml) — the Sitecore envelope, the 599 upstream-failure code, and the 200111-200115 report-an-outage codes.
- [Authentication](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/authentication/saskpower-authentication.yml) · [Lifecycle](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/lifecycle/saskpower-lifecycle.yml) · [Conformance](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/conformance/saskpower-conformance.yml) · [Well-known probes](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/well-known/saskpower-well-known.yml) · [Domain security](https://raw.githubusercontent.com/api-evangelist/saskpower/refs/heads/main/security/saskpower-domain-security.yml)
## Human docs (there is no API documentation)
- [Where Your Power Comes From](https://www.saskpower.com/our-power-future/our-electricity/electrical-system/where-your-power-comes-from) — the page the generation-mix JSON drives.
- [Outage Map and Updates](https://www.saskpower.com/outages/power-outages/outage-updates) — the page the outage JSON and KML drive.
- [Outages Planned for Necessary Maintenance](https://www.saskpower.com/outages/power-outages/outages-planned-for-necessary-maintenance) — carries the visible "RSS feed" link.
- [Smart Meter Installation Map](https://www.saskpower.com/our-power-future/investing-in-a-reliable-power-grid/smart-meters/meter-installation-map)
- [Digital Terms and Conditions (PDF, Feb 2022)](https://www.saskpower.com/-/media/SaskPower/Accounts-and-Services/Policy-Digital-TermsConditions.ashx) — the licence that actually governs use of every feed above.
- [Terms and Conditions](https://www.saskpower.com/terms) · [Privacy](https://www.saskpower.com/footer/how-we-do-business/privacy) · [Contact Us](https://www.saskpower.com/contact-us) · [Power Rates](https://www.saskpower.com/accounts/power-rates/power-supply-rates)
- [MySaskPower](https://www.saskpower.com/accounts/mysaskpower/your-account/access-your-mysaskpower-account) — the customer portal; account-holder access only.
## Do not
- Do not present the generation mix as live: check `asOfDate`.
- Do not assume a 200 means success: check `errorCode`.
- Do not build a commercial product on these feeds without written permission from SaskPower — the published licence forbids it.
- Do not look for a SaskPower SDK, developer portal, sandbox, changelog, status page or support channel. None exists.