Cernion Utility Report API

The Utility Report API from Cernion — 7 operation(s) for utility report.

Operations 7

POST /api/utility-report/get-bdew-options Get available BDEW codes for a utility name #
POST /api/utility-report/generate Generate a 360° Management Report for an energy utility (Stadtwerk) #
GET /api/utility-report/status/:reportId Poll generation status of a utility report #
GET /api/utility-report/health Check MCP connection health and token validity #
POST /api/utility-report/rebuild/:reportId Re-render an existing report from cached data #
POST /api/utility-report/rebuild-all Re-render all completed reports from cached data #
GET /api/utility-report/download/:reportId Download a completed HTML report #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cernion-de:cernion-de-utility-report-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cernion-de-utility-report-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Cernion Energy Tools Utility Report API
  version: 0.99.22
  description: 'MicroService Agent System for Energy Markets - REST API with AI integration.


    CERNION_TOKEN: request at https://cernion.de/ or by email: dev@stromdao.com.


    For the public instance at https://api.cernion.de/, create your token at https://cernion.de/cet-token/.'
servers:
- url: https://api.cernion.de
  description: API Server
tags:
- name: Utility Report
paths:
  /api/utility-report/get-bdew-options:
    post:
      summary: Get available BDEW codes for a utility name
      tags:
      - Utility Report
      operationId: utility_report_getBdewOptions
      parameters:
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Available BDEW code options
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  utilityName:
                    type: string
                  optionsCount:
                    type: number
                  options:
                    type: array
                    items:
                      type: object
                      properties:
                        bdew:
                          type: string
                          description: BDEW code (e.g., "9907462000006")
                        name:
                          type: string
                          description: VNB name
                        city:
                          type:
                          - string
                          - 'null'
                        roles:
                          type: array
                          items:
                            type: string
                          description: Market roles (e.g., ["Lieferant", "Bilanzgruppe"])
                  message:
                    type: string
      description: 'Returns all BDEW codes available for the given utility name, grouped by market role.

        This is useful when a user wants to generate a report but doesn''t know the BDEW code.

        A single Stadtwerk may have multiple BDEW codes for different roles (Lieferant, Bilanzgruppe, etc.).'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - utilityName
              properties:
                utilityName:
                  type: string
                  description: Name of the energy utility
                  example: Stadtwerke Frankenthal
                region:
                  type: string
                  description: Optional region/city for context
                  example: Frankenthal
                token:
                  type: string
                  description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
            examples:
              frankenthalOptions:
                summary: Find BDEW options for Stadtwerke Frankenthal
                value:
                  utilityName: Stadtwerke Frankenthal
                  region: Frankenthal
  /api/utility-report/generate:
    post:
      summary: Generate a 360° Management Report for an energy utility (Stadtwerk)
      tags:
      - Utility Report
      operationId: utility_report_generate
      parameters:
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Cached report (gateway/internal) or direct result (internal call)
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  reportId:
                    type: string
                  status:
                    type: string
                    enum:
                    - generating
                    - completed
                    - cached
                  message:
                    type: string
                  downloadUrl:
                    type: string
        '202':
          description: REST/Gateway call accepted as async job
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  jobId:
                    type: string
                  status:
                    type: string
                    enum:
                    - queued
                  message:
                    type: string
                  statusUrl:
                    type: string
                  resultUrl:
                    type: string
                  progressUrl:
                    type: string
                  reportId:
                    type: string
                  downloadUrl:
                    type: string
      description: 'Starts (or resumes) the generation of a comprehensive ~50-section HTML management report for German energy utilities.


        **Report sections:**

        1. Netzbetrieb & Netzplanung (capacity utilization, redispatch, residual load, CO₂)

        2. Erneuerbare Energien & Einspeiser (PV, Wind, Storage from MaStR)

        3. Energiemarkt & Preise (EPEX, ENTSO-E, SMARD)

        4. Gasinfrastruktur & Versorgungssicherheit (AGSI/GIE)

        5. Regulierung, Compliance & Marktprozesse (BNetzA EWK)

        6. Kundenmanagement, Vertrieb & Prosumer (churn, leads)

        7. Investitionsplanung & Business Cases

        8. Digitalisierung & Systemübersicht


        **Caching:** Reports are cached for 7 days (UUID filename). Identical requests return the cached report.

        **Resumability:** Generation progress is saved after each phase. If generation is interrupted, retry the same request to resume.

        **PDF:** Open the downloaded HTML in a browser and use Print → Save as PDF.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - utilityName
              properties:
                utilityName:
                  type: string
                  description: Name of the energy utility
                  example: Stadtwerke Heidelberg GmbH
                region:
                  type: string
                  description: Region, city or postal code for context
                  example: Heidelberg
                bdew:
                  type: string
                  description: BDEW code of the grid operator (optional, improves data quality)
                  example: '9907462000006'
                forceRefresh:
                  type: boolean
                  description: Force regeneration even if a cached report exists
                  default: false
                token:
                  type: string
                  description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
            examples:
              stadtwerkeHeidelberg:
                summary: Stadtwerke Heidelberg
                value:
                  utilityName: Stadtwerke Heidelberg GmbH
                  region: Heidelberg
                  bdew: '9907462000006'
              stromdaoNetze:
                summary: STROMDAO Netze GmbH
                value:
                  utilityName: STROMDAO Netze GmbH
                  region: Ludwigshafen
                  bdew: '9907462000013'
  /api/utility-report/status/:reportId:
    get:
      summary: Poll generation status of a utility report
      tags:
      - Utility Report
      operationId: utility_report_status
      parameters:
      - name: reportId
        in: path
        required: true
        schema:
          type: string
          example: 2a70e478-90ce-4fa5-b996-6f98efdba7cf
        description: Report UUID returned by /utility-report/generate
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Report status
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  reportId:
                    type: string
                  status:
                    type: string
                    enum:
                    - generating
                    - completed
                    - error
                  phase:
                    type: number
                  phaseName:
                    type: string
                  progress:
                    type: number
                    description: 0–100 completion percentage
                  error:
                    type:
                    - string
                    - 'null'
                  downloadUrl:
                    type:
                    - string
                    - 'null'
      description: Returns current phase, completion percentage and any errors.
  /api/utility-report/health:
    get:
      summary: Check MCP connection health and token validity
      tags:
      - Utility Report
      operationId: utility_report_health
      parameters:
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Health check result
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  status:
                    type: string
                    enum:
                    - ok
                    - error
                  tokenPresent:
                    type: boolean
                  mcpReachable:
                    type: boolean
                  toolCount:
                    type: number
                  phase3Tools:
                    type:
                    - object
                    - 'null'
                    properties:
                      available:
                        type: number
                      unavailable:
                        type: number
                      unavailableList:
                        type: array
                        items:
                          type: string
                  latencyMs:
                    type: number
                  error:
                    type:
                    - string
                    - 'null'
      description: 'Tests the Cernion MCP connection using the configured token. Returns `status: "ok"` only when the token is present and the MCP server responds successfully. Use this endpoint to diagnose why report generation fails with MCP_CONNECTION_ERROR.'
  /api/utility-report/rebuild/:reportId:
    post:
      summary: Re-render an existing report from cached data
      tags:
      - Utility Report
      operationId: utility_report_rebuild
      parameters:
      - name: reportId
        in: path
        required: true
        schema:
          type: string
          example: 2a70e478-90ce-4fa5-b996-6f98efdba7cf
        description: Report UUID to rebuild
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Report re-rendered successfully
        '404':
          description: No progress data found for reportId
        '409':
          description: Report pipeline has not completed yet
      description: Reads the stored `.progress.json` for the given reportId and re-runs `buildHtmlReport()` to overwrite the `.html` file. Instant – no MCP calls needed. Useful after a report-builder bug fix to refresh already-generated reports.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              description: No request body required for this endpoint.
              properties:
                token:
                  type: string
                  description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
            examples:
              noBody:
                summary: No payload needed
                value: {}
  /api/utility-report/rebuild-all:
    post:
      summary: Re-render all completed reports from cached data
      tags:
      - Utility Report
      operationId: utility_report_rebuildAll
      parameters:
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: Batch rebuild summary
      description: Iterates every `.progress.json` in the reports directory and re-renders the HTML for every completed report. Returns a summary with counts of rebuilt/skipped/failed entries.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              description: No request body required for this endpoint.
              properties:
                token:
                  type: string
                  description: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.
            examples:
              noBody:
                summary: No payload needed
                value: {}
  /api/utility-report/download/:reportId:
    get:
      summary: Download a completed HTML report
      tags:
      - Utility Report
      operationId: utility_report_download
      parameters:
      - name: reportId
        in: path
        required: true
        schema:
          type: string
          example: 2a70e478-90ce-4fa5-b996-6f98efdba7cf
        description: Report UUID to download
      - $ref: '#/components/parameters/TokenQuery'
      responses:
        '200':
          description: HTML report document
        '404':
          description: Report not found or not yet complete
      description: Returns the raw HTML document. Open in a browser and use Print → Save as PDF.
components:
  parameters:
    TokenQuery:
      name: token
      in: query
      required: false
      schema:
        type: string
      description: Optional Cernion MCP token as URL query parameter. If provided, it overrides CERNION_TOKEN for this request. Prefer Authorization Bearer header in production to reduce token exposure in URLs/logs.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Optional Cernion MCP token. If not provided, falls back to CERNION_TOKEN from environment. Request token at https://cernion.de/ or by email: dev@stromdao.com.'