openapi: 3.1.0
info:
  title: Volton Public Data API
  summary: Free, CC-BY-4.0 Estonian electricity-market data — JSON over HTTPS.
  description: |
      Hourly snapshots of Estonian electricity-market data — day-ahead spot,
      mFRR / aFRR balancing energy, mFRR / aFRR reserve capacity,
      imbalance pricing, and grid frequency. Sourced from Elering, Nord Pool,
      and the ENTSO-E Transparency Platform via the Volton Liisa pipeline.
      
      Two URL patterns per dataset:
      - `latest.json` — rolling 7-day window, cached 60 seconds, refreshed hourly.
      - `{YYYY-MM-DD}.json` — immutable per-day archive (Europe/Tallinn local day).
      
      No authentication. CC-BY-4.0 — attribute as: 
      `Volton Technology OÜ, https://public-data.volton.energy, CC-BY-4.0`.
      
      Fair use: ~10 req/s per IP. Polling more often than the hourly refresh
      wastes both ends.
  version: 1.0.0
  license:
    name: Creative Commons Attribution 4.0 International
    identifier: CC-BY-4.0
  contact:
    name: Volton Technology OÜ
    url: https://volton.energy
    email: hello@volton.energy
  termsOfService: https://volton.energy/en/terms-of-service
servers:
  - url: https://public-data.volton.energy
    description: Production CDN (CloudFront)
tags:
  - name: status
    description: Pipeline freshness across all datasets.
  - name: mfrr-clearing-price
    description: Estonia mFRR clearing prices
    externalDocs:
      url: https://public-data.volton.energy/mfrr-clearing-price/
      description: Dataset page
  - name: afrr-clearing-price
    description: Estonia aFRR clearing prices
    externalDocs:
      url: https://public-data.volton.energy/afrr-clearing-price/
      description: Dataset page
  - name: mfrr-capacity-price
    description: Estonia mFRR capacity prices
    externalDocs:
      url: https://public-data.volton.energy/mfrr-capacity-price/
      description: Dataset page
  - name: afrr-capacity-price
    description: Estonia aFRR capacity prices
    externalDocs:
      url: https://public-data.volton.energy/afrr-capacity-price/
      description: Dataset page
  - name: imbalance-price
    description: Estonia imbalance price
    externalDocs:
      url: https://public-data.volton.energy/imbalance-price/
      description: Dataset page
  - name: day-ahead-spot
    description: Estonia day-ahead spot price
    externalDocs:
      url: https://public-data.volton.energy/day-ahead-spot/
      description: Dataset page
  - name: grid-frequency
    description: Estonia grid frequency
    externalDocs:
      url: https://public-data.volton.energy/grid-frequency/
      description: Dataset page
