Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/korp-collectors

tests/fixtures/provider/provenance.json

{
  "fixtures": [
    {
      "file": "cbs-odata.json",
      "collector": "cbs-odata",
      "provider": "Centraal Bureau voor de Statistiek (Statistics Netherlands)",
      "url": "https://opendata.cbs.nl/ODataApi/odata/37296eng/TypedDataSet?$top=5",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 11851,
      "blake3": "d25ed05f79101322686a2d975537fddb920086c64c02926dbb8caed3f0111880",
      "access": "public_keyless_endpoint",
      "note": "Five rows of CBS table 37296eng through the keyless OData endpoint — the OData `value` envelope."
    },
    {
      "file": "domstol-rattspraxis.json",
      "collector": "domstol-rattspraxis",
      "provider": "Sveriges Domstolar",
      "url": "https://rattspraxis.etjanst.domstol.se/api/v1/publiceringar?sortorder=publiceringstid&pagesize=5",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 32725,
      "blake3": "f740d12bdcc9e883da9f3cc2d7a1aa470ee9fe5514cc9ad572415a889d1c92f0",
      "access": "public_keyless_endpoint",
      "note": "Five published court decisions from the keyless rättspraxis service."
    },
    {
      "file": "energy-charts-public-power-de.json",
      "collector": "energy-charts-power",
      "provider": "Fraunhofer ISE (Energy-Charts)",
      "url": "https://api.energy-charts.info/public_power?country=de",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 7635,
      "blake3": "e350d39d33085adeb73494eea2b9988559b11d2fdf7ac1a5494873958f1f4786",
      "access": "public_keyless_endpoint",
      "note": "Energy-Charts is keyless. German public power generation by production type — a parallel-arrays shape (unix_seconds plus one series per type) rather than a record list."
    },
    {
      "file": "entsoe-acknowledgement-auth-failed.xml",
      "collector": "entsoe",
      "provider": "ENTSO-E (European Network of Transmission System Operators for Electricity)",
      "url": "https://web-api.tp.entsoe.eu/api?documentType=A44&in_Domain=10Y1001A1001A46L&out_Domain=10Y1001A1001A46L&periodStart=202609050000&periodEnd=202609060000",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 833,
      "blake3": "93b58b55a108838f82705e8e856a1e1f2561b12e6f8caf753b7d21624917334f",
      "access": "provider_error_document",
      "note": "ENTSO-E's Transparency Platform serves NO payload at all without a securityToken, and its API guide is behind a JS-rendered Postman collection and a 403 Zendesk, so this IEC 62325 Acknowledgement_MarketDocument (HTTP 401, Reason code 999 'Authentication failed.') is the only real ENTSO-E document obtainable with no account. It is worth committing on its own merits: it is the exact shape parse_entsoe_xml must NOT mistake for an empty result window."
    },
    {
      "file": "gbif-occurrences.json",
      "collector": "gbif-occurrences",
      "provider": "GBIF (Global Biodiversity Information Facility)",
      "url": "https://api.gbif.org/v1/occurrence/search?hasCoordinate=true&limit=5",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 30548,
      "blake3": "8252dec6e349c229e6a53c223b4938f97d20be1a225f355a384dbfe8d8a90c10",
      "access": "public_keyless_endpoint",
      "note": "Five georeferenced occurrence records from GBIF's keyless API."
    },
    {
      "file": "gleif-lei-se.json",
      "collector": "gleif-lei",
      "provider": "GLEIF (Global Legal Entity Identifier Foundation)",
      "url": "https://api.gleif.org/api/v1/lei-records?filter%5Bentity.legalAddress.country%5D=SE&page%5Bsize%5D=3",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 7580,
      "blake3": "c4f3d0741c4fb451733915362d1b6991afe63f1c896aa4eab4a8044da79659c0",
      "access": "public_keyless_endpoint",
      "note": "Three Swedish LEI records from GLEIF's keyless public API — the JSON:API envelope the collector's records pointer navigates."
    },
    {
      "file": "kolada-kpi.json",
      "collector": "kolada-kpi",
      "provider": "Rådet för främjande av kommunala analyser (RKA)",
      "url": "https://api.kolada.se/v3/kpi?per_page=5",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 2283,
      "blake3": "650c9839c57ffc95de49b76609828350453329e8403a5b1e10f9de3c67a1fbc1",
      "access": "public_keyless_endpoint",
      "note": "Kolada's municipal KPI catalogue, keyless. Five KPIs — enough to carry the envelope and repeated entries."
    },
    {
      "file": "metno-locationforecast.json",
      "collector": "metno-forecast",
      "provider": "MET Norway (Meteorologisk institutt)",
      "url": "https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=59.33&lon=18.07",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 38073,
      "blake3": "1342f3a288ec18ee3d786048c0440ac764222ddd4f2939b4b78fe2a2602f4d01",
      "access": "public_keyless_endpoint",
      "note": "Stockholm. MET Norway is keyless but REQUIRES an identifying User-Agent, which this fetcher sends for every request — that is a courtesy header the provider documents, not a credential."
    },
    {
      "file": "nordpool-dayahead-se3.json",
      "collector": "nordpool",
      "provider": "Nord Pool AS",
      "url": "https://dataportal-api.nordpoolgroup.com/api/DayAheadPrices?date=2026-09-05&market=DayAhead&deliveryArea=SE3&currency=SEK",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 11185,
      "blake3": "e14aa4d3379b3f88aac2d24110a6c32a568c477eee4aa5d062ab1504826b29de",
      "access": "public_keyless_endpoint",
      "note": "Nord Pool's public data portal serves a day-ahead slice with no credential, which the collector's own doc comment already records; the LICENSED api it declares NORDPOOL_API_TOKEN for is a different endpoint. SE3, SEK, one delivery day, 15-minute MTU — the modern `multiAreaEntries` shape, which is the branch parse_nordpool_json takes first."
    },
    {
      "file": "opensky-states-nordic-bbox.json",
      "collector": "opensky-europe-bbox",
      "provider": "The OpenSky Network",
      "url": "https://opensky-network.org/api/states/all?lamin=55.0&lomin=10.0&lamax=60.0&lomax=20.0",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 16226,
      "blake3": "5c4dc0190f59d9cb5d6d7b9e30268e24a2b27feb6f501d525e85fe7099c8b919",
      "access": "public_keyless_endpoint",
      "note": "OpenSky documents an anonymous tier (unauthenticated, bucketed by IP, most-recent state vectors at 10-second resolution) — no account, no OPENSKY_CLIENT_ID. A bounding box over the Nordic region so the payload is a few hundred aircraft rather than the whole sky. The 18-element state-vector array order is the provider's, and it is precisely what a synthetic fixture cannot be trusted to have right."
    },
    {
      "file": "polisen-events.json",
      "collector": "polisen-events",
      "provider": "Polismyndigheten (the Swedish Police Authority)",
      "url": "https://polisen.se/api/events",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 189304,
      "blake3": "74b19de93ba11a767628847e0709644747ee1a913f82ff6510e6e3e06d5d2bc5",
      "access": "public_keyless_endpoint",
      "note": "Polisen's event feed is keyless and serves no page-size parameter, so this is the whole current window as the collector itself would read it."
    },
    {
      "file": "riksdagen-dokumentlista.json",
      "collector": "riksdagen-dokument",
      "provider": "Sveriges riksdag (öppna data)",
      "url": "https://data.riksdagen.se/dokumentlista/?sok=&doktyp=mot&utformat=json&sz=5",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 29184,
      "blake3": "dee90ffb347ab60ad4cdcfa7b065b5d914a192d3da66e1796741ad8aab4ea03b",
      "access": "public_keyless_endpoint",
      "note": "Riksdagen's open-data API is keyless and documented as such. Five motions, the smallest page that still shows the dokumentlista envelope and repeated dokument entries."
    },
    {
      "file": "trafikverket-error-get-refused.json",
      "collector": "trafikverket-trainpos",
      "provider": "Trafikverket (the Swedish Transport Administration)",
      "url": "https://api.trafikinfo.trafikverket.se/v2/data.json",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 103,
      "blake3": "4e4f2ce961f7f052d4aaec7cc330e84a29e58c97fdbfaa950b23e8f212186d06",
      "access": "provider_error_document",
      "note": "Trafikverket's API is POST-only and key-gated: with no TRAFIKVERKET_API_KEY there is no data document to be had at any URL. This is its RESPONSE/RESULT/ERROR envelope, which is the same envelope a key-bearing request gets back when the query is wrong — so it proves the collector reads the provider's error shape rather than reading an error as zero trains."
    },
    {
      "file": "usgs-quakes-all-hour.json",
      "collector": "usgs-earthquakes",
      "provider": "United States Geological Survey",
      "url": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 6012,
      "blake3": "257fed3515614a91f7b7ff0e5af518234ca2da2413e1c0a23a75236ecc6cccec",
      "access": "public_keyless_endpoint",
      "note": "The USGS hourly summary feed, keyless — one hour of global seismicity as GeoJSON. Small by nature, and it exercises the geometry/coordinate path rather than a flat record list."
    },
    {
      "file": "worldbank-population.json",
      "collector": "worldbank-indicators",
      "provider": "The World Bank",
      "url": "https://api.worldbank.org/v2/country/all/indicator/SP.POP.TOTL?format=json&per_page=5",
      "method": "GET",
      "fetched_utc": "2026-09-06",
      "bytes": 1181,
      "blake3": "d1f95321669d53f3e96333521d7aeccb5bbde5a6905585f14c80b12e1937164b",
      "access": "public_keyless_endpoint",
      "note": "SP.POP.TOTL for five country-years. The World Bank's v2 JSON is a TWO-ELEMENT array whose first element is pagination and whose second is the data — a shape a hand-written fixture routinely gets wrong."
    }
  ],
  "unobtainable": [
    {
      "collector": "bolagsverket-organisationer",
      "provider": "Bolagsverket (the Swedish Companies Registration Office)",
      "reason": "bolagsverket.se answers an automated fetch with a CAPTCHA verification page instead of its API documentation (tried /omoss/oppnadata/apier.html and /apierochoppnadata/hamtaforetagsinformation/apiforatthamtaforetagsinformation.3988.html), and portal.api.bolagsverket.se answers HTTP 403 to an anonymous request (tried /oppna-data/foretagsinformation/v2/openapi.json). Bolagsverket documents a test environment with test companies, but reaching it requires the same signed agreement and client credentials as production",
      "checked_utc": "2026-09-06"
    },
    {
      "collector": "scb-foretagsregistret",
      "provider": "Statistiska centralbyrån (Statistics Sweden)",
      "reason": "SCB does not PUBLISH företagsregistret's endpoint at all — it is issued together with the credential, which is why this collector's declared source is an RFC 2606 `example` placeholder rather than a URL. With no endpoint published there is nothing for an anonymous reader to fetch and no documented sample response to copy. (SCB's OTHER open API, PxWeb at api.scb.se, is keyless and is a different collector)",
      "checked_utc": "2026-09-06"
    },
    {
      "collector": "entsoe_day_ahead",
      "provider": "ENTSO-E (European Network of Transmission System Operators for Electricity)",
      "reason": "the Transparency Platform serves no payload whatsoever without a securityToken (HTTP 401 with an Acknowledgement_MarketDocument), and its RESTful API guide is a JS-rendered Postman collection plus a knowledge base that answers HTTP 403 to an anonymous fetch, so no documented A44 example can be taken either. The acknowledgement document IS committed, under the `entsoe` collector, and the three ENTSO-E collectors share parse_entsoe_xml",
      "checked_utc": "2026-09-06"
    },
    {
      "collector": "entsoe_generation",
      "provider": "ENTSO-E (European Network of Transmission System Operators for Electricity)",
      "reason": "as entsoe_day_ahead — no anonymous payload and no anonymously reachable documentation example. Shares parse_entsoe_xml with `entsoe`, whose refusal document is committed",
      "checked_utc": "2026-09-06"
    }
  ]
}