Is On Water API
Free land-versus-water API with no key: tell whether any latitude and longitude falls on water or land, in milliseconds. Tested curl example and live response included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Is On Water API?
Is On Water is a free, key-free API that answers a single question about a coordinate: is it on water or on land? It returns a boolean plus, where known, the name of the water feature, and typically responds in a couple of milliseconds.
This is a deliberately tiny API and that is its appeal. Determining whether a point falls in the sea normally means loading a coastline shapefile, building a spatial index and running a point-in-polygon test — a fair amount of machinery for a yes-or-no answer. Here it is one GET with the coordinates in the path.
It earns its place as a validation step more than as a feature. Coordinates that have been swapped, truncated, or defaulted to a placeholder tend to land in the ocean, so a quick water check catches a whole class of data errors before they reach a map. The `reqMs` field in every response reports how long the lookup took server-side, which is usually 0 or 1 — fast enough to run over a batch without much thought. Note that `feature` is frequently "UNKNOWN": the boolean is reliable, the naming of the body of water much less so.
Quick facts
- Base URL
https://is-on-water.balbona.me/api/v1- Authentication
- No key or account. Free public service run by an individual developer; keep request volumes considerate.
- Rate limit
- No published quota. It is a single-purpose hobby service, so batch politely rather than hammering it.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Is On Water API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Check whether a coordinate falls on water
GET https://is-on-water.balbona.me/api/v1/get/23.92/-66.7
curl 'https://is-on-water.balbona.me/api/v1/get/23.92/-66.7'const res = await fetch("https://is-on-water.balbona.me/api/v1/get/23.92/-66.7");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://is-on-water.balbona.me/api/v1/get/23.92/-66.7", timeout=20)
res.raise_for_status()
print(res.json()){
"isWater": true,
"feature": "UNKNOWN",
"lat": 23.92,
"lon": -66.7,
"reqMs": 1
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
lat | path | Required | Latitude in decimal degrees, as the first path segment after `/get/`. 23.92 |
lon | path | Required | Longitude in decimal degrees, as the second segment. -66.7 |
Response fields
isWaterboolean- True when the point falls on water. This is the field to rely on.
featurestring- Name of the water body where the service can identify one. Frequently "UNKNOWN", so treat it as a bonus rather than data.
lat / lonfloat- The coordinates echoed back, which makes batch results self-describing.
reqMsinteger- Server-side lookup time in milliseconds — typically 0 or 1.
What you can build with the Is On Water API
- Validate user-submitted coordinates before storing or mapping them
- Catch swapped latitude and longitude pairs, which usually land at sea
- Filter a dataset of sightings or sensor readings to land or marine subsets
- Decide whether to run a reverse-geocode call at all, since sea points have no address
- Sanity-check the output of a geocoder that returned a suspicious point
Common errors and how to fix them
feature is "UNKNOWN"
The point is on water but the service cannot name the body.
Fix: Not a failure — `isWater` is still correct. Do not build logic that depends on the feature name being populated.
Result disagrees with a detailed map near the coast
Coastline data is generalised, so the boundary is approximate at fine scales.
Fix: Expect ambiguity within tens of metres of the shore. For harbour or estuary work, use a high-resolution coastline instead.
404 or a routing error
The path is malformed — it needs both segments after `/get/`.
Fix: The format is `/api/v1/get/{lat}/{lon}` with slashes, not a comma or query parameters.
Inland lakes report as water
Correct behaviour — the dataset includes major inland water bodies, not just oceans.
Fix: If you only care about the sea, combine the answer with a coarse distance-to-coast check or a country lookup.
Is On Water API — frequently asked questions
Is the Is On Water API free?
Yes, free with no key or registration. It is run as a personal project, so keep batches modest rather than treating it as production infrastructure for high volume.
How accurate is it near coastlines?
The underlying coastline is generalised, so results within tens of metres of the shore can go either way. For open ocean or well inland the answer is dependable; for harbour-scale work it is not.
Does it cover lakes and rivers?
Major inland water bodies are included, so large lakes report as water. Narrow rivers are unreliable at this generalisation level.
What is a practical use for this?
Data validation, mostly. Coordinates that have been swapped, truncated to fewer decimals, or left at a default value overwhelmingly land in the sea, so a water check is a cheap filter for bad input before it reaches a map or a routing engine.
Tools that pair with this API
Coordinate Converter
Convert GPS coordinates between decimal degrees, degrees-minutes-seconds and decimal minutes instantly. Paste any format like 40°26'46"N and copy the result.
Random Coordinates Generator
Generate random latitude and longitude points spread evenly by area over the globe or inside a bounding box, in decimal or DMS, with CSV and GeoJSON export.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Is On Water is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.