REST API

Strandposten API

Endpoint voor het ophalen van strandposten, inclusief locatie, gemeente, provincie, vlagstatus, toezichtstatus en marker/icon data.

Wanneer de API-request wordt geauthenticeerd met een geldig Application Password wordt aanvullend kustweerdata meegestuurd, waaronder temperatuur, wind, golfhoogte, zeewatertemperatuur, getijden en actuele waarschuwingen.

Endpoint

GET https://dashboard.staging.strand-app.nl/api/beachposts/v1/overview
GET https://dashboard.staging.strand-app.nl/api/beachposts/v1/overview?municipality=schouwen-duiveland

Authenticatie

De basisgegevens van strandposten kunnen zonder authenticatie worden opgehaald.

Voor het ophalen van aanvullende weerdata is authenticatie vereist via een Application Password.

Zonder geldige authenticatie wordt het veld weather niet opgenomen in het strandpost-object.

HTTP Basic Authentication

Gebruik de gebruikersnaam en het bijbehorende Application Password via HTTP Basic Authentication.

curl \
  --user "api-gebruiker:xxxx xxxx xxxx xxxx xxxx xxxx" \
  "https://dashboard.staging.strand-app.nl/api/beachposts/v1/overview?municipality=schouwen-duiveland"

Application Passwords worden afzonderlijk per API-gebruiker aangemaakt en kunnen ook afzonderlijk worden ingetrokken.

Query parameters

Parameter Type Verplicht Omschrijving
municipality string Nee Filtert strandposten op gemeente-slug, bijvoorbeeld schouwen-duiveland, ameland of den-haag. Zonder parameter worden alle beschikbare strandposten opgehaald.
region string Nee Filtert strandposten op een regio-slug. Onderliggende regio's worden automatisch meegenomen.
region_id integer Nee Filtert strandposten op een interne regio-ID. Onderliggende regio's worden automatisch meegenomen.

Response structuur

Veld Type Omschrijving
getstrandposten string Status van de response. Bij succes: success.
strandposten array Lijst met strandpost-objecten.

Strandpost object

Veld Type Voorbeeld Omschrijving
id integer 93 Interne ID.
external_id integer 101 Externe Strandveilig ID.
name string Hoofdpost Noord Naam van de strandpost.
description string Omschrijving... Omschrijving of aanvullende informatie.
phone string 0612345678 Telefoonnummer.
lat float 52.1085111 Latitude van de strandpost.
lng float 4.2714783 Longitude van de strandpost.
municipality object|null {"name":"Den Haag","slug":"den-haag"} Gekoppelde gemeente.
province object|null {"name":"Zuid-Holland","slug":"zuid-holland"} Gekoppelde provincie.
region object|null Regio-object De direct gekoppelde of diepste regio.
lifeguard_organization object|null Regio-object Gekoppelde lifeguardorganisatie.
security_region object|null Regio-object Gekoppelde veiligheidsregio.
flag string gele-vlag Actieve vlag.
flag_color string FFD628 Hexkleur zonder #.
flag_img string URL Afbeelding van vlag met tekst.
flag_img_no_text string URL Afbeelding van vlag zonder tekst.
flag_status boolean true Geeft aan of er een actieve vlag is.
flag_text string Pas op met zwemmen! Korte vlagtekst.
flag_extended_text string Tekst Uitgebreide publieksmelding voor de vlag.
state string Lifeguards houden toezicht Toezichtstatus als tekst.
state_color string 333333 Statuskleur zonder #.
state_status boolean false true wanneer lifeguards toezicht houden.
status_alarm_team boolean false Geeft aan of dit een alarmploeg-locatie is.
marker_icon string URL Marker voor kaartweergave.
state_icon string|false URL of false Optioneel statusicoon.
state_text string Tekst Toezichtstatus als losse tekst.
state_img string URL Afbeelding voor open/gesloten status.
weather object Weather object Kustweerdata voor de regio van de strandpost. Dit veld wordt alleen meegestuurd bij een geauthenticeerde request.