paths:
  "/v1/_status.json":
    get:
      operationId: getStatus
      tags:
        - status
      summary: Pipeline freshness summary
      description: Per-dataset last_refresh + status enum (operational | degraded | stale | down). Cached 60 seconds at the edge.
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/Status"
  "/v1/mfrr-clearing-price/latest.json":
    get:
      operationId: mfrrClearingPriceLatest
      tags:
        - mfrr-clearing-price
      summary: Estonia mFRR clearing prices — rolling 7-day window
      description: |
          Manually-activated Frequency Restoration Reserve (mFRR) energy clearing prices for the Estonian bidding zone. One value per 15-minute Market Time Unit, per direction (up or down). Sourced from Elering and the Baltic Transparency Dashboard, refreshed hourly.
          
          Response covers the most recent 7 days. Cached 60 seconds at the edge; refreshed every hour by the pipeline.
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/MfrrClearingPriceResponse"
  "/v1/mfrr-clearing-price/{date}.json":
    get:
      operationId: mfrrClearingPriceByDate
      tags:
        - mfrr-clearing-price
      summary: Estonia mFRR clearing prices — immutable per-day archive
      description: |
          Per-day archive for the Estonia mFRR clearing prices dataset. Date is Europe/Tallinn local. Files are immutable once written; safe to cache forever. Available from 2024-10-09.
          
          **Today's archive is NOT published** (the day is still in progress). For today's data, fetch `/v1/mfrr-clearing-price/latest.json` — the rolling 7-day window includes today's partial data. To find the most recent fully-archived day, read `/v1/_status.json`'s `latest_archive_date` field. Requesting today or a future date will return 403, not 404, because the underlying object simply doesn't exist in the bucket.
      parameters:
        - name: date
          in: path
          required: true
          description: Calendar date (YYYY-MM-DD), Europe/Tallinn local. Files for past dates are immutable.
          schema:
            type: string
            format: date
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/MfrrClearingPriceResponse"
        "404":
          description: No archive for that date.
  "/v1/afrr-clearing-price/latest.json":
    get:
      operationId: afrrClearingPriceLatest
      tags:
        - afrr-clearing-price
      summary: Estonia aFRR clearing prices — rolling 7-day window
      description: |
          Automatically-activated Frequency Restoration Reserve (aFRR) energy clearing prices for the Estonian bidding zone. One value per 15-minute Market Time Unit, per direction (up or down). Sourced from Elering, refreshed hourly.
          
          Response covers the most recent 7 days. Cached 60 seconds at the edge; refreshed every hour by the pipeline.
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/AfrrClearingPriceResponse"
  "/v1/afrr-clearing-price/{date}.json":
    get:
      operationId: afrrClearingPriceByDate
      tags:
        - afrr-clearing-price
      summary: Estonia aFRR clearing prices — immutable per-day archive
      description: |
          Per-day archive for the Estonia aFRR clearing prices dataset. Date is Europe/Tallinn local. Files are immutable once written; safe to cache forever. Available from 2025-04-15.
          
          **Today's archive is NOT published** (the day is still in progress). For today's data, fetch `/v1/afrr-clearing-price/latest.json` — the rolling 7-day window includes today's partial data. To find the most recent fully-archived day, read `/v1/_status.json`'s `latest_archive_date` field. Requesting today or a future date will return 403, not 404, because the underlying object simply doesn't exist in the bucket.
      parameters:
        - name: date
          in: path
          required: true
          description: Calendar date (YYYY-MM-DD), Europe/Tallinn local. Files for past dates are immutable.
          schema:
            type: string
            format: date
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/AfrrClearingPriceResponse"
        "404":
          description: No archive for that date.
  "/v1/mfrr-capacity-price/latest.json":
    get:
      operationId: mfrrCapacityPriceLatest
      tags:
        - mfrr-capacity-price
      summary: Estonia mFRR capacity prices — rolling 7-day window
      description: |
          BBCM-cleared mFRR capacity availability prices for the Estonian bidding zone — what BSPs are paid for *being available*, separate from energy activation prices. One value per 15-minute MTU, per direction. Sourced from the Baltic Transparency Dashboard, refreshed hourly.
          
          Response covers the most recent 7 days. Cached 60 seconds at the edge; refreshed every hour by the pipeline.
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/MfrrCapacityPriceResponse"
  "/v1/mfrr-capacity-price/{date}.json":
    get:
      operationId: mfrrCapacityPriceByDate
      tags:
        - mfrr-capacity-price
      summary: Estonia mFRR capacity prices — immutable per-day archive
      description: |
          Per-day archive for the Estonia mFRR capacity prices dataset. Date is Europe/Tallinn local. Files are immutable once written; safe to cache forever. Available from 2025-02-04.
          
          **Today's archive is NOT published** (the day is still in progress). For today's data, fetch `/v1/mfrr-capacity-price/latest.json` — the rolling 7-day window includes today's partial data. To find the most recent fully-archived day, read `/v1/_status.json`'s `latest_archive_date` field. Requesting today or a future date will return 403, not 404, because the underlying object simply doesn't exist in the bucket.
      parameters:
        - name: date
          in: path
          required: true
          description: Calendar date (YYYY-MM-DD), Europe/Tallinn local. Files for past dates are immutable.
          schema:
            type: string
            format: date
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/MfrrCapacityPriceResponse"
        "404":
          description: No archive for that date.
  "/v1/afrr-capacity-price/latest.json":
    get:
      operationId: afrrCapacityPriceLatest
      tags:
        - afrr-capacity-price
      summary: Estonia aFRR capacity prices — rolling 7-day window
      description: |
          BBCM-cleared aFRR capacity availability prices for the Estonian bidding zone — what BSPs are paid for *being available*, separate from energy activation prices. One value per 15-minute MTU, per direction. Sourced from the Baltic Transparency Dashboard; aFRR capacity procurement on BBCM started 15 April 2025.
          
          Response covers the most recent 7 days. Cached 60 seconds at the edge; refreshed every hour by the pipeline.
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/AfrrCapacityPriceResponse"
  "/v1/afrr-capacity-price/{date}.json":
    get:
      operationId: afrrCapacityPriceByDate
      tags:
        - afrr-capacity-price
      summary: Estonia aFRR capacity prices — immutable per-day archive
      description: |
          Per-day archive for the Estonia aFRR capacity prices dataset. Date is Europe/Tallinn local. Files are immutable once written; safe to cache forever. Available from 2025-04-15.
          
          **Today's archive is NOT published** (the day is still in progress). For today's data, fetch `/v1/afrr-capacity-price/latest.json` — the rolling 7-day window includes today's partial data. To find the most recent fully-archived day, read `/v1/_status.json`'s `latest_archive_date` field. Requesting today or a future date will return 403, not 404, because the underlying object simply doesn't exist in the bucket.
      parameters:
        - name: date
          in: path
          required: true
          description: Calendar date (YYYY-MM-DD), Europe/Tallinn local. Files for past dates are immutable.
          schema:
            type: string
            format: date
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/AfrrCapacityPriceResponse"
        "404":
          description: No archive for that date.
  "/v1/imbalance-price/latest.json":
    get:
      operationId: imbalancePriceLatest
      tags:
        - imbalance-price
      summary: Estonia imbalance price — rolling 7-day window
      description: |
          The single imbalance price settled with every Estonian Balance Responsible Party each 15-minute MTU. Derived from the marginal balancing-energy bids activated through MARI / PICASSO. Sourced from Elering, refreshed hourly.
          
          Response covers the most recent 7 days. Cached 60 seconds at the edge; refreshed every hour by the pipeline.
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/ImbalancePriceResponse"
  "/v1/imbalance-price/{date}.json":
    get:
      operationId: imbalancePriceByDate
      tags:
        - imbalance-price
      summary: Estonia imbalance price — immutable per-day archive
      description: |
          Per-day archive for the Estonia imbalance price dataset. Date is Europe/Tallinn local. Files are immutable once written; safe to cache forever. Available from 2024-10-09.
          
          **Today's archive is NOT published** (the day is still in progress). For today's data, fetch `/v1/imbalance-price/latest.json` — the rolling 7-day window includes today's partial data. To find the most recent fully-archived day, read `/v1/_status.json`'s `latest_archive_date` field. Requesting today or a future date will return 403, not 404, because the underlying object simply doesn't exist in the bucket.
      parameters:
        - name: date
          in: path
          required: true
          description: Calendar date (YYYY-MM-DD), Europe/Tallinn local. Files for past dates are immutable.
          schema:
            type: string
            format: date
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/ImbalancePriceResponse"
        "404":
          description: No archive for that date.
  "/v1/day-ahead-spot/latest.json":
    get:
      operationId: dayAheadSpotLatest
      tags:
        - day-ahead-spot
      summary: Estonia day-ahead spot price — rolling 7-day window
      description: |
          The hourly day-ahead clearing price for the EE bidding zone, set by the SDAC pan-European auction at 13:00 CET each day. The reference price for nearly every Estonian electricity contract. Sourced from Nord Pool / ENTSO-E, refreshed hourly.
          
          Response covers the most recent 7 days. Cached 60 seconds at the edge; refreshed every hour by the pipeline.
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/DayAheadSpotResponse"
  "/v1/day-ahead-spot/{date}.json":
    get:
      operationId: dayAheadSpotByDate
      tags:
        - day-ahead-spot
      summary: Estonia day-ahead spot price — immutable per-day archive
      description: |
          Per-day archive for the Estonia day-ahead spot price dataset. Date is Europe/Tallinn local. Files are immutable once written; safe to cache forever. Available from 2010-01-01.
          
          **Today's archive is NOT published** (the day is still in progress). For today's data, fetch `/v1/day-ahead-spot/latest.json` — the rolling 7-day window includes today's partial data. To find the most recent fully-archived day, read `/v1/_status.json`'s `latest_archive_date` field. Requesting today or a future date will return 403, not 404, because the underlying object simply doesn't exist in the bucket.
      parameters:
        - name: date
          in: path
          required: true
          description: Calendar date (YYYY-MM-DD), Europe/Tallinn local. Files for past dates are immutable.
          schema:
            type: string
            format: date
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/DayAheadSpotResponse"
        "404":
          description: No archive for that date.
  "/v1/grid-frequency/latest.json":
    get:
      operationId: gridFrequencyLatest
      tags:
        - grid-frequency
      summary: Estonia grid frequency — rolling 7-day window
      description: |
          Real-time AC frequency on the Estonian grid, which has been part of the Continental European Synchronous Area since 9 February 2025. The whole CESA shares one frequency in real time — Estonia and Portugal see the same number. Sourced from Elering, downsampled to 5-min mean and refreshed hourly.
          
          Response covers the most recent 7 days. Cached 60 seconds at the edge; refreshed every hour by the pipeline.
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/GridFrequencyResponse"
  "/v1/grid-frequency/{date}.json":
    get:
      operationId: gridFrequencyByDate
      tags:
        - grid-frequency
      summary: Estonia grid frequency — immutable per-day archive
      description: |
          Per-day archive for the Estonia grid frequency dataset. Date is Europe/Tallinn local. Files are immutable once written; safe to cache forever. Available from 2025-02-09.
          
          **Today's archive is NOT published** (the day is still in progress). For today's data, fetch `/v1/grid-frequency/latest.json` — the rolling 7-day window includes today's partial data. To find the most recent fully-archived day, read `/v1/_status.json`'s `latest_archive_date` field. Requesting today or a future date will return 403, not 404, because the underlying object simply doesn't exist in the bucket.
      parameters:
        - name: date
          in: path
          required: true
          description: Calendar date (YYYY-MM-DD), Europe/Tallinn local. Files for past dates are immutable.
          schema:
            type: string
            format: date
            pattern: ^\d{4}-\d{2}-\d{2}$
      responses:
        "200":
          description: Success
          content:
            "application/json":
              schema:
                $ref: "#/components/schemas/GridFrequencyResponse"
        "404":
          description: No archive for that date.
