Tide times for 50 harbours · free · no sign-up
Want to show tide times in your own system? Here is the data on fixed URLs that will not change when the website does. No sign-up, no key, no rate limit — just static JSON files.
https://tide.is/api/v1/stations.jsonAll harbours with coordinates and links.https://tide.is/api/v1/tides/<id>.jsonTide times for one harbour across the whole forecast horizon — e.g. reykjavik, akureyri, isafjordur.Events are grouped by date, so there is nothing to search — just look up the day you need:
{
"station": { "id": "reykjavik", "name": "Reykjavík", "measured": true, … },
"data": { "timezone": "UTC", "height_unit": "m", "to": "2028-12-31", … },
"days": {
"2027-09-16": [
{ "time": "00:30", "type": "low", "height": 0.46 },
{ "time": "06:32", "type": "high", "height": 3.85 }, …
], …
}
}Iceland stays on UTC all year, so "time" is local Icelandic time.
Today's tides:
// JavaScript
const r = await fetch("https://tide.is/api/v1/tides/reykjavik.json");
const d = await r.json();
const today = new Date().toISOString().slice(0, 10);
for (const e of d.days[today]) {
console.log(e.time, e.type, e.height + " m");
}# curl + jq curl -s https://tide.is/api/v1/tides/reykjavik.json \ | jq ".days[\"$(date -u +%F)\"]"
The URLs are permanent and harbour ids (reykjavik, akureyri …) stay put. Fields may be added, none are removed.
The forecast currently runs to 2028-12-31 — see data.to in every file. When fresh data arrives the horizon simply extends: more days appear in days. Nothing else changes, so anything reading the API keeps working untouched.
Need a different shape, other data (sun and moon times) or more locations? Drop a line here — always good to hear what people are building.