Weather object

Authenticatie vereist

De weerdata is gebaseerd op de kustverwachting van Buienradar. Voor iedere strandpost wordt op basis van de provincie de bijbehorende kustregio bepaald.

De beschikbare kustregio's zijn: Noord-Holland, Zuid-Holland, Zeeland en Waddeneilanden.

Veld Type Omschrijving
region string Buienradar kustregio waarop de forecast gebaseerd is.
days array Weersverwachting voor drie dagen: gisteren, vandaag en morgen.

Weather day object

Veld Type Eenheid Omschrijving
date string YYYY-MM-DD Datum van de verwachting.
temperature.min float °C Minimumtemperatuur.
temperature.max float °C Maximumtemperatuur.
icon_code string - Weericooncode.
wind.speed_ms float m/s Gemiddelde windsnelheid.
wind.direction_degrees integer graden Windrichting in graden.
wind.direction string - Windrichting, bijvoorbeeld O, NO of ZW.
wind.beaufort integer Bft Windkracht volgens de schaal van Beaufort.
precipitation float - Verwachte neerslagwaarde.
uv_index integer UV-index Verwachte UV-index.
wave.height float meter Verwachte golfhoogte.
wave.direction_degrees integer graden Golfrichting in graden.
sea_water_temperature float °C Zeewatertemperatuur.
tides.low array HH:MM Tijdstippen van laagwater.
tides.high array HH:MM Tijdstippen van hoogwater.
warnings.jellyfish boolean - Waarschuwing voor kwallen.
warnings.floating_devices boolean - Waarschuwing voor het gebruik van drijfmiddelen.
warnings.dangerous_sea boolean - Waarschuwing voor gevaarlijke zee.
warnings.rip_current boolean - Waarschuwing voor muistromingen.

Voorbeeld response zonder authenticatie

{
  "getstrandposten": "success",
  "strandposten": [
    {
      "id": 93,
      "external_id": 101,
      "name": "Hoofdpost Noord (Scheveningen)",
      "description": "",
      "phone": "",
      "lat": 52.1085111,
      "lng": 4.2714783,
      "municipality": {
        "id": 25,
        "name": "Den Haag",
        "slug": "den-haag"
      },
      "province": {
        "id": 8,
        "name": "Zuid-Holland",
        "slug": "zuid-holland"
      },
      "flag": "gele-vlag",
      "flag_color": "FFD628",
      "flag_img": "https://strand-app.nl/assets/flags/HSV_Vlag_Geel-small.jpg",
      "flag_img_no_text": "https://strand-app.nl/assets/flags/hsv-vlag-geel-notext.png",
      "flag_status": true,
      "flag_text": "Pas op met zwemmen! Gevaarlijk",
      "flag_extended_text": "Let op: De lifeguards hebben de gele waarschuwingsvlag gehesen...",
      "state": "Let op! Geen toezicht, lifeguards niet aanwezig.",
      "state_color": "FFF101",
      "state_status": false,
      "status_alarm_team": false,
      "marker_icon": "https://strand-app.nl/assets/img/markers/marker-closed.png",
      "state_icon": "https://strand-app.nl/assets/picto/picto-yellow-flag.svg",
      "state_text": "Let op! Geen toezicht, lifeguards niet aanwezig.",
      "state_img": "https://www.strand-app.nl/assets/img/strandpost-gesloten-v3.png"
    }
  ]
}

Voorbeeld response met authenticatie

Bij een geauthenticeerde request wordt per strandpost aanvullend het veld weather toegevoegd.

