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.