{"openapi":"3.1.0","info":{"title":"KNMI Data Platform (BYOK) API","version":"0.1.0","description":"KNMI Data Platform (BYOK) lets an AI assistant read your own KNMI Data Platform data through the KNMI Data Platform API with a key you supply (KNMI Data Platform API key). Read-only: 8 tools (list_collections, get_collection, list_stations, get_station_observations, get_position_data, list_instances, list_dataset_files, get_file_download_url). The BYOK key travels with each request, is used for...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-knmidata.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-knmidata/docs"},"termsOfService":"https://connectorbay.com/byok-knmidata/terms"},"servers":[{"url":"https://byok-knmidata.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-knmidata/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_collections":{"post":{"operationId":"list_collections","summary":"List the EDR collections KNMI offers (in-situ observations at 10-minute, hourly, daily, monthly and annual steps, plus g","description":"List the EDR collections KNMI offers (in-situ observations at 10-minute, hourly, daily, monthly and annual steps, plus gridded daily datasets). Use for \"Which KNMI weather datasets can I query by location\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_collectionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_collection":{"post":{"operationId":"get_collection","summary":"Show one EDR collection: its description, temporal extent, supported query types and the parameter names you can request","description":"Show one EDR collection: its description, temporal extent, supported query types and the parameter names you can request. Use for \"What parameters and time range does the KNMI 10-minute observations collection have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"collection_id":{"description":"EDR collection name, for example '10-minute-in-situ-meteorological-observations' (list them with list_collections).","maxLength":200,"title":"Collection Id","type":"string"}},"required":["collection_id"],"title":"get_collectionArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_stations":{"post":{"operationId":"list_stations","summary":"List the locations (weather stations) of a collection as GeoJSON features, optionally limited to a bounding box or time.","description":"List the locations (weather stations) of a collection as GeoJSON features, optionally limited to a bounding box or time. Use for \"Which KNMI weather stations are in the 10-minute observations collection\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"collection_id":{"description":"EDR collection name, for example '10-minute-in-situ-meteorological-observations' (list them with list_collections).","maxLength":200,"title":"Collection Id","type":"string"},"bbox":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Bounding box west,south,east,north in degrees, for example 3.3,50.7,7.3,53.6.","title":"Bbox"},"datetime":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"RFC 3339 time or interval, for example 2026-10-15T06:00:00Z/2026-10-15T18:00:00Z; use .. for an open end.","title":"Datetime"}},"required":["collection_id"],"title":"list_stationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_station_observations":{"post":{"operationId":"get_station_observations","summary":"Get observations for one station of a collection over a time interval, as CoverageJSON. Use for \"What was the temperatur","description":"Get observations for one station of a collection over a time interval, as CoverageJSON. Use for \"What was the temperature at De Bilt between 06:00 and 18:00 UTC on 19 July 2022\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"collection_id":{"description":"EDR collection name, for example '10-minute-in-situ-meteorological-observations' (list them with list_collections).","maxLength":200,"title":"Collection Id","type":"string"},"location_id":{"description":"Station identifier from list_stations, for example '0-20000-0-06260'.","maxLength":200,"title":"Location Id","type":"string"},"datetime":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"RFC 3339 time or interval, for example 2026-10-15T06:00:00Z/2026-10-15T18:00:00Z; use .. for an open end.","title":"Datetime"},"parameter_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated parameter names to return, for example 'ta,rh'; valid names are in the collection metadata.","title":"Parameter Name"}},"required":["collection_id","location_id"],"title":"get_station_observationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_position_data":{"post":{"operationId":"get_position_data","summary":"Get collection data at one coordinate given as a WKT point, optionally for a time interval and parameter list. Use for \"","description":"Get collection data at one coordinate given as a WKT point, optionally for a time interval and parameter list. Use for \"What does the KNMI gridded daily mean temperature say for the point 5.1 52.1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"collection_id":{"description":"EDR collection name, for example '10-minute-in-situ-meteorological-observations' (list them with list_collections).","maxLength":200,"title":"Collection Id","type":"string"},"coords":{"description":"WKT point, for example 'POINT(5.1 52.1)'.","maxLength":200,"title":"Coords","type":"string"},"datetime":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"RFC 3339 time or interval, for example 2026-10-15T06:00:00Z/2026-10-15T18:00:00Z; use .. for an open end.","title":"Datetime"},"parameter_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated parameter names to return, for example 'ta,rh'; valid names are in the collection metadata.","title":"Parameter Name"}},"required":["collection_id","coords"],"title":"get_position_dataArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_instances":{"post":{"operationId":"list_instances","summary":"List the data instances (model runs or dataset versions) of an EDR collection. Use for \"Which instances does the KNMI wi","description":"List the data instances (model runs or dataset versions) of an EDR collection. Use for \"Which instances does the KNMI wins50 collection have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"collection_id":{"description":"EDR collection name, for example '10-minute-in-situ-meteorological-observations' (list them with list_collections).","maxLength":200,"title":"Collection Id","type":"string"}},"required":["collection_id"],"title":"list_instancesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_dataset_files":{"post":{"operationId":"list_dataset_files","summary":"List files of a KNMI Open Data API dataset version, sorted and paginated (up to 1000 per page). Use for \"What are the ne","description":"List files of a KNMI Open Data API dataset version, sorted and paginated (up to 1000 per page). Use for \"What are the newest files in the 10-minute observations dataset\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_name":{"description":"Dataset name from the KNMI Data Platform catalogue, for example '10-minute-in-situ-meteorological-observations'.","maxLength":200,"title":"Dataset Name","type":"string"},"version_id":{"description":"Dataset version, for example '1.0'.","maxLength":200,"title":"Version Id","type":"string"},"max_keys":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Files per page (1 to 1000).","title":"Max Keys"},"sorting":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"Sort direction: asc or desc.","title":"Sorting"},"order_by":{"anyOf":[{"enum":["filename","lastModified","created"],"type":"string"},{"type":"null"}],"default":"filename","description":"Sort key: filename, lastModified or created.","title":"Order By"},"next_page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Token from a previous answer to fetch the next page.","title":"Next Page Token"}},"required":["dataset_name","version_id"],"title":"list_dataset_filesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_file_download_url":{"post":{"operationId":"get_file_download_url","summary":"Get a temporary download link and metadata for one file of a dataset version (the file itself is not downloaded). Use fo","description":"Get a temporary download link and metadata for one file of a dataset version (the file itself is not downloaded). Use for \"Give me a download link for a specific KNMI observation file\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_name":{"description":"Dataset name, for example '10-minute-in-situ-meteorological-observations'.","maxLength":200,"title":"Dataset Name","type":"string"},"version_id":{"description":"Dataset version, for example '1.0'.","maxLength":200,"title":"Version Id","type":"string"},"filename":{"description":"File name from list_dataset_files.","maxLength":200,"title":"Filename","type":"string"}},"required":["dataset_name","version_id","filename"],"title":"get_file_download_urlArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}