Ocean Currents API
Hourly surface current speed and direction anywhere at sea, up to 5 days ahead. Circulation, tide and wave drift are summed, so you get the current a boat or a drifter actually feels.
{
"lat": 36.7,
"lon": -122.05,
"days": 1,
"unit": {
"speed": "knots",
"direction": "degrees, direction the current flows TOWARDS"
},
"scope": "open_water",
"scope_note": "Model resolution ~8 km: reliable in open water. Small islands and reefs may be invisible to the model. Values cached per ~0.1 deg cell for up to 6 h.",
"model_point": {
"lat": 36.6667,
"lon": -122.0833,
"distance_km": 4.7
},
"hours": [
{
"t": "2026-10-18 15:00",
"u_ms": 0.062,
"v_ms": 0.079,
"speed_kn": 0.2,
"dir_deg": 38
},
{
"t": "2026-10-18 16:00",
"u_ms": 0.082,
"v_ms": 0.079,
"speed_kn": 0.22,
"dir_deg": 46
},
{
"t": "2026-10-18 17:00",
"u_ms": 0.092,
…
Request
| Parameter | Type | Description |
|---|---|---|
lat, lon | float | Position at sea (decimal degrees). |
port | string | Instead of lat/lon: a station slug, with optional country (ISO-2). |
days | int | 1 to 5. Default 3. |
X-API-Key | header | Your API key (or ?api_key= in the query string). |
Code examples
curl "https://tidesatlas.com/api/v1/currents?lat=36.70&lon=-122.05&days=1" \ -H "X-API-Key: YOUR_KEY"
const params = new URLSearchParams({ lat: 36.70, lon: -122.05, days: 1 });
const res = await fetch(`https://tidesatlas.com/api/v1/currents?${params}`, {
headers: { 'X-API-Key': 'YOUR_KEY' }
});
const data = await res.json();import requests
r = requests.get(
"https://tidesatlas.com/api/v1/currents",
params={"lat": 36.70, "lon": -122.05, "days": 1},
headers={"X-API-Key": "YOUR_KEY"},
timeout=30,
)
data = r.json()$ch = curl_init('https://tidesatlas.com/api/v1/currents?lat=36.70&lon=-122.05&days=1');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: YOUR_KEY'],
]);
$data = json_decode(curl_exec($ch), true);Response
Real response for Monterey Bay, offshore, 18 October 2026 (arrays shortened).
{
"lat": 36.7,
"lon": -122.05,
"days": 1,
"unit": {
"speed": "knots",
"direction": "degrees, direction the current flows TOWARDS"
},
"scope": "open_water",
"scope_note": "Model resolution ~8 km: reliable in open water. Small islands and reefs may be invisible to the model. Values cached per ~0.1 deg cell for up to 6 h.",
"model_point": {
"lat": 36.6667,
"lon": -122.0833,
"distance_km": 4.7
},
"hours": [
{
"t": "2026-10-18 15:00",
"u_ms": 0.062,
"v_ms": 0.079,
"speed_kn": 0.2,
"dir_deg": 38
},
{
"t": "2026-10-18 16:00",
"u_ms": 0.082,
"v_ms": 0.079,
"speed_kn": 0.22,
"dir_deg": 46
},
{
"t": "2026-10-18 17:00",
"u_ms": 0.092,
"v_ms": 0.069,
"speed_kn": 0.22,
"dir_deg": 53
}
],
"model": "Copernicus Marine GLOBAL_ANALYSISFORECAST_PHY_001_024 (1/12 deg, hourly, total = circulation + tide + Stokes drift)",
"attribution": "Generated using E.U. Copernicus Marine Service Information; https://doi.org/10.48670/moi-00016",
"disclaimer": "Not for navigation."
}| Field | Meaning |
|---|---|
hours[].speed_kn | Current speed, knots |
hours[].dir_deg | Direction the current flows towards, degrees |
hours[].u_ms / v_ms | East and north components, m/s |
scope | open_water or near_shore: how far you can trust the value |
model_point | Model cell actually used and its distance from your point |
attribution / disclaimer | Required credit line and safety notice |
Data sources
Data: E.U. Copernicus Marine Service, product GLOBAL_ANALYSISFORECAST_PHY_001_024 (1/12°, hourly), total surface current = ocean circulation + tide + Stokes drift. Credit line returned in every response (doi:10.48670/moi-00016).
Good to know
- The ~8 km grid cannot resolve tidal races, narrow channels or harbour entrances. Near the coast the response says
near_shore: treat it as indicative. - Small islands and reefs may be invisible to the model. Values are cached per ~0.1° cell for up to 6 hours.
- Not for navigation. Always cross-check with official sources.
FAQ
Is the tide included in the current?
Yes. The value is the total surface current: ocean circulation, tidal current and wave-induced (Stokes) drift.
Why is the first call slower?
A new area is fetched from Copernicus on demand (a few seconds); later calls in the same cell come from cache.
Which plans include it?
The Complete pack, which also includes tides, and the weather-only pack. New accounts get 50 free requests; see the docs for current prices.