{
  "getstrandposten": "success",
  "strandposten": [
    {
      "id": 120,
      "external_id": 245,
      "name": "Strandpost Renesse",
      "lat": 51.7321,
      "lng": 3.7684,
      "municipality": {
        "id": 34,
        "name": "Schouwen-Duiveland",
        "slug": "schouwen-duiveland"
      },
      "province": {
        "id": 6,
        "name": "Zeeland",
        "slug": "zeeland"
      },

      "weather": {
        "region": "Zeeland",
        "days": [
          {
            "date": "2026-08-11",

            "temperature": {
              "min": 20.1,
              "max": 24.8
            },

            "icon_code": "a",

            "wind": {
              "speed_ms": 6.0,
              "direction_degrees": 70,
              "direction": "O",
              "beaufort": 4
            },

            "precipitation": 0.0,
            "uv_index": 6,

            "wave": {
              "height": 0.59,
              "direction_degrees": 0
            },

            "sea_water_temperature": 21.25,

            "tides": {
              "low": [
                "07:28",
                "19:58"
              ],
              "high": [
                "01:00",
                "13:31"
              ]
            },

            "warnings": {
              "jellyfish": false,
              "floating_devices": false,
              "dangerous_sea": false,
              "rip_current": true
            }
          },

          {
            "date": "2026-08-12",

            "temperature": {
              "min": 15.2,
              "max": 29.5
            },

            "icon_code": "a",

            "wind": {
              "speed_ms": 4.8,
              "direction_degrees": 85,
              "direction": "O",
              "beaufort": 3
            },

            "precipitation": 0.0,
            "uv_index": 6,

            "wave": {
              "height": 0.66,
              "direction_degrees": 90
            },

            "sea_water_temperature": 20.8,

            "tides": {
              "low": [
                "08:18",
                "20:47"
              ],
              "high": [
                "01:54",
                "14:19"
              ]
            },

            "warnings": {
              "jellyfish": false,
              "floating_devices": false,
              "dangerous_sea": false,
              "rip_current": true
            }
          },

          {
            "date": "2026-08-13",

            "temperature": {
              "min": 18.4,
              "max": 32.8
            },

            "icon_code": "a",

            "wind": {
              "speed_ms": 2.8,
              "direction_degrees": 103,
              "direction": "O",
              "beaufort": 2
            },

            "precipitation": 0.0,
            "uv_index": 6,

            "wave": {
              "height": 0.35,
              "direction_degrees": 90
            },

            "sea_water_temperature": 20.88,

            "tides": {
              "low": [
                "09:03",
                "21:32"
              ],
              "high": [
                "02:41",
                "15:03"
              ]
            },

            "warnings": {
              "jellyfish": false,
              "floating_devices": false,
              "dangerous_sea": false,
              "rip_current": false
            }
          }
        ]
      }
    }
  ]
}

Voorbeeld gebruik JavaScript

Voor publieke strandpostdata kan een normale fetch() worden gebruikt.

fetch('https://dashboard.staging.strand-app.nl/api/beachposts/v1/overview?municipality=schouwen-duiveland')
  .then(response => response.json())
  .then(data => {

    if (data.getstrandposten !== 'success') {
      return;
    }

    data.strandposten.forEach(post => {
      console.log(
        post.name,
        post.lat,
        post.lng,
        post.state_status
      );
    });

  });
Let op: een Application Password moet niet rechtstreeks worden opgenomen in publiek toegankelijke frontend JavaScript. Gebruik authenticatie vanuit een beveiligde backend, server-side applicatie of andere vertrouwde omgeving.

Weather data verwerken

data.strandposten.forEach(post => {

  if (!post.weather) {
    return;
  }

  const today = post.weather.days.find(day => {
    return day.date === new Date().toISOString().slice(0, 10);
  });

  if (!today) {
    return;
  }

  console.log(
    'Strandpost:',
    post.name
  );

  console.log(
    'Temperatuur:',
    today.temperature.min,
    '-',
    today.temperature.max,
    '°C'
  );

  console.log(
    'Wind:',
    today.wind.direction,
    today.wind.beaufort,
    'Bft'
  );

  console.log(
    'Golfhoogte:',
    today.wave.height,
    'm'
  );

  console.log(
    'Zeewater:',
    today.sea_water_temperature,
    '°C'
  );

  console.log(
    'Muistroming waarschuwing:',
    today.warnings.rip_current
  );

});