components:
  schemas:
    Status:
      type: object
      description: Pipeline freshness summary across all datasets.
      properties:
        generated_at:
          type: string
          format: date-time
        datasets:
          type: array
          items:
            type: object
            properties:
              slug:
                type: string
              last_refresh:
                type: string
                format: date-time
              next_expected_refresh:
                type: string
                format: date-time
              sample_count:
                type: integer
              status:
                type: string
                enum:
                  - operational
                  - degraded
                  - stale
                  - down
              latest_url:
                type: string
                format: uri
              latest_archive_date:
                type: string
                format: date
            required:
              - slug
              - last_refresh
              - status
      required:
        - generated_at
        - datasets
    MfrrClearingPriceRow:
      type: object
      properties:
        mtu_start:
          description: Market Time Unit start (ISO 8601 UTC). Each MTU is a 15-minute settlement interval.
          type: string
          format: date-time
        direction:
          description: "Activation direction: up = TSO buys energy from BSP, down = TSO sells back."
          type: string
          enum:
            - up
            - down
        price_eur_mwh:
          description: Marginal clearing price for activated balancing energy in this direction. Null when no activation cleared in this MTU.
          title: price_eur_mwh (EUR/MWh)
          type:
            - number
            - "null"
      required:
        - mtu_start
        - direction
      additionalProperties: false
    MfrrClearingPriceResponse:
      type: object
      description: Snapshot envelope for the Estonia mFRR clearing prices dataset.
      properties:
        schema_version:
          type: string
          const: "1.0"
          description: JSON file schema version. Bumped on additive changes; major breaking changes go to /v2.
        generated_at:
          type: string
          format: date-time
          description: When the pipeline wrote this file (ISO 8601 UTC).
        meta:
          type: object
          properties:
            date_modified:
              type: string
              format: date-time
              description: Upstream snapshot timestamp from the pipeline.
          required:
            - date_modified
          additionalProperties: true
        rows:
          type: array
          items:
            $ref: "#/components/schemas/MfrrClearingPriceRow"
      required:
        - rows
    AfrrClearingPriceRow:
      type: object
      properties:
        mtu_start:
          description: Market Time Unit start (ISO 8601 UTC). Each MTU is a 15-minute settlement interval.
          type: string
          format: date-time
        direction:
          description: "Activation direction: up = TSO buys energy from BSP, down = TSO sells back."
          type: string
          enum:
            - up
            - down
        price_eur_mwh:
          description: PICASSO marginal clearing price for activated aFRR energy in this direction. Null when no activation cleared.
          title: price_eur_mwh (EUR/MWh)
          type:
            - number
            - "null"
      required:
        - mtu_start
        - direction
      additionalProperties: false
    AfrrClearingPriceResponse:
      type: object
      description: Snapshot envelope for the Estonia aFRR clearing prices dataset.
      properties:
        schema_version:
          type: string
          const: "1.0"
          description: JSON file schema version. Bumped on additive changes; major breaking changes go to /v2.
        generated_at:
          type: string
          format: date-time
          description: When the pipeline wrote this file (ISO 8601 UTC).
        meta:
          type: object
          properties:
            date_modified:
              type: string
              format: date-time
              description: Upstream snapshot timestamp from the pipeline.
          required:
            - date_modified
          additionalProperties: true
        rows:
          type: array
          items:
            $ref: "#/components/schemas/AfrrClearingPriceRow"
      required:
        - rows
    MfrrCapacityPriceRow:
      type: object
      properties:
        mtu_start:
          description: Market Time Unit start (ISO 8601 UTC). Each MTU is a 15-minute settlement interval.
          type: string
          format: date-time
        direction:
          description: Reserve direction the capacity is procured for.
          type: string
          enum:
            - up
            - down
        price_eur_mw_h:
          description: BBCM-cleared mFRR capacity availability price (paid per MW of qualified capacity per hour). Null when no capacity procured in this direction.
          title: price_eur_mw_h (EUR/MW/h)
          type:
            - number
            - "null"
      required:
        - mtu_start
        - direction
      additionalProperties: false
    MfrrCapacityPriceResponse:
      type: object
      description: Snapshot envelope for the Estonia mFRR capacity prices dataset.
      properties:
        schema_version:
          type: string
          const: "1.0"
          description: JSON file schema version. Bumped on additive changes; major breaking changes go to /v2.
        generated_at:
          type: string
          format: date-time
          description: When the pipeline wrote this file (ISO 8601 UTC).
        meta:
          type: object
          properties:
            date_modified:
              type: string
              format: date-time
              description: Upstream snapshot timestamp from the pipeline.
          required:
            - date_modified
          additionalProperties: true
        rows:
          type: array
          items:
            $ref: "#/components/schemas/MfrrCapacityPriceRow"
      required:
        - rows
    AfrrCapacityPriceRow:
      type: object
      properties:
        mtu_start:
          description: Market Time Unit start (ISO 8601 UTC). Each MTU is a 15-minute settlement interval.
          type: string
          format: date-time
        direction:
          description: Reserve direction the capacity is procured for.
          type: string
          enum:
            - up
            - down
        price_eur_mw_h:
          description: BBCM-cleared aFRR capacity availability price (paid per MW of qualified capacity per hour). Null when no capacity procured in this direction.
          title: price_eur_mw_h (EUR/MW/h)
          type:
            - number
            - "null"
      required:
        - mtu_start
        - direction
      additionalProperties: false
    AfrrCapacityPriceResponse:
      type: object
      description: Snapshot envelope for the Estonia aFRR capacity prices dataset.
      properties:
        schema_version:
          type: string
          const: "1.0"
          description: JSON file schema version. Bumped on additive changes; major breaking changes go to /v2.
        generated_at:
          type: string
          format: date-time
          description: When the pipeline wrote this file (ISO 8601 UTC).
        meta:
          type: object
          properties:
            date_modified:
              type: string
              format: date-time
              description: Upstream snapshot timestamp from the pipeline.
          required:
            - date_modified
          additionalProperties: true
        rows:
          type: array
          items:
            $ref: "#/components/schemas/AfrrCapacityPriceRow"
      required:
        - rows
    ImbalancePriceRow:
      type: object
      properties:
        mtu_start:
          description: Settlement period start (ISO 8601 UTC). 15-minute period under EBGL Article 53.
          type: string
          format: date-time
        price_eur_mwh:
          description: Single-direction imbalance settlement price for the EE bidding zone. Derived from the marginal balancing-energy bid activated through MARI/PICASSO.
          title: price_eur_mwh (EUR/MWh)
          type:
            - number
            - "null"
      required:
        - mtu_start
      additionalProperties: false
    ImbalancePriceResponse:
      type: object
      description: Snapshot envelope for the Estonia imbalance price dataset.
      properties:
        schema_version:
          type: string
          const: "1.0"
          description: JSON file schema version. Bumped on additive changes; major breaking changes go to /v2.
        generated_at:
          type: string
          format: date-time
          description: When the pipeline wrote this file (ISO 8601 UTC).
        meta:
          type: object
          properties:
            date_modified:
              type: string
              format: date-time
              description: Upstream snapshot timestamp from the pipeline.
          required:
            - date_modified
          additionalProperties: true
        rows:
          type: array
          items:
            $ref: "#/components/schemas/ImbalancePriceRow"
      required:
        - rows
    DayAheadSpotRow:
      type: object
      properties:
        mtu_start:
          description: Hour start (ISO 8601 UTC). Day-ahead clears one price per hour; on/after 1 October 2025 SDAC moves to 15-minute MTU.
          type: string
          format: date-time
        price_eur_mwh:
          description: "SDAC-cleared day-ahead price for the EE bidding zone. Source: Nord Pool / ENTSO-E Transparency Platform."
          title: price_eur_mwh (EUR/MWh)
          type:
            - number
            - "null"
      required:
        - mtu_start
      additionalProperties: false
    DayAheadSpotResponse:
      type: object
      description: Snapshot envelope for the Estonia day-ahead spot price dataset.
      properties:
        schema_version:
          type: string
          const: "1.0"
          description: JSON file schema version. Bumped on additive changes; major breaking changes go to /v2.
        generated_at:
          type: string
          format: date-time
          description: When the pipeline wrote this file (ISO 8601 UTC).
        meta:
          type: object
          properties:
            date_modified:
              type: string
              format: date-time
              description: Upstream snapshot timestamp from the pipeline.
          required:
            - date_modified
          additionalProperties: true
        rows:
          type: array
          items:
            $ref: "#/components/schemas/DayAheadSpotRow"
      required:
        - rows
    GridFrequencyRow:
      type: object
      properties:
        mtu_start:
          description: Sample timestamp (ISO 8601 UTC). Frequency is sampled at fixed intervals from Elering telemetry.
          type: string
          format: date-time
        frequency_hz:
          description: System frequency for the Baltic LFC block within the Continental European Synchronous Area. Nominal 50.000 Hz.
          title: frequency_hz (Hz)
          type:
            - number
            - "null"
      required:
        - mtu_start
      additionalProperties: false
    GridFrequencyResponse:
      type: object
      description: Snapshot envelope for the Estonia grid frequency dataset.
      properties:
        schema_version:
          type: string
          const: "1.0"
          description: JSON file schema version. Bumped on additive changes; major breaking changes go to /v2.
        generated_at:
          type: string
          format: date-time
          description: When the pipeline wrote this file (ISO 8601 UTC).
        meta:
          type: object
          properties:
            date_modified:
              type: string
              format: date-time
              description: Upstream snapshot timestamp from the pipeline.
          required:
            - date_modified
          additionalProperties: true
        rows:
          type: array
          items:
            $ref: "#/components/schemas/GridFrequencyRow"
      required:
        - rows