Open Data - River level, Rainfall and Sea Data API
API change historyThe Natural Resources Wales River Level, Rainfall and Sea data API provides recent and historical data relating to river levels, rainfall totals, and sea (tide) levels. Readings are taken at monitoring stations located across Wales. This data is unverified and may be subject to change. Whilst we make every effort to ensure the accuracy of the information provided, neither Natural Resources Wales, nor its employees or agents can be held responsible for any inaccuracies or omissions, whether caused by negligence or otherwise.
Get All historic data by station / data type (River OR Rainfall OR Tidal)
Get All Historical Data for a specific station and parameter
Returned Properties
Geometry Property Name | Geometry Property Description | Type |
---|---|---|
coordinates | The Latitude and Longitude of the feature, in WGS84 coordinate ref | decimal |
Station Property Name | Property Description | Type |
---|---|---|
Location | Identifier for the station, as used by River Levels Online | decimal |
NameEN | Name of the station or location in English | string |
NameCY | Name of the station or location in Welsh | string |
StatusEN | The Status of the station (online or offline) in English | string |
StatusCY | The Status of the station (online or offline) in Welsh | string |
url | The URI of the monitoring station supplying the measure | string |
NGR | National Grid Reference Number of the station | string |
Parameter | The Parameter reference number | decimal |
paramNameEN | Name of the parameter being measured in English | string |
paramNameCY | Name of the parameter being measured in Welsh | string |
TitleEN | Title of the parameter being measured in English | string |
TitleCY | Title of the parameter being measured in Welsh | string |
parameterStatusEN | The status of parameter in English | string |
parameterStatusCY | The status of parameter in Welsh | string |
units | The unit in which this parameter is measured, e.g. m = Meter | string |
Parameter Readings | Parameter Property Description | Type |
---|---|---|
Value | The value of the reading | decimal |
time | The date and time at which the reading was taken | date |
Try it
Request
Request URL
Request parameters
-
Decimal
i.e. 4195
-
Decimal
i.e. 166
Request headers
Request body
Responses
200 OK
Success
Code samples
@ECHO OFF
curl -v -X GET "https://api.naturalresources.wales/rivers-and-seas/v1/api/StationData/historical?location={location}¶meter={parameter}"
-H "Ocp-Apim-Subscription-Key: {subscription key}"
--data-ascii "{body}"
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;
namespace CSHttpClientSample
{
static class Program
{
static void Main()
{
MakeRequest();
Console.WriteLine("Hit ENTER to exit...");
Console.ReadLine();
}
static async void MakeRequest()
{
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{subscription key}");
var uri = "https://api.naturalresources.wales/rivers-and-seas/v1/api/StationData/historical?location={location}¶meter={parameter}&" + queryString;
var response = await client.GetAsync(uri);
}
}
}
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class JavaSample
{
public static void main(String[] args)
{
HttpClient httpclient = HttpClients.createDefault();
try
{
URIBuilder builder = new URIBuilder("https://api.naturalresources.wales/rivers-and-seas/v1/api/StationData/historical?location={location}¶meter={parameter}");
URI uri = builder.build();
HttpGet request = new HttpGet(uri);
request.setHeader("Ocp-Apim-Subscription-Key", "{subscription key}");
// Request body
StringEntity reqEntity = new StringEntity("{body}");
request.setEntity(reqEntity);
HttpResponse response = httpclient.execute(request);
HttpEntity entity = response.getEntity();
if (entity != null)
{
System.out.println(EntityUtils.toString(entity));
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>JSSample</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(function() {
var params = {
// Request parameters
};
$.ajax({
url: "https://api.naturalresources.wales/rivers-and-seas/v1/api/StationData/historical?location={location}¶meter={parameter}&" + $.param(params),
beforeSend: function(xhrObj){
// Request headers
xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{subscription key}");
},
type: "GET",
// Request body
data: "{body}",
})
.done(function(data) {
alert("success");
})
.fail(function() {
alert("error");
});
});
</script>
</body>
</html>
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString* path = @"https://api.naturalresources.wales/rivers-and-seas/v1/api/StationData/historical?location={location}¶meter={parameter}";
NSArray* array = @[
// Request parameters
@"entities=true",
];
NSString* string = [array componentsJoinedByString:@"&"];
path = [path stringByAppendingFormat:@"?%@", string];
NSLog(@"%@", path);
NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
[_request setHTTPMethod:@"GET"];
// Request headers
[_request setValue:@"{subscription key}" forHTTPHeaderField:@"Ocp-Apim-Subscription-Key"];
// Request body
[_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
NSURLResponse *response = nil;
NSError *error = nil;
NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];
if (nil != error)
{
NSLog(@"Error: %@", error);
}
else
{
NSError* error = nil;
NSMutableDictionary* json = nil;
NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
NSLog(@"%@", dataString);
if (nil != _connectionData)
{
json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
}
if (error || !json)
{
NSLog(@"Could not parse loaded json with error:%@", error);
}
NSLog(@"%@", json);
_connectionData = nil;
}
[pool drain];
return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';
$request = new Http_Request2('https://api.naturalresources.wales/rivers-and-seas/v1/api/StationData/historical?location={location}¶meter={parameter}');
$url = $request->getUrl();
$headers = array(
// Request headers
'Ocp-Apim-Subscription-Key' => '{subscription key}',
);
$request->setHeader($headers);
$parameters = array(
// Request parameters
);
$url->setQueryVariables($parameters);
$request->setMethod(HTTP_Request2::METHOD_GET);
// Request body
$request->setBody("{body}");
try
{
$response = $request->send();
echo $response->getBody();
}
catch (HttpException $ex)
{
echo $ex;
}
?>
########### Python 2.7 #############
import httplib, urllib, base64
headers = {
# Request headers
'Ocp-Apim-Subscription-Key': '{subscription key}',
}
params = urllib.urlencode({
})
try:
conn = httplib.HTTPSConnection('api.naturalresources.wales')
conn.request("GET", "/rivers-and-seas/v1/api/StationData/historical?location={location}¶meter={parameter}&%s" % params, "{body}", headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
####################################
########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64
headers = {
# Request headers
'Ocp-Apim-Subscription-Key': '{subscription key}',
}
params = urllib.parse.urlencode({
})
try:
conn = http.client.HTTPSConnection('api.naturalresources.wales')
conn.request("GET", "/rivers-and-seas/v1/api/StationData/historical?location={location}¶meter={parameter}&%s" % params, "{body}", headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
####################################
require 'net/http'
uri = URI('https://api.naturalresources.wales/rivers-and-seas/v1/api/StationData/historical?location={location}¶meter={parameter}')
request = Net::HTTP::Get.new(uri.request_uri)
# Request headers
request['Ocp-Apim-Subscription-Key'] = '{subscription key}'
# Request body
request.body = "{body}"
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
http.request(request)
end
puts response.body