SP Energy Networks Open Data Explore API

The live, anonymous REST API behind the SP Energy Networks Open Data Portal — ScottishPower's regulated distribution and transmission arm publishing its network data under Ofgem's Data Best Practice "presumed open" licence condition. Implements the Opendatasoft Explore API v2.1 contract (OpenAPI 3.0.3, 16 paths) over a catalogue of 150 datasets covering the embedded capacity register, network flow, historic substation demand curves, LV monitoring, smart-meter penetration by transformer, secondary substations, generation heat maps, connections insight and per-dataset data-quality scores. Verified on 2026-07-27 with no API key and no account: GET /catalog/datasets returned HTTP 200 with total_count 150, access-control-allow-origin "*", and x-ratelimit-limit 5000 with x-ratelimit-remaining 4990 resetting daily. Records, facets, attachments and exports (CSV, Parquet, GPX, DCAT-AP RDF/XML) are all served from the same base URL. An optional apikey query parameter, obtainable from a free self-serve portal account, raises quotas; none is required for public datasets. Data is published under the SP Energy Networks Open Data Licence, which the portal states is based on the Creative Commons Attribution 4.0 International Public Licence.

OpenAPI Specification

scottishpower-spen-open-data-explore-api-openapi.json Raw ↑
{
  "openapi": "3.0.3",
  "info": {
    "title": "Explore API",
    "version": "v2.1",
    "description": "The Opendatasoft Explore API v2 is organized around REST. It provides access to all the data available through the platform in a coherent, hierarchical way.\n\n- Only the HTTP `GET` method is supported.\n- All API endpoints return JSON.\n- Endpoints are organized in a hierarchical way describing the relative relationship between objects.\n- All responses contain a list of links allowing easy and relevant navigation through the API endpoints.\n- All endpoints use the [Opendatasoft Query Language (ODSQL)](https://help.huwise.com/apis/ods-explore-v2/#section/Opendatasoft-Query-Language-(ODSQL)). This means that, most of the time, parameters work the same way for all endpoints.\n- While the `records` endpoint is subject to a [limited number of returned records](https://help.huwise.com/apis/ods-explore-v2/#tag/Dataset/operation/getRecords), the `exports` endpoint has no limitations.",
    "contact": {
      "email": "support@opendatasoft.com"
    },
    "license": {
      "name": "Copyright Opendatasoft",
      "url": "https://legal.huwise.com/en/terms-of-use.html"
    },
    "x-provenance": "Not a ScottishPower-authored specification. This is the Opendatasoft Explore API v2.1 contract as served by the SP Energy Networks Open Data Portal \u2014 SP Energy Networks is ScottishPower's licensed electricity distribution (SP Distribution, SP Manweb) and transmission (SP Transmission) arm, and the portal footer reads '(c) 2024 Scottish Power Ltd. All rights reserved.' Harvested verbatim from the portal's own host; only this x-provenance / x-source-url / x-harvested block was added to info, nothing else was altered. The servers[] entry is SPEN's own base URL as published by the portal. Verified live and fully anonymous on 2026-07-27: GET /catalog/datasets returned HTTP 200 with total_count 150, access-control-allow-origin '*', and x-ratelimit-limit 5000 per day with no API key supplied.",
    "x-source-url": "https://spenergynetworks.opendatasoft.com/api/explore/v2.1/swagger.json",
    "x-harvested": "2026-07-27",
    "x-harvest-http-status": 200,
    "x-portal": "https://spenergynetworks.opendatasoft.com/",
    "x-api-console": "https://spenergynetworks.opendatasoft.com/api/explore/v2.1/console",
    "x-data-licence": "https://spenergynetworks.opendatasoft.com/p/sp-energy-networks-open-data-licence/",
    "x-dataset-count-at-harvest": 150
  },
  "servers": [
    {
      "url": "https://spenergynetworks.opendatasoft.com/api/explore/v2.1"
    }
  ],
  "security": [
    {
      "apikey": []
    }
  ],
  "tags": [
    {
      "name": "Catalog",
      "description": "API to enumerate datasets"
    },
    {
      "name": "Dataset",
      "description": "API to work on records"
    }
  ],
  "paths": {
    "/catalog/datasets": {
      "get": {
        "summary": "Query catalog datasets",
        "operationId": "getDatasets",
        "tags": [
          "Catalog"
        ],
        "description": "Retrieve available datasets.",
        "parameters": [
          {
            "$ref": "#/components/parameters/select"
          },
          {
            "$ref": "#/components/parameters/where"
          },
          {
            "$ref": "#/components/parameters/order_by"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/refine"
          },
          {
            "$ref": "#/components/parameters/exclude"
          },
          {
            "$ref": "#/components/parameters/lang"
          },
          {
            "$ref": "#/components/parameters/timezone"
          },
          {
            "$ref": "#/components/parameters/group_by"
          },
          {
            "$ref": "#/components/parameters/include_links"
          },
          {
            "$ref": "#/components/parameters/include_app_metas"
          }
        ],
        "responses": {
          "200": {
            "description": "A list of available datasets",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/datasets"
                },
                "examples": {
                  "datasets": {
                    "$ref": "#/components/examples/datasets-v2.1"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/exports": {
      "get": {
        "summary": "List export formats",
        "operationId": "listExportFormats",
        "tags": [
          "Catalog"
        ],
        "description": "List available export formats",
        "responses": {
          "200": {
            "description": "A list of available export formats",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "links": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/links"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/exports/{format}": {
      "get": {
        "summary": "Export a catalog",
        "operationId": "exportDatasets",
        "tags": [
          "Catalog"
        ],
        "description": "Export a catalog in the desired format.",
        "parameters": [
          {
            "$ref": "#/components/parameters/format-catalog"
          },
          {
            "$ref": "#/components/parameters/select"
          },
          {
            "$ref": "#/components/parameters/where"
          },
          {
            "$ref": "#/components/parameters/order_by"
          },
          {
            "$ref": "#/components/parameters/group_by"
          },
          {
            "$ref": "#/components/parameters/limit_export"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/refine"
          },
          {
            "$ref": "#/components/parameters/exclude"
          },
          {
            "$ref": "#/components/parameters/lang"
          },
          {
            "$ref": "#/components/parameters/timezone"
          }
        ],
        "responses": {
          "200": {
            "description": "Return a file"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/exports/csv": {
      "get": {
        "summary": "Export a catalog in CSV",
        "operationId": "exportCatalogCSV",
        "tags": [
          "Catalog"
        ],
        "description": "Export a catalog in CSV (Comma Separated Values). Specific parameters are described here",
        "parameters": [
          {
            "name": "delimiter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                ";",
                ",",
                "\t",
                "|"
              ],
              "default": ";"
            },
            "description": "Sets the field delimiter of the CSV export"
          },
          {
            "name": "list_separator",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": ","
            },
            "description": "Sets the separator character used for multivalued strings"
          },
          {
            "name": "quote_all",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Set it to true to force quoting all strings, i.e. surrounding all strings with quote characters"
          },
          {
            "name": "with_bom",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "description": "Set it to true to force the first characters of the CSV file to be a Unicode Byte Order Mask (0xFEFF). It usually makes Excel correctly open the output CSV file without warning.\n**Warning:** the default value of this parameter is `false` in v2.0 and `true` starting with v2.1"
          }
        ],
        "responses": {
          "200": {
            "description": "Return a file"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/exports/dcat{dcat_ap_format}": {
      "get": {
        "summary": "Export a catalog in RDF/XML (DCAT)",
        "operationId": "exportCatalogDCAT",
        "tags": [
          "Catalog"
        ],
        "description": "Export a catalog in RDF/XML described with DCAT (Data Catalog Vocabulary). Specific parameters are described here",
        "parameters": [
          {
            "$ref": "#/components/parameters/dcat_format"
          },
          {
            "name": "include_exports",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/enum-format-datasets"
            },
            "description": "Sets the datasets exports exposed in the DCAT export. By default, all exports are exposed.",
            "examples": {
              "legacy": {
                "summary": "Only expose csv, json and geojson datasets exports",
                "value": "csv,json,geojson"
              }
            }
          },
          {
            "name": "use_labels_in_exports",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "description": "If set to `true`, this parameter will make distributions output the label of each field rather than its name. This parameter only applies on distributions that contain a list of the fields in their output (e.g., CSV, XLSX)."
          }
        ],
        "responses": {
          "200": {
            "description": "Return a file"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/facets": {
      "get": {
        "summary": "List facet values",
        "operationId": "getDatasetsFacets",
        "tags": [
          "Catalog"
        ],
        "description": "Enumerate facet values for datasets and returns a list of values for each facet.\nCan be used to implement guided navigation in large result sets.",
        "parameters": [
          {
            "$ref": "#/components/parameters/facet"
          },
          {
            "$ref": "#/components/parameters/refine"
          },
          {
            "$ref": "#/components/parameters/exclude"
          },
          {
            "$ref": "#/components/parameters/where"
          },
          {
            "$ref": "#/components/parameters/timezone"
          }
        ],
        "responses": {
          "200": {
            "description": "An enumeration of facets",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "links": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/links"
                      }
                    },
                    "facets": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/facet_enumeration"
                      }
                    }
                  }
                },
                "examples": {
                  "catalog_facets": {
                    "$ref": "#/components/examples/catalog_facets"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}/records": {
      "get": {
        "summary": "Query dataset records",
        "operationId": "getRecords",
        "tags": [
          "Dataset"
        ],
        "description": "Perform a query on dataset records.",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          },
          {
            "$ref": "#/components/parameters/select"
          },
          {
            "$ref": "#/components/parameters/where"
          },
          {
            "$ref": "#/components/parameters/group_by"
          },
          {
            "$ref": "#/components/parameters/order_by"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/refine"
          },
          {
            "$ref": "#/components/parameters/exclude"
          },
          {
            "$ref": "#/components/parameters/lang"
          },
          {
            "$ref": "#/components/parameters/timezone"
          },
          {
            "$ref": "#/components/parameters/include_links"
          },
          {
            "$ref": "#/components/parameters/include_app_metas"
          }
        ],
        "responses": {
          "200": {
            "description": "Records",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/records"
                },
                "examples": {
                  "records": {
                    "$ref": "#/components/examples/records-v2.1"
                  },
                  "group_by_country": {
                    "$ref": "#/components/examples/group_by_country-v2.1"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}/exports": {
      "get": {
        "summary": "List export formats",
        "operationId": "listDatasetExportFormats",
        "tags": [
          "Dataset"
        ],
        "description": "List available export formats",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          }
        ],
        "responses": {
          "200": {
            "description": "A list of available export formats",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "links": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/links"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}/exports/{format}": {
      "get": {
        "summary": "Export a dataset",
        "operationId": "exportRecords",
        "tags": [
          "Dataset"
        ],
        "description": "Export a dataset in the desired format.\n**Note:** The `group_by` parameter is only available on exports starting with the v2.1",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          },
          {
            "$ref": "#/components/parameters/format-datasets"
          },
          {
            "$ref": "#/components/parameters/select"
          },
          {
            "$ref": "#/components/parameters/where"
          },
          {
            "$ref": "#/components/parameters/order_by"
          },
          {
            "$ref": "#/components/parameters/group_by"
          },
          {
            "$ref": "#/components/parameters/limit_export"
          },
          {
            "$ref": "#/components/parameters/refine"
          },
          {
            "$ref": "#/components/parameters/exclude"
          },
          {
            "$ref": "#/components/parameters/lang"
          },
          {
            "$ref": "#/components/parameters/timezone"
          },
          {
            "$ref": "#/components/parameters/use_labels"
          },
          {
            "$ref": "#/components/parameters/compressed"
          },
          {
            "$ref": "#/components/parameters/epsg"
          }
        ],
        "responses": {
          "200": {
            "description": "Return a file"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}/exports/csv": {
      "get": {
        "summary": "Export a dataset in CSV",
        "operationId": "exportRecordsCSV",
        "tags": [
          "Dataset"
        ],
        "description": "Export a dataset in CSV (Comma Separated Values). Specific parameters are described here",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          },
          {
            "name": "delimiter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                ";",
                ",",
                "\t",
                "|"
              ],
              "default": ";"
            },
            "description": "Sets the field delimiter of the CSV export"
          },
          {
            "name": "list_separator",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "default": ","
            },
            "description": "Sets the separator character used for multivalued strings"
          },
          {
            "name": "quote_all",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Set it to true to force quoting all strings, i.e. surrounding all strings with quote characters"
          },
          {
            "name": "with_bom",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "description": "Set it to true to force the first characters of the CSV file to be a Unicode Byte Order Mask (0xFEFF). It usually makes Excel correctly open the output CSV file without warning.\n**Warning:** the default value of this parameter is `false` in v2.0 and `true` starting with v2.1"
          }
        ],
        "responses": {
          "200": {
            "description": "Return a file"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}/exports/parquet": {
      "get": {
        "summary": "Export a dataset in Parquet",
        "operationId": "exportRecordsParquet",
        "tags": [
          "Dataset"
        ],
        "description": "Export a dataset in Parquet. Specific parameters are described here",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          },
          {
            "name": "parquet_compression",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "snappy",
                "zstd"
              ],
              "default": "snappy"
            },
            "description": "Sets the compression parameter for the Parquet export file"
          }
        ],
        "responses": {
          "200": {
            "description": "Return a file"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}/exports/gpx": {
      "get": {
        "summary": "Export a dataset in GPX",
        "operationId": "exportRecordsGPX",
        "tags": [
          "Dataset"
        ],
        "description": "Export a dataset in GPX. Specific parameters are described here",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          },
          {
            "name": "name_field",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Sets the field that is used as the 'name' attribute in the GPX output"
          },
          {
            "name": "description_field_list",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Sets the fields to use in the 'description' attribute of the GPX output"
          },
          {
            "name": "use_extension",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "description": "Set it to true to use the `<extension>` tag for attributes (as GDAL does). Set it to false to use the `<desc>` tag for attributes.\n**Warning:** the default value of this parameter is `false` in v2.0 and `true` starting with v2.1"
          }
        ],
        "responses": {
          "200": {
            "description": "Return a file"
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}": {
      "get": {
        "summary": "Show dataset information",
        "operationId": "getDataset",
        "tags": [
          "Catalog"
        ],
        "description": "Returns a list of available endpoints for the specified dataset, with metadata and endpoints.\n\nThe response includes the following links:\n* the attachments endpoint\n* the files endpoint\n* the records endpoint\n* the catalog endpoint.",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          },
          {
            "$ref": "#/components/parameters/select"
          },
          {
            "$ref": "#/components/parameters/lang"
          },
          {
            "$ref": "#/components/parameters/timezone"
          },
          {
            "$ref": "#/components/parameters/include_links"
          },
          {
            "$ref": "#/components/parameters/include_app_metas"
          }
        ],
        "responses": {
          "200": {
            "description": "The dataset",
            "content": {
              "application/json; charset=utf-8json": {
                "schema": {
                  "$ref": "#/components/schemas/dataset"
                },
                "examples": {
                  "dataset": {
                    "$ref": "#/components/examples/dataset-v2.1"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}/facets": {
      "get": {
        "summary": "List dataset facets",
        "operationId": "getRecordsFacets",
        "tags": [
          "Dataset"
        ],
        "description": "Enumerates facet values for records and returns a list of values for each facet.\nCan be used to implement guided navigation in large result sets.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          },
          {
            "$ref": "#/components/parameters/where"
          },
          {
            "$ref": "#/components/parameters/refine"
          },
          {
            "$ref": "#/components/parameters/exclude"
          },
          {
            "$ref": "#/components/parameters/facet"
          },
          {
            "$ref": "#/components/parameters/lang"
          },
          {
            "$ref": "#/components/parameters/timezone"
          }
        ],
        "responses": {
          "200": {
            "description": "Facets enumeration",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "links": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/links"
                      }
                    },
                    "facets": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/facet_enumeration"
                      }
                    }
                  }
                },
                "examples": {
                  "facets": {
                    "$ref": "#/components/examples/facets"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}/attachments": {
      "get": {
        "summary": "List dataset attachments",
        "operationId": "getDatasetAttachments",
        "tags": [
          "Dataset"
        ],
        "description": "Returns a list of all available attachments for a dataset.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          }
        ],
        "responses": {
          "200": {
            "description": "List of all available attachments",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "links": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/links"
                      }
                    },
                    "attachments": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/attachment"
                      }
                    }
                  }
                },
                "examples": {
                  "attachments": {
                    "$ref": "#/components/examples/attachments"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/catalog/datasets/{dataset_id}/records/{record_id}": {
      "get": {
        "summary": "Read a dataset record",
        "operationId": "getRecord",
        "tags": [
          "Dataset"
        ],
        "description": "Reads a single dataset record based on its identifier.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/dataset_id"
          },
          {
            "$ref": "#/components/parameters/record_id"
          },
          {
            "$ref": "#/components/parameters/select"
          },
          {
            "$ref": "#/components/parameters/lang"
          },
          {
            "$ref": "#/components/parameters/timezone"
          }
        ],
        "responses": {
          "200": {
            "description": "A single record",
            "content": {
              "application/json; charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/record"
                },
                "examples": {
                  "record": {
                    "$ref": "#/components/examples/record-v2.1"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/bad_request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/quota"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apikey": {
        "type": "apiKey",
        "description": "API key to make a

# --- truncated at 32 KB (79 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/scottishpower/refs/heads/main/openapi/scottishpower-spen-open-data-explore-api-openapi.json