Edit me


Returns information about surfing conditions at a specific beach ID, including the surf height, water temperature, wind, and tide. Also provides an overall recommendation about whether to go surfing.

{beachId} refers to the ID for the beach you want to look up. All Beach ID codes are available from our site.

Endpoint definition


HTTP method



Parameter Description Data Type
days Optional. The number of days to include in the response. Default is 3. integer
time Optional. If you include the time, then only the current hour will be returned in the response. integer. Unix format (ms since 1970) in UTC.

Sample request

curl -I -X GET

Sample response

    "surfreport": [
            "beach": "Santa Cruz",
            "monday": {
                "1pm": {
                    "tide": 5,
                    "wind": 15,
                    "watertemp": 80,
                    "surfheight": 5,
                    "recommendation": "Go surfing!"
                "2pm": {
                    "tide": -1,
                    "wind": 1,
                    "watertemp": 50,
                    "surfheight": 3,
                    "recommendation": "Surfing conditions are okay, not great."
                "3pm": {
                    "tide": -1,
                    "wind": 10,
                    "watertemp": 65,
                    "surfheight": 1,
                    "recommendation": "Not a good day for surfing."

The following table describes each item in the response.

Response item Description
beach The beach you selected based on the beach ID in the request. The beach name is the official name as described in the National Park Service Geodatabase.
{day} The day of the week selected. A maximum of 3 days gets returned in the response.
{time} The time for the conditions. This item is included only if you include a time parameter in the request.
{day}/{time}/tide The level of tide at the beach for a specific day and time. Tide is the distance inland that the water rises to, and can be a positive or negative number. When the tide is out, the number is negative. When the tide is in, the number is positive. The 0 point reflects the line when the tide is neither going in nor out but is in transition between the two states.
{day}/{time}/wind The wind speed at the beach, measured in knots per hour or kilometers per hour depending on the units you specify. Wind affects the surf height and general wave conditions. Wind speeds of more than 15 knots per hour make surf conditions undesirable because the wind creates white caps and choppy waters.
{day}/{time}/watertemp The temperature of the water, returned in Fahrenheit or Celsius depending upon the units you specify. Water temperatures below 70 F usually require you to wear a wetsuit. With temperatures below 60, you will need at least a 3mm wetsuit and preferably booties to stay warm.
{day}/{time}/surfheight The height of the waves, returned in either feet or centimeters depending on the units you specify. A surf height of 3 feet is the minimum size needed for surfing. If the surf height exceeds 10 feet, it is not safe to surf.
{day}/{time}/recommendation An overall recommendation based on a combination of the various factors (wind, watertemp, surfheight). Three responses are possible: (1) “Go surfing!”, (2) “Surfing conditions are okay, not great,” and (3) “Not a good day for surfing.” Each of the three factors is scored with a maximum of 33.33 points, depending on the ideal for each element. The three elements are combined to form a percentage. 0% to 59% yields response 3, 60% - 80% and below yields response 2, and 81% to 100% yields response 1.

Error and status codes

The following table lists the status and error codes related to this request.

Status code Meaning
200 Successful response
400 Bad request – one or more of the parameters was rejected.
4112 The beach ID was not found in the lookup.

Code example

The following code samples shows how to use the surfreport endpoint to get the surf height for a specific beach.

<!DOCTYPE html>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://api.openweathermap.org/surfreport/25&days=1",
  "method": "GET"

$.ajax(settings).done(function (response) {
<h2>Surf Height</h2>
<div id="surfheight"></div>

In this example, the ajax method from jQuery is used because it allows us to load a remote resource asynchronously.

In the request, you submit the authorization through a query string URL. The endpoint limits the days returned to 1 in order to increase the download speed.

For demonstration purposes, the response is assigned to the response argument of the done method, and then written out to the surfheight tag on the page.

We’re just getting the surf height, but there’s a lot of other data you could choose to display.