OBIS API
Free marine biodiversity API with no key: 100M+ georeferenced species occurrence records with full taxonomy, depth, date and dataset provenance. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the OBIS API?
OBIS, the Ocean Biodiversity Information System, publishes marine species occurrence records through an open API needing no key. Each record carries the full taxonomic hierarchy with WoRMS identifiers, coordinates, depth, observation date and its source dataset.
OBIS is the marine counterpart to GBIF, run under UNESCO's Intergovernmental Oceanographic Commission, and it aggregates records from thousands of research cruises, survey programmes and monitoring efforts worldwide. The captured query for ocean sunfish alone matches over a hundred thousand occurrences, which gives a sense of the density.
What makes it more useful than a plain point cloud is that every taxonomic rank comes with its numeric identifier — `classid`, `familyid`, `genusid` — and those are WoRMS AphiaIDs, the authoritative register of marine species names. That means you can query up or down the hierarchy without any name matching, which matters enormously in marine taxonomy where synonymy is rife. Two fields deserve attention before analysis: `basisOfRecord` distinguishes a human observation from a preserved specimen or a machine detection, and `coordinateUncertaintyInMeters` tells you how precisely a point is actually located, which for older records can be kilometres.
Quick facts
- Base URL
https://api.obis.org/v3- Authentication
- No API key and no registration.
- Rate limit
- No published limit. Requests can be expensive — always constrain with `size` and filters.
- Pricing
- Free. Data is published under open licences by the contributing institutions.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the OBIS 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. Search marine occurrence records for a species
GET https://api.obis.org/v3/occurrence?scientificname=Mola%20mola&size=1
curl 'https://api.obis.org/v3/occurrence?scientificname=Mola%20mola&size=1'const res = await fetch("https://api.obis.org/v3/occurrence?scientificname=Mola%20mola&size=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.obis.org/v3/occurrence?scientificname=Mola%20mola&size=1", timeout=20)
res.raise_for_status()
print(res.json()){
"total": 100666,
"results": [
{
"basisOfRecord": "HumanObservation",
"brackish": false,
"class": "Teleostei",
"classid": 293496,
"coordinateUncertaintyInMeters": 250,
"countryCode": "US",
"datasetName": "PISCO fish transects",
"date_end": 1724716800000,
"date_mid": 1724716800000,
"date_start": 1724716800000,
"date_year": 2024,
"decimalLatitude": 34.01641667,
"decimalLongitude": -119.4320167,
"depth": 9.1,
"eventDate": "2024-08-27",
"eventID": "ANACAPA_WEST_ISLE_CEN_20240827_INNER_CAN_2_fish",
"family": "Molidae",
"familyid": 125609,
"genus": "Mola",
"genusid": 126233,
"gigaclass": "Actinopterygii",
"gigaclassid": 10194,
"infraphylum": "Gnathostomata",
"infraphylumid": 1828,
"institutionID": "UCSB",
"kingdom": "Animalia",
"kingdomid": 2,
"locality": "ANACAPA_WEST_ISLE_CEN",
"locationRemarks": "marine protected area",
"marine": true,
"maximumDepthInMeters": 9.1,
"minimumDepthInMeters": 9.1,
"nameAccordingTo": "WoRMS",
"occurrenceID": "ANACAPA_WEST_ISLE_CEN_20240827_INNER_CAN_2_fish_occ55",
"occurrenceStatus": "present",
"order": "Tetraodontiformes",
"orderid": 10332,
"organismQuantityType": "wet weight of all fish in row",
"parvphylum": "Osteichthyes",
"parvphylumid": 152352,
"phylum": "Chordata",
"phylumid": 1821,
"samplingProtocol": "SBTL_FISH_PISCO",
"scientificName": "Mola mola",
"scientificNameIDParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
scientificname | query | Optional | Species name to search for. Mola mola |
size | query | Optional | Records per page, up to 10,000. Always set it. 1 |
from | query | Optional | Offset for paging through results. 0 |
geometry | query | Optional | WKT polygon constraining the search area. POLYGON((...)) |
startdate / enddate | query | Optional | Bound the observation date. 2020-01-01 |
taxonid | query | Optional | WoRMS AphiaID, which is more precise than a name search. 127405 |
Response fields
totalinteger- Total matching records, independent of page size. The captured query matched over 100,000.
resultsarray- The occurrence records for this page.
results[].scientificName / genus / family / classstring- Taxonomic names as recorded and as matched.
results[].genusid / familyid / classidinteger- WoRMS AphiaIDs for each rank — the identifiers to query with rather than names.
results[].decimalLatitude / decimalLongitudefloat- Coordinates in WGS84 decimal degrees.
results[].coordinateUncertaintyInMetersinteger- How precisely the point is located. Historical records can be uncertain to kilometres.
results[].depthfloat- Observation depth in metres, where recorded.
results[].eventDatestring- Observation date as recorded, with `date_start`, `date_mid` and `date_end` giving millisecond timestamps for ranges.
results[].date_yearinteger- Year, convenient for temporal filtering and binning.
results[].basisOfRecordstring- `HumanObservation`, `PreservedSpecimen`, `MachineObservation` and similar. Filter on it — they are not comparable evidence.
results[].datasetName / eventIDstring- Source dataset and the survey event identifier, for provenance.
results[].countryCodestring- Country associated with the record, where applicable.
results[].brackishboolean- Habitat flag from the species register rather than the observation.
What you can build with the OBIS API
- Map a marine species' recorded distribution
- Study range shifts over time using date_year
- Filter occurrences to a study area with a WKT polygon
- Cross-reference marine taxonomy against WoRMS by AphiaID
Common errors and how to fix them
Enormous or slow response
Species queries can match hundreds of thousands of records.
Fix: Always send `size`, and constrain with `geometry` or a date range. Read `total` before paging.
Records in impossible places
Historical positions can be imprecise or wrongly digitised.
Fix: Filter on `coordinateUncertaintyInMeters` and treat land-locked marine points as suspect.
Mixing incompatible evidence
`basisOfRecord` spans human observations, museum specimens and machine detections.
Fix: Filter to one basis before any density or abundance analysis.
Name search misses records
Marine taxonomy is full of synonyms.
Fix: Search by `taxonid` using the WoRMS AphiaID instead. The ids in the response are exactly those.
OBIS API — frequently asked questions
Is the OBIS API free?
Yes, free with no key or registration. OBIS operates under UNESCO's Intergovernmental Oceanographic Commission and the data is openly licensed.
How does it differ from GBIF?
OBIS is marine-specific and aligned to the WoRMS taxonomic register, so its records carry AphiaIDs at every rank. GBIF covers all life. The two overlap but OBIS has deeper marine coverage and better marine taxonomy.
What is basisOfRecord and why does it matter?
It says what kind of evidence a record is — a human sighting, a preserved museum specimen, an automated detection. Mixing them in an abundance analysis produces meaningless results, so filter first.
How do I search reliably for a species?
Use `taxonid` with the WoRMS AphiaID rather than a name. Marine species accumulate synonyms, and a name search can silently miss records filed under a different accepted name.
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.
CSV Column Statistics Calculator
Profile a CSV column by column: type, blanks, distinct values, min, max, mean, median, standard deviation and percentiles, plus top values — all in-browser.
GeoJSON Validator
Validate GeoJSON against RFC 7946 and get the exact JSON path of every problem: unclosed rings, swapped coordinates, missing properties and more.
OBIS 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.