Sheffield Solar API

The University of Sheffield's own research API, built and run by the Sheffield Solar group in the Department of Physics and Astronomy. It publishes PV_Live — near-real-time and historical estimates of solar photovoltaic generation on the GB transmission network, by Grid Supply Point and Public Electricity Supplier region — plus PV_Live_EU over European NUTS regions and PV_Forecast day-ahead forecasts. PV_Live read endpoints are keyless and answered 200 on probe; PV_Forecast returns 401 without a registered X-User-Id header. The institution publishes its own OpenAPI 3.1 document, a Swagger UI and a Redoc rendering. This is the one contract in this repository that Sheffield actually wrote.

Operations 51

GET /pvlive/api/v4/gsp/{gsp_id} PV_Live GSP data #
GET /pvlive/api/v4/pes/0 Pvlive Pes0 #
GET /pvlive/api/v4/pes/{pes_id} PV_Live PES data #
GET /pvlive/api/v4/gsp_list PV_Live GSP List #
GET /pvlive/api/v4/pes_list PV_Live PES List #
GET /pvlive/api/v4/passiv_reading_count/{start_at} Passiv Reading Count #
GET /pvlive/api/v4/peakgeneration Peakgeneration #
GET /pvlive_eu/api/v5/nuts_list PV_Live_EU NUTS List #
GET /pvlive_eu/api/v5/nuts/{nuts_code} PV_Live_EU NUTS #
GET /pvforecast/api/v4/hicast Hicast #
GET /pvforecast/api/v4/gsp/{gsp_id} PV_Forecast GSP data #
GET /pvforecast/api/v4/pes/0 Pvforecast Pes0 #
GET /pvforecast/api/v4/pes/{pes_id} PV_Forecast PES data #
GET /pvforecast/api/v4/forecast_bases_list Forecast Bases List0 #
GET /pvforecast/api/v4/forecast_bases_list/{gsp_id} Forecast Bases List #
GET /health/live Liveness Probe #
GET /health/ready Readiness Probe #
GET /admin/admin_page/{sort_col}/{direction} Admin Page #
GET /admin/admin_page/ Admin Page #
GET /admin/admin_form/{user_id} Admin User Form #
POST /admin/admin_page/region/{user_id} Submit Region #
POST /admin/admin_page/token/{user_id} Submit Token #
POST /admin/admin_page/token_gen/{user_id} Submit Token Gen #
POST /admin/admin_page/user/{user_id} Submit User #
POST /auth/forgot-password Reset:Forgot Password #
POST /auth/reset-password Reset:Reset Password #
POST /auth/request-verify-token Verify:Request-Token #
POST /auth/verify Verify:Verify #
POST /auth/cookie/login Auth:Cookie.Login #
POST /auth/cookie/logout Auth:Cookie.Logout #
POST /auth/jwt/login Auth:Jwt.Login #
POST /auth/jwt/logout Auth:Jwt.Logout #
POST /auth/jwt/register Register:Register #
GET /users/me Users:Current User #
PATCH /users/me Users:Patch Current User #
GET /users/{id} Users:User #
PATCH /users/{id} Users:Patch User #
DELETE /users/{id} Users:Delete User #
GET /user/login Get Login Form #
POST /user/login Handle Login #
POST /user/register Handle Registration #
GET /user/register Get Register Form #
GET /user/logout Handle Logout #
GET /user/user Pvforecast User #
GET /user/forgot-password Forgot Password Page #
POST /user/forgot-password Handle Forgot Password #
GET /user/reset-password Reset Password Page #
POST /user/reset-password Handle Reset Password Submission #
GET /user/verify Verify Page #
POST /user/verify Handle Verify #
GET /metrics Metrics #

Documentation

Specifications

Schemas & Data

Other Resources

