For developers
The ScubaTerra API
Every dive site ScubaTerra knows, as JSON: more than 13,000 sites across the world with their locations, depths, water temperatures, conditions, access and facilities, the wildlife and hazards divers report, local operators, and the photos and video divers have contributed. Curated continuously, with every attribute's provenance tracked, and updated as the dataset improves.
Loading…
What's in the dataset
Each record is one dive site. Sites that are hidden, merged or still awaiting review never appear. Third-party photos credited to other sources are shown on scubaterra.com but are not part of the API; the media array carries only contributor media we hold the right to sublicense, each with the diver's credit.
- id, slug, url
- Stable identifiers and the site's page on scubaterra.com
- name, location
- The site name and its location chain: locale, city, state, region, country
- coordinates
- Latitude/longitude with the origin of the point (how we know it), or null
- tags, wildlife
- What divers report there: dive types, features, hazards; the creatures as a separate list
- depth_m, water_temp_c
- Depth range and water temperature range, when known
- access, facilities
- Closed/prohibited/instructor-required flags, entry fee, air and nitrox fills, rentals, training, showers, bathrooms
- conditions, visibility, directions
- Narrative fields, as collected
- operators, sources
- Local dive operators and the public pages a record was built from
- media
- Photos and video divers saved under our terms, with credit — the only imagery in the API
Endpoints
Base URL https://www.scubaterra.com/api/v1. Send your key as Authorization: Bearer <key> (or X-Api-Key). A key restricted to app IDs also needs X-App-Id; one restricted to domains must be called from a page on one of them; one restricted to IPs must come from one of them.
GET /sites
The dataset, paged (page, limit up to 100). Filters: country, q (name or place search), tag, bbox=west,south,east,north, updated_since (ISO date — poll this to keep a cache fresh). Sorted by name.
curl -H "Authorization: Bearer st_test_…" \
"https://www.scubaterra.com/api/v1/sites?country=Mexico&tag=cenote&limit=20"
{
"data": [
{
"id": "66a1…", "slug": "mexico-quintana-roo-tulum-dos-ojos",
"url": "https://www.scubaterra.com/dive/mexico-quintana-roo-tulum-dos-ojos",
"name": "Dos Ojos",
"location": { "locale": "Dos Ojos", "city": "Tulum", "state": "Quintana Roo", "region": null, "country": "Mexico" },
"coordinates": { "lat": 20.3245, "lng": -87.3914, "origin": "site_url" },
"tags": ["cenote", "cavern", "freshwater", "boat dive"], "wildlife": ["bats"],
"depth_m": { "min": 5, "max": 10 }, "water_temp_c": { "min": 24, "max": 25 },
"updated_at": "2026-10-14T18:02:11.000Z"
}
],
"page": 1, "limit": 20, "total": 312, "has_more": true
}GET /sites/{slug}
One site in full: everything above plus alternate names, address, conditions, visibility, directions, entry fee, access and facilities, light policy, operators, source pages and contributor media.
GET /media/{id}
The bytes of a contributor photo or video named by a site record's media[].url. Key-gated and counted like any other request; supports range requests for video.
Every response carries X-RateLimit-* (sandbox) or X-Usage-* (production) headers so you can watch your allowance. Errors are JSON: { "error": "ip_not_allowed", "detail": "…" } with 401 for a missing, expired or revoked key, 403 for a restriction that didn't match, 429 when a sandbox key is over its weekly allowance.
Plans
Sandbox
Free
- Up to 500 requests per week per key
- Must be restricted to a requesting IP address
- For development and evaluation, not production traffic
- Issued the moment you agree to the API Terms
Production
$1,000 per year
- 100,000 requests per month included
- Overage $0.10 per 1,000 requests
- Dataset updates included for the year
- Contributor images included where we hold sublicensing rights; compensation is shared with qualifying contributors
- Apply below; keys are issued once your application is approved
Caching, freshness and what we don't promise
You may cache responses, but for no longer than 30 days. The dataset is curated: sites are corrected, merged, split and re-positioned as divers and staff improve them, and a stale copy of a dive site is a safety problem. Poll updated_since to refresh what changed, and refresh or discard every cached record within 30 days.
The data comes from public sources and from divers and can be wrong. We make no representations or warranties as to its accuracy, timeliness, or the safety or legality of any location, and your product must tell its users the same: nothing here replaces training, certification, local knowledge or a current briefing.
API Terms
Version 2026-10-23. You agree to these before issuing a key.
Version 2026-10-23
These API Terms govern access to the ScubaTerra dive-site dataset through the ScubaTerra API (the "API"). They supplement the Terms of Service; by agreeing to them and issuing a key you accept both. "We" is Goliath Dynamics Inc.
1. Keys and restrictions
Each key is yours to keep secret. Every key has a name and an expiration date, and may be restricted to app IDs, domains or requesting IP addresses; a request that does not match a restriction on the key is refused. Sandbox keys must be restricted to at least one requesting IP address. You are responsible for every request made with your keys; revoke a key the moment you suspect it has leaked.
2. Plans
- Sandbox. Free. Up to 500 requests per week per key, for development and evaluation only, never for production traffic.
- Production. USD $1,000 per year, which includes 100,000 requests per month and every update to the dataset. Requests beyond that in a calendar month are billed at USD $0.10 per 1,000 requests. Production keys are issued once your application is approved and the annual fee is paid; fees are non-refundable except where the law requires.
3. Images
Responses include images only where we hold the right to sublicense them: media that divers have saved to ScubaTerra under our Terms of Service. You may display those images in your product alongside the dive-site data they belong to, with the credit the response carries, for as long as your Production access lasts. A share of Production fees is paid to the qualifying contributors whose images are included. Images and other media credited to third-party sources are not part of the API.
4. Caching and freshness
You may cache responses, but for no longer than 30 days. The dataset is curated and corrected continuously, and a stale copy of dive-site information is a safety problem, so refresh or discard every cached record within 30 days of retrieving it. Do not build a persistent mirror of the dataset.
5. Attribution and use
Show "Data by ScubaTerra" with a link to scubaterra.com wherever dataset content is displayed. Do not represent the dataset as your own, use it to train a model that reproduces it, or resell it as data. You may use it to build products and services for your own users.
6. No warranty
THE DATASET AND THE API ARE PROVIDED "AS IS". WE MAKE NO REPRESENTATIONS OR WARRANTIES AS TO THE ACCURACY, COMPLETENESS OR TIMELINESS OF THE DATA, OR AS TO THE SAFETY OR LEGALITY OF ANY LOCATION, AND NO WARRANTY THAT THE API WILL BE UNINTERRUPTED. Dive-site information is collected from public sources and from divers and can be wrong. It is no substitute for training, certification, local knowledge or a current briefing, and your product must tell your users so.
7. Suspension and changes
We may suspend or revoke a key that breaks these terms, exceeds its plan or threatens the service. We may change the API and these terms; material changes to fees or limits are announced at least 30 days before they take effect, by email to the address on your account.
8. Contact
Questions about the API or these terms: contact us or email hello@scubaterra.com.