Discover/City Power API
live

City Power APIcitypower.co.za

Access City Power Johannesburg electricity tariffs, loadshedding schedules, outages, news, FAQs, and contact info via a single structured API.

Endpoint health
verified 5d ago
get_loadshedding_status
get_prepaid_vending_info
get_company_reports
get_loadshedding_schedule
get_loadshedding_planner
15/15 passing latest checkself-healing
Endpoints
15
Updated
26d ago

What is the City Power API?

The City Power API exposes 15 endpoints covering everything from real-time loadshedding status and suburb-level schedule lookups to electricity tariffs, active network outages, tender bulletins, and customer contact details. Endpoints like get_loadshedding_planner let you filter schedules by suburb name, while get_outages_status returns grouped fault data with affected areas, regions, and substation identifiers — all as structured JSON ready to consume.

Try it

No input parameters required.

api.parse.bot/scraper/33668489-22a5-4e1d-8ff4-bd1051a06f02/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/33668489-22a5-4e1d-8ff4-bd1051a06f02/get_tariffs_and_charges' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace citypower-co-za-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
City Power Johannesburg API - Usage Example

Get your API key from: https://parse.bot/settings
"""
from parse_apis.city_power_johannesburg_api import (
    CityPower,
    NotFoundError_,
)

client = CityPower()

# Check current loadshedding status.
status = client.loadsheddingstatuses.get()
print(f"Loadshedding active stage: {status.active_stage}")

# List current outages across the network — planned and unplanned.
for category in client.outagecategories.list(limit=5):
    print(category.name, f"({len(category.outages)} active outages)")
    for outage in category.outages[:2]:
        print(f"  {outage.outage_date} - {outage.substation} ({outage.region})")

# Browse the latest news articles from City Power.
article = client.newsarticles.list(limit=1).first()
if article:
    print(article.subject, article.published_date)

# Search loadshedding planner for a specific suburb.
plan = client.loadsheddingplans.search(suburb="Sandton")
print(f"Matched areas: {len(plan.matched_areas)}, Total areas: {len(plan.all_areas)}")

# List current tenders with closing dates and bid documents.
tender = client.tenders.list(limit=1).first()
if tender:
    try:
        print(tender.name, tender.closing_date, f"({len(tender.bid_documents)} docs)")
    except NotFoundError_ as exc:
        print(f"tender not found: {exc}")

# Browse company reports organised by financial year.
for report_cat in client.reportcategories.list(limit=3):
    print(report_cat.reportpage, f"- {len(report_cat.finyears)} financial years")

print("exercised: loadsheddingstatuses.get / outagecategories.list / newsarticles.list / loadsheddingplans.search / tenders.list / reportcategories.list")
All endpoints · 15 totalmissing one? ·

Retrieve current electricity tariff structures including residential, commercial, and industrial rates, plus links to tariff documents. Tariffs are grouped by type (RESIDENTIAL, BUSINESS, LARGE_POWER_USERS) with seasonal pricing blocks.

Input

No input parameters required.

Response
{
  "type": "object",
  "fields": {
    "business_tariffs": "array of business tariff objects with tariff_name, tariffs, and tariffType",
    "tariff_documents": "object with page info and linksItems array of document links",
    "residential_tariffs": "array of residential tariff objects with tariff_name, tariffs, and tariffType",
    "large_power_users_tariffs": "array of industrial/large power user tariff objects"
  },
  "sample": {
    "data": {
      "business_tariffs": [
        {
          "id": 39,
          "finYear": null,
          "tariffs": [
            {
              "prepaid_id": 20,
              "tarrif_season": "Summer Energy Charges",
              "residentPrepaidItems": [
                {
                  "current": "274,62",
                  "approved": "308,04",
                  "items_id": 176,
                  "residentialPrepaid": "Block 1(0-500kWh)"
                }
              ]
            }
          ],
          "tariffType": "BUSINESS",
          "tariff_name": "Business Prepaid"
        }
      ],
      "tariff_documents": {
        "id": 3,
        "page": "Tariffs",
        "linksItems": [
          {
            "link": "",
            "items_id": 12,
            "link_pdf": "Customer_Services/Tariffs/2025-26 T Book-14-01-2025ppp.pdf",
            "link_name": "Tariffs And Charges",
            "link_image": ""
          }
        ]
      },
      "residential_tariffs": [
        {
          "id": 31,
          "finYear": null,
          "tariffs": [
            {
              "prepaid_id": 6,
              "tarrif_season": "",
              "residentPrepaidItems": [
                {
                  "current": "175,38",
                  "approved": "227,28",
                  "items_id": 108,
                  "residentialPrepaid": "Block 1(0-500kWh)"
                }
              ]
            }
          ],
          "tariffType": "RESIDENTIAL",
          "tariff_name": "Residential Single Phase 60A"
        }
      ],
      "large_power_users_tariffs": [
        {
          "id": 44,
          "finYear": null,
          "tariffs": [
            {
              "prepaid_id": 32,
              "tarrif_season": "",
              "residentPrepaidItems": [
                {
                  "current": "185,32",
                  "approved": "238,03",
                  "items_id": 226,
                  "residentialPrepaid": "Summer Energy Charge"
                }
              ]
            }
          ],
          "tariffType": "LARGE_POWER_USERS",
          "tariff_name": "Industrial LV"
        }
      ]
    },
    "status": "success"
  }
}

About the City Power API

Loadshedding Data

The get_loadshedding_status endpoint returns the active_stage (or null when no loadshedding is in effect) and any notifications currently in effect. For schedule detail, get_loadshedding_schedule returns a full timetable array — each entry carries blockId, timeRange, dayId, and stageId — alongside area_blocks that map area names to block IDs. get_loadshedding_planner accepts an optional suburb string and returns both all_areas and a matched_areas array filtered to that suburb, making it straightforward to build a per-neighbourhood schedule view.

Tariffs and Outages

get_tariffs_and_charges returns four top-level arrays: residential_tariffs, business_tariffs, large_power_users_tariffs, and tariff_documents. Each tariff object includes tariff_name, tariffs, and tariffType. get_outages_status returns outage categories where each item has a name (e.g. "Planned Power Outage", "UnPlanned Power Outage"), a description, and an outages array with per-event fields: affected_areas, outage_date, region, and substation.

Customer Services and Company Information

get_contact_info structures City Power contacts into three arrays: Queries (with queryname, telephone, weekdays, email), Contacts, and Addresses listing service delivery centres with addressItems. get_meter_reading_schedules returns submission instructions, an email address, downloadable files, and schedules_content paragraphs. get_faq returns all FAQ entries categorised by faqType (Tariffs, General, SSEG, and others); get_sseg_info is a focused subset returning only SSEG-category entries about solar feed-in and small-scale embedded generation.

News, Tenders, and Reports

get_latest_news returns articles as a list of objects each with subject, subtitle, story (an array of paragraph strings), news_id, and published_date in YYYY-MM-DD HH:MM:SS.S format. get_tender_bulletins exposes current and past tenders with closingDate, datePostedOn, bidDocuments, bidAdverts, and a tenderpage field distinguishing current from past. get_company_reports returns a linksItems array of report document links.

Reliability & maintenanceVerified

The City Power API is a managed, monitored endpoint for citypower.co.za — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when citypower.co.za changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official citypower.co.za API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
5d ago
Latest check
15/15 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Display the current loadshedding stage and urgent alerts in a home-automation dashboard using get_loadshedding_status.
  • Build a suburb-specific loadshedding schedule widget by querying get_loadshedding_planner with a user-supplied suburb name.
  • Notify customers of planned or unplanned outages in their region by polling get_outages_status for new entries with matching region or affected_areas.
  • Render a current electricity tariff comparison table for residential and business customers from get_tariffs_and_charges response fields.
  • Surface City Power tender opportunities in a procurement tracking tool using get_tender_bulletins with closingDate and bidDocuments.
  • Automate meter reading reminder emails by combining schedule data from get_meter_reading_schedules with email field values.
  • Index City Power FAQs and SSEG solar feed-in Q&A into a searchable knowledge base using get_faq and get_sseg_info.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does City Power have an official public developer API?+
City Power does not publish an official developer API or documented data service. The endpoints here are the structured way to access this data programmatically.
What does `get_loadshedding_planner` return when no suburb is specified?+
Omitting the suburb parameter returns all areas in the all_areas array alongside the full timetable, with matched_areas returned as an empty array. Providing a suburb string performs a case-insensitive partial match and populates matched_areas with the relevant area objects and their blockId values.
Does `get_outages_status` distinguish between planned and unplanned faults?+
Yes. The response groups outage events by category, and each category object includes a name field that identifies the type — for example "Planned Power Outage" or "UnPlanned Power Outage". Each category also carries an outages array with per-event fields including region, substation, affected_areas, and outage_date.
Can I look up historical outage records or past loadshedding stage data?+
Not currently. get_outages_status returns only currently active faults, and get_loadshedding_status returns only the live stage. Historical outage or stage-change data is not exposed. You can fork this API on Parse and revise it to add an endpoint that tracks and stores stage or outage history over time.
Is prepaid token or account balance lookup available through this API?+
Not currently. The API covers prepaid vending vendor links via get_prepaid_vending_info, but individual account balances, token generation, and transaction history are not exposed. You can fork the API on Parse and revise it to add any customer-portal endpoints that become accessible.
Page content last updated . Spec covers 15 endpoints from citypower.co.za.
Related APIs in Government PublicSee all →
eskom.co.za API
Check real-time loadshedding status, browse electricity tariffs and procurement tenders, and access Eskom's media statements and investor relations documents. Stay informed about South Africa's power supply situation and find official announcements, tender opportunities, and financial information all in one place.
cityelectricsupply.com API
Search and browse City Electric Supply's product catalog across categories, view detailed product information with localized pricing and inventory based on a ZIP code, and manage a shopping cart. Access product details and real-time stock availability for any area.
ameren.com API
Retrieve hourly electricity prices, current outage summaries, rate information, and energy efficiency programs from Ameren. Covers Illinois and Missouri service areas with real-time and forecast pricing data.
caiso.com API
Access real-time and intraday data from California's electricity grid (CAISO), including current demand and forecasts, generation supply mix, renewable energy levels, CO2 emissions and carbon intensity, locational marginal prices (LMPs), and overall grid operating status.
municipalities.co.za API
Find comprehensive information about South African municipalities including their financial performance, service delivery metrics, contact details, and employment data all in one place. Search across provinces, access municipal tenders and job vacancies, and explore demographic and resource information for any municipality.
energy-charts.de API
Monitor real-time electricity prices, production data, and market forecasts across Germany and Europe to track energy costs and grid conditions. Access day-ahead and intraday pricing, power generation forecasts, cross-border trading flows, and traffic signal alerts for comprehensive energy market insights.
ccee.org.br API
Access real-time electricity spot prices (PLD) and search CCEE documents and board meeting minutes to stay informed on Brazil's energy market. Filter and retrieve current pricing data and historical meeting records to track energy market developments.
mimer.svk.se API
Monitor Swedish electricity grid data by retrieving real-time consumption and production statistics, settlement prices, and frequency containment reserve information from Svenska kraftnät. Access comprehensive grid settlement data and exchange rates to analyze energy market trends and grid performance across Sweden.