🔗
InteractiveDocumentation
https://api.solar.sheffield.ac.uk/docs
🔗
Portal
https://api.solar.sheffield.ac.uk/pvlive/docs
🔗
TermsOfService
https://api.solar.sheffield.ac.uk/tandc
🔗
Status
https://api.solar.sheffield.ac.uk/pvlive/uptime
🔗
Support
https://api.solar.sheffield.ac.uk/pvlive/contact
🔗
SourceCode
https://github.com/SheffieldSolar/PV_Live-API
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/examples/university-of-sheffield-pvlive-gsp-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/examples/university-of-sheffield-pvlive-peakgeneration-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/examples/university-of-sheffield-pvlive-pes-list-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/examples/university-of-sheffield-pvforecast-auth-required-example.json
🔗
Rules
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/rules/university-of-sheffield-rules.yml
🔗
Vocabulary
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/vocabulary/university-of-sheffield-vocabulary.yml
🔗
JSONLD
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/json-ld/university-of-sheffield-context.jsonld
🔗
Errors
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/errors/university-of-sheffield-errors.yml
🔗
Lifecycle
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/lifecycle/university-of-sheffield-lifecycle.yml
🔗
OAuthScopes
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/scopes/university-of-sheffield-scopes.yml
🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/apis.yml

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/sheffield-solar-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

university-of-sheffield-sheffield-solar-api-openapi.yml Raw ↑
# x-method: derived
# source: https://api.solar.sheffield.ac.uk/openapi.json (pristine copy in openapi/_original/)
# generated: 2026-08-30
openapi: 3.1.0
info:
  title: Sheffield Solar API
  version: 0.1.0
  description: First-party API published by Sheffield Solar, a research group in the Department of Physics
    and Astronomy at the University of Sheffield. It serves PV_Live (near-real-time and historical estimates
    of solar PV generation on the GB transmission network, by GSP and PES region), PV_Live_EU (the same
    estimates for European NUTS regions) and PV_Forecast (day-ahead PV generation forecasts). PV_Live
    read endpoints are open and keyless; PV_Forecast requires a registered user identifier. Description
    text added by API Evangelist from the provider's own documentation at https://www.solar.sheffield.ac.uk/api/
    — info.description is absent from the machine-readable source.
  contact:
    name: Sheffield Solar, University of Sheffield
    url: https://api.solar.sheffield.ac.uk/pvlive/contact
  termsOfService: https://api.solar.sheffield.ac.uk/tandc
servers:
- url: https://api.solar.sheffield.ac.uk
  description: Production — probed live 2026-08-30; the source document ships no servers block.
x-operator: institution
x-provenance:
  generated: '2026-08-30'
  method: derived
  source: https://api.solar.sheffield.ac.uk/openapi.json
  pristine: openapi/_original/university-of-sheffield-sheffield-solar-openapi.json
  operator_evidence: api.solar.sheffield.ac.uk is under the University of Sheffield's own registrable
    domain sheffield.ac.uk; the API is generated and served by the institution's own Sheffield Solar research
    group, not by a vendor platform.
  additions:
  - servers[] — absent from source; set to the host the document was served from and probed live
  - info.description — absent from source; written from the provider's own public docs
  - info.contact — absent from source; the provider's own contact page
  - info.termsOfService — absent from source; the provider's own T&C page
  unchanged: paths, components and securitySchemes are exactly as published by the institution
paths:
  /pvlive/api/v4/gsp/{gsp_id}:
    get:
      tags:
      - pvlive
      summary: PV_Live GSP data
      description: Get PV_Live data for a specific GSP.
      operationId: pvlive_gsp_pvlive_api_v4_gsp__gsp_id__get
      parameters:
      - name: gsp_id
        in: path
        required: true
        schema:
          type: integer
          title: Gsp Id
      - name: start
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: YYYY-mm-ddTHH:MM
          - type: 'null'
          title: Start
        description: 'Optional start time. Format: YYYY-mm-ddTHH:MM'
      - name: end
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: YYYY-mm-ddTHH:MM
          - type: 'null'
          title: End
        description: 'Optional end time. Format: YYYY-mm-ddTHH:MM'
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      - name: extra_field
        in: query
        required: false
        schema:
          type: array
          items:
            enum:
            - bias_error
            - capacity_mwp
            - installedcapacity_mwp
            - lcl_mw
            - site_count
            - stats_error
            - ucl_mw
            - uncertainty_mw
            - updated_gmt
            type: string
          description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
          default: []
          title: Extra Field
        description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
      - name: extra_fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Extra Fields
          description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to
            include in the response.'
          deprecated: true
        description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to include
          in the response.'
        deprecated: true
      - name: updated_gmt_from
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Updated Gmt From
      - name: updated_gmt_to
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Updated Gmt To
      - name: period
        in: query
        required: false
        schema:
          anyOf:
          - const: '30'
            type: string
          - type: 'null'
          description: 'Deprecated: The 5 minute interval is no longer available. The 30 minute interval
            is the default.'
          deprecated: true
          title: Period
        description: 'Deprecated: The 5 minute interval is no longer available. The 30 minute interval
          is the default.'
        deprecated: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvlive/api/v4/pes/0:
    get:
      tags:
      - pvlive
      summary: Pvlive Pes0
      description: PES live generation data — (National Aggregate).
      operationId: pvlive_pes0_pvlive_api_v4_pes_0_get
      parameters:
      - name: start
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: YYYY-mm-ddTHH:MM
          - type: 'null'
          title: Start
        description: 'Optional start time. Format: YYYY-mm-ddTHH:MM'
      - name: end
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: YYYY-mm-ddTHH:MM
          - type: 'null'
          title: End
        description: 'Optional end time. Format: YYYY-mm-ddTHH:MM'
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      - name: extra_field
        in: query
        required: false
        schema:
          type: array
          items:
            enum:
            - bias_error
            - capacity_mwp
            - installedcapacity_mwp
            - lcl_mw
            - site_count
            - stats_error
            - ucl_mw
            - uncertainty_mw
            - updated_gmt
            type: string
          description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
          default: []
          title: Extra Field
        description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
      - name: extra_fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Extra Fields
          description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to
            include in the response.'
          deprecated: true
        description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to include
          in the response.'
        deprecated: true
      - name: updated_gmt_from
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Updated Gmt From
      - name: updated_gmt_to
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Updated Gmt To
      - name: period
        in: query
        required: false
        schema:
          anyOf:
          - const: '30'
            type: string
          - type: 'null'
          description: 'Deprecated: The 5 minute interval is no longer available. The 30 minute interval
            is the default.'
          deprecated: true
          title: Period
        description: 'Deprecated: The 5 minute interval is no longer available. The 30 minute interval
          is the default.'
        deprecated: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvlive/api/v4/pes/{pes_id}:
    get:
      tags:
      - pvlive
      summary: PV_Live PES data
      description: Get PV_Live data for a specific PES region.
      operationId: pvlive_pes_pvlive_api_v4_pes__pes_id__get
      parameters:
      - name: pes_id
        in: path
        required: true
        schema:
          type: integer
          maximum: 23
          minimum: 10
          title: Pes Id
      - name: start
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: YYYY-mm-ddTHH:MM
          - type: 'null'
          title: Start
        description: 'Optional start time. Format: YYYY-mm-ddTHH:MM'
      - name: end
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: YYYY-mm-ddTHH:MM
          - type: 'null'
          title: End
        description: 'Optional end time. Format: YYYY-mm-ddTHH:MM'
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      - name: extra_field
        in: query
        required: false
        schema:
          type: array
          items:
            enum:
            - bias_error
            - capacity_mwp
            - installedcapacity_mwp
            - lcl_mw
            - site_count
            - stats_error
            - ucl_mw
            - uncertainty_mw
            - updated_gmt
            type: string
          description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
          default: []
          title: Extra Field
        description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
      - name: extra_fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Extra Fields
          description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to
            include in the response.'
          deprecated: true
        description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to include
          in the response.'
        deprecated: true
      - name: updated_gmt_from
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Updated Gmt From
      - name: updated_gmt_to
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Updated Gmt To
      - name: period
        in: query
        required: false
        schema:
          anyOf:
          - const: '30'
            type: string
          - type: 'null'
          description: 'Deprecated: The 5 minute interval is no longer available. The 30 minute interval
            is the default.'
          deprecated: true
          title: Period
        description: 'Deprecated: The 5 minute interval is no longer available. The 30 minute interval
          is the default.'
        deprecated: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvlive/api/v4/gsp_list:
    get:
      tags:
      - pvlive
      summary: PV_Live GSP List
      description: List all GSP regions.
      operationId: pvlive_gsp_list_pvlive_api_v4_gsp_list_get
      parameters:
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvlive/api/v4/pes_list:
    get:
      tags:
      - pvlive
      summary: PV_Live PES List
      description: List all PES regions.
      operationId: pvlive_pes_list_pvlive_api_v4_pes_list_get
      parameters:
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvlive/api/v4/passiv_reading_count/{start_at}:
    get:
      tags:
      - pvlive
      summary: Passiv Reading Count
      description: Return 2-minute-bucketed Passiv reading counts for the 1-hour window.
      operationId: passiv_reading_count_pvlive_api_v4_passiv_reading_count__start_at__get
      parameters:
      - name: start_at
        in: path
        required: true
        schema:
          type: string
          format: date-time
          title: Start At
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvlive/api/v4/peakgeneration:
    get:
      tags:
      - pvlive
      summary: Peakgeneration
      description: Return the single highest national generation reading in the last 4 years.
      operationId: peakgeneration_pvlive_api_v4_peakgeneration_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
  /pvlive_eu/api/v5/nuts_list:
    get:
      tags:
      - pvlive_eu
      summary: PV_Live_EU NUTS List
      description: List all NUTS region codes and names.
      operationId: pvlive_eu_nuts_list_pvlive_eu_api_v5_nuts_list_get
      parameters:
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvlive_eu/api/v5/nuts/{nuts_code}:
    get:
      tags:
      - pvlive_eu
      summary: PV_Live_EU NUTS
      description: Return PVLive EU generation data for the given NUTS region code.
      operationId: pvlive_eu_nuts_pvlive_eu_api_v5_nuts__nuts_code__get
      parameters:
      - name: nuts_code
        in: path
        required: true
        schema:
          type: string
          title: Nuts Code
      - name: start
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: YYYY-mm-ddTHH:MM
          - type: 'null'
          title: Start
        description: 'Optional start time. Format: YYYY-mm-ddTHH:MM'
      - name: end
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: YYYY-mm-ddTHH:MM
          - type: 'null'
          title: End
        description: 'Optional end time. Format: YYYY-mm-ddTHH:MM'
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      - name: extra_field
        in: query
        required: false
        schema:
          type: array
          items:
            enum:
            - bias_error
            - capacity_mwp
            - installedcapacity_mwp
            - lcl_mw
            - site_count
            - stats_error
            - ucl_mw
            - uncertainty_mw
            - updated_gmt
            type: string
          description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
          default: []
          title: Extra Field
        description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
      - name: extra_fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Extra Fields
          description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to
            include in the response.'
          deprecated: true
        description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to include
          in the response.'
        deprecated: true
      - name: updated_gmt_from
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Updated Gmt From
      - name: updated_gmt_to
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Updated Gmt To
      - name: period
        in: query
        required: false
        schema:
          anyOf:
          - const: '30'
            type: string
          - type: 'null'
          description: 'Deprecated: The 5 minute interval is no longer available. The 30 minute interval
            is the default.'
          deprecated: true
          title: Period
        description: 'Deprecated: The 5 minute interval is no longer available. The 30 minute interval
          is the default.'
        deprecated: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvforecast/api/v4/hicast:
    get:
      tags:
      - pvforecast
      summary: Hicast
      description: Return hicast (historical forecast) data for GSP 0 (national aggregate).
      operationId: hicast_pvforecast_api_v4_hicast_get
      parameters:
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      - name: extra_field
        in: query
        required: false
        schema:
          type: array
          items:
            enum:
            - capacity_mwp
            - installedcapacity_mwp
            type: string
          description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
          default: []
          title: Extra Field
        description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
      - name: extra_fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Extra Fields
          description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to
            include in the response.'
          deprecated: true
        description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to include
          in the response.'
        deprecated: true
      - name: user_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: User Id
      - name: key
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Key
      - name: forecast_base_gmt
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Forecast Base Gmt
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvforecast/api/v4/gsp/{gsp_id}:
    get:
      tags:
      - pvforecast
      summary: PV_Forecast GSP data
      description: Get PV_Forecast data for a specific GSP.
      operationId: pvforecast_gsp_pvforecast_api_v4_gsp__gsp_id__get
      parameters:
      - name: gsp_id
        in: path
        required: true
        schema:
          type: integer
          title: Gsp Id
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      - name: extra_field
        in: query
        required: false
        schema:
          type: array
          items:
            enum:
            - capacity_mwp
            - installedcapacity_mwp
            type: string
          description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
          default: []
          title: Extra Field
        description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
      - name: extra_fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Extra Fields
          description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to
            include in the response.'
          deprecated: true
        description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to include
          in the response.'
        deprecated: true
      - name: user_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: User Id
      - name: key
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Key
      - name: forecast_base_gmt
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Forecast Base Gmt
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvforecast/api/v4/pes/0:
    get:
      tags:
      - pvforecast
      summary: Pvforecast Pes0
      description: PES forecast data.
      operationId: pvforecast_pes0_pvforecast_api_v4_pes_0_get
      parameters:
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      - name: extra_field
        in: query
        required: false
        schema:
          type: array
          items:
            enum:
            - capacity_mwp
            - installedcapacity_mwp
            type: string
          description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
          default: []
          title: Extra Field
        description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
      - name: extra_fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Extra Fields
          description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to
            include in the response.'
          deprecated: true
        description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to include
          in the response.'
        deprecated: true
      - name: user_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: User Id
      - name: key
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Key
      - name: forecast_base_gmt
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Forecast Base Gmt
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvforecast/api/v4/pes/{pes_id}:
    get:
      tags:
      - pvforecast
      summary: PV_Forecast PES data
      description: Get PV_Forecast data for a specific PES region.
      operationId: pvforecast_pes_pvforecast_api_v4_pes__pes_id__get
      parameters:
      - name: pes_id
        in: path
        required: true
        schema:
          type: integer
          maximum: 23
          minimum: 10
          title: Pes Id
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      - name: extra_field
        in: query
        required: false
        schema:
          type: array
          items:
            enum:
            - capacity_mwp
            - installedcapacity_mwp
            type: string
          description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
          default: []
          title: Extra Field
        description: 'A repeated query parameter. Example: ?extra_field=capacity_mwp&extra_field=installedcapacity_mwp'
      - name: extra_fields
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Extra Fields
          description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to
            include in the response.'
          deprecated: true
        description: 'Deprecated: Use extra_field instead. A comma-separated list of extra fields to include
          in the response.'
        deprecated: true
      - name: user_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: User Id
      - name: key
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Key
      - name: forecast_base_gmt
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Forecast Base Gmt
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvforecast/api/v4/forecast_bases_list:
    get:
      tags:
      - pvforecast
      summary: Forecast Bases List0
      description: Return a list of distinct forecast base datetimes for the given GSP.
      operationId: forecast_bases_list0_pvforecast_api_v4_forecast_bases_list_get
      parameters:
      - name: gsp_id
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
          - type: 'null'
          default: 0
          title: Gsp Id
      - name: user_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: User Id
      - name: key
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Key
      - name: start
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Start
      - name: end
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: End
      - name: data_format
        in: query
        required: false
        schema:
          enum:
          - csv
          - json
          type: string
          default: json
          title: Data Format
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /pvforecast/api/v4/forecast_bases_list/{gsp_id}:
    get:
      tags:
      - pvforecast
      summary: Forecast Bases List
      description: Return a list of distinct forecast base datetimes for the given GSP.
      operationId: forecast_bases_list_pvforecast_api_v4_forecast_bases_list__gsp_id__get
      parameters:
      - name: gsp_id
        in: path
        required: true
        schema:
          type: integer
          title: Gsp Id
      - name: gsp_id
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
          - type: 'null'
          default: 0
          title: Gsp Id
      - name: user_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: User Id
      - name: key
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Key
      - name: start
        in: query
        required: fal

# --- truncated at 32 KB (74 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/university-of-sheffield/refs/heads/main/openapi/university-of-sheffield-sheffield-solar-api-openapi.yml