BYTETOOLS

GBIF API

Free GBIF API with no key: 2 billion+ species occurrence records, taxonomic data and distribution maps from museums and research institutions worldwide. Tested.

No API key requiredHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-19

What is the GBIF API?

The GBIF API is a free, key-free interface to the Global Biodiversity Information Facility — over two billion species occurrence records, full taxonomic hierarchies and distribution data contributed by museums and research institutions worldwide.

GBIF is the largest open biodiversity dataset in existence, aggregating specimen records from natural history collections, research surveys and citizen science across the world. Reading it needs no key at all.

The taxonomic backbone is the part most projects need: every record is resolved to a normalised taxonomy with kingdom through species, plus a stable `key`. That lets you reconcile species names across datasets that spell them differently or use outdated synonyms.

Quick facts

Base URL
https://api.gbif.org/v1
Authentication
No API key required for reads. Publishing data requires an account.
Rate limit
No published hard limit; bulk users should use the download API rather than paging the search endpoints.
Pricing
Free open data; individual records carry their own licences.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the GBIF API

Every request below was executed against the live API on 2026-08-19, and the response shown is the real body it returned — not an illustration.

1. Search the species taxonomy

GET https://api.gbif.org/v1/species/search?q=puma&limit=1

curl
curl 'https://api.gbif.org/v1/species/search?q=puma&limit=1'
JavaScript (fetch)
const res = await fetch("https://api.gbif.org/v1/species/search?q=puma&limit=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.gbif.org/v1/species/search?q=puma&limit=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "offset": 0,
  "limit": 1,
  "endOfRecords": false,
  "count": 1051,
  "results": [
    {
      "key": 326260942,
      "datasetKey": "0ecf5aeb-0c50-4063-a9ab-48eba3d21f4b",
      "nubKey": 2435098,
      "parentKey": 326260933,
      "parent": "Felidae",
      "kingdom": "Animalia",
      "phylum": "Chordata",
      "order": "Carnivora",
      "family": "Felidae",
      "genus": "Puma",
      "kingdomKey": 326260404,
      "phylumKey": 326260446,
      "classKey": 326260931,
      "orderKey": 326260932,
      "familyKey": 326260933,
      "genusKey": 326260942,
      "scientificName": "Puma",
      "canonicalName": "Puma",
      "taxonomicStatus": "ACCEPTED",
      "rank": "GENUS",
      "origin": "DENORMED_CLASSIFICATION",
      "numDescendants": 0,
      "numOccurrences": 0,
      "habitats": [],
      "nomenclaturalStatus": [],
      "threatStatuses": [],
      "descriptions": [],
      "vernacularNames": [],
      "synonym": false,
      "higherClassificationMap": {
        "326260404": "Animalia",
        "326260446": "Chordata",
        "326260931": "Mammalia",
        "326260932": "Carnivora",
        "326260933": "Felidae"
      },
      "class": "Mammalia"
    }
  ],
  "facets": []
}

Parameters

ParameterTypeRequiredDescription
qstringOptionalFree-text search query. puma
limitintegerOptionalResults per page, max 1000. 20
offsetintegerOptionalPagination offset. 20
rankstringOptionalTaxonomic rank filter. SPECIES
highertaxonKeyintegerOptionalRestrict to descendants of a taxon. 212

Response fields

countinteger
Total records matching the query.
endOfRecordsboolean
Whether more pages exist.
results[].keyinteger
Stable GBIF taxon identifier.
results[].scientificNamestring
Full scientific name with authorship.
results[].kingdom / phylum / class / order / family / genusstring
Normalised taxonomic hierarchy.
results[].taxonomicStatusstring
ACCEPTED, SYNONYM or DOUBTFUL.

What you can build with the GBIF API

  • Build a species lookup or field guide application
  • Reconcile species names across datasets using the GBIF backbone
  • Map species occurrence records for ecological research
  • Support conservation and biodiversity analysis

Common errors and how to fix them

Empty results

The query matched nothing.

Fix: Scientific names work better than common names; the species/match endpoint does fuzzy name resolution.

taxonomicStatus: SYNONYM

The name is an outdated synonym, not the accepted name.

Fix: Follow `acceptedKey` to the currently accepted taxon before displaying.

Very large occurrence queries time out

Occurrence search spans billions of records.

Fix: Use the asynchronous download API for anything beyond a few thousand records.

GBIF API — frequently asked questions

Is the GBIF API free?

Yes, completely free with no API key for reads. It is a publicly funded international biodiversity infrastructure.

How much data does GBIF hold?

Over two billion species occurrence records contributed by museums, herbaria, research surveys and citizen science projects worldwide.

What is the GBIF taxonomic backbone?

A normalised taxonomy that every record is matched against, so datasets using different or outdated names resolve to the same stable taxon key. It is the main reason to use GBIF for name reconciliation.

Why does my species show as a SYNONYM?

The name you searched is an outdated or alternative name. Follow the `acceptedKey` field to the currently accepted taxon.

Tools that pair with this API

GBIF is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-19; always check the official documentation before relying on this API in production, as terms and limits can change.