# GBIF

> The world's record of what has been found living where, from GBIF, the Global Biodiversity Information Facility. Billions of observations and museum specimens, pooled from thousands of institutions in almost every country, and free to everyone. Check a scientific name against GBIF's own list to catch typos and replace out-of-date names with current ones, then find where that species has actually been recorded - by country, by date, by kind of evidence, or only the sightings that come with a photograph. Count matching records without fetching them when all you need is whether anything is there. Every record carries what was found, where, when, who found it, and which dataset it came from, so you can follow any of it back to the museum or survey that stands behind it. No account or API key required.

App · Research & Academia · 10 actions. Web page: https://docs.lodol.com/docs/integrations/gbif

## Actions

### Count occurrence records

How many records match, without fetching any of them. The same filters as 'Search occurrence records', answering the question you branch on - has this species ever been seen here, is this worth pulling, has anything new turned up - for the cost of one number instead of a page of records. No API key required.

**Inputs**

- Species (`species`, text): Optional. A scientific name such as Panthera onca, or a broader group such as Felidae or Aves. A species key from an earlier step works here too. GBIF matches scientific names rather than common ones, so if a name is not recognised the step says so instead of guessing - use 'Search for species' to find the right one.
- Country (`country`, text): Optional. Only records found in this country.
- Continent (`continent`, text): Optional. Only records found on this continent. Use it instead of Country to cover a whole region at once. One of: `AFRICA`, `ANTARCTICA`, `ASIA`, `EUROPE`, `NORTH_AMERICA` (North America), `OCEANIA`, `SOUTH_AMERICA` (South America).
- Found on or after (`recorded_from`, date): Optional. Only records from this date onwards. Leave the other date blank to mean 'ever since'.
- Found on or before (`recorded_to`, date): Optional. Only records up to this date. Leave the other date blank to mean 'from the beginning'.
- Kind of evidence (`basis_of_record`, list): Optional. What the record is based on. Choose several to accept any of them, or leave it blank for all. Preserved specimens are the most reliably identified; human observations are much the most numerous. One or more of: `HUMAN_OBSERVATION` (Human observation - someone saw it), `MACHINE_OBSERVATION` (Machine observation - a camera or sensor caught it), `PRESERVED_SPECIMEN` (Preserved specimen - held in a museum or herbarium), `LIVING_SPECIMEN` (Living specimen - in a zoo, garden or culture collection), `FOSSIL_SPECIMEN` (Fossil specimen), `MATERIAL_SAMPLE` (Material sample - tissue, DNA or similar), `MATERIAL_CITATION` (Material citation - a specimen cited in a publication), `LITERATURE` (Literature - taken from a publication), `OCCURRENCE` (Occurrence - the publisher did not say which), `UNKNOWN`.
- Present or absent (`occurrence_status`, text): Optional. Nearly every record says a species was found somewhere, but a few say it was looked for and not found. Leave this blank for both, as gbif.org does. One of: `PRESENT` (Present - the species was found), `ABSENT` (Absent - it was looked for and not found).
- Only records with media (`media_type`, list): Optional. Only records with a photo, video or sound recording attached. Choose several to accept any of them. One or more of: `StillImage` (Photo), `MovingImage` (Video), `Sound` (Sound recording), `InteractiveResource` (Interactive resource).
- Dataset (`dataset_key`, text): Optional. Only records from this one dataset. 'Search datasets' returns the key, and so does every record.
- Found by (`recorded_by`, text): Optional. Only records credited to this person or team.
- Only records with coordinates (`has_coordinates`, true/false): Optional. Turn on when you are going to map or measure the results - roughly a fifth of records have no position at all.
- Place or keyword (`search_text`, text): Optional. Matches the words in a record, which is the way to search by place: 'Yellowstone', 'Serengeti'. For a species, use the Species field above instead - it resolves the name properly.

**Outputs**

- `any_found` (true/false): True when at least one record matches. The shortest thing to branch on.
- `count` (number): How many records match the filters.
- `species_matched` (object): Which species was actually searched for. Filled in when the Species field was used, so a name that resolved to something unexpected is visible in the result rather than hidden in the request. Empty when no species was given.

**Example output**

```json
{
  "any_found": true,
  "count": 979,
  "species_matched": {
    "confidence": 99,
    "key": 5219426,
    "match_type": "Exact match",
    "rank": "Species",
    "scientific_name": "Panthera onca (Linnaeus, 1758)"
  }
}
```

### Get an occurrence record

One record in full, by the key a search returned: what was found, exactly where and when, who found and identified it, which collection holds it, any photos, and the quality flags GBIF raised on it. No API key required.

**Inputs**

- Record key (`key`, text, required): The record's key in GBIF, which 'Search occurrence records' returns as 'key'.

**Outputs**

- `accepted_scientific_name` (text): The currently accepted name, which differs from the recorded one when the publisher used a synonym.
- `basis_of_record` (text): What kind of evidence this is: Human observation, Preserved specimen, Machine observation and so on.
- `catalog_number` (text): Its number within that collection.
- `classification` (object): Where this organism sits in the tree of life, from kingdom down to species. Group or sort on 'family' or 'order' to summarise a long list of records.
- `collection_code` (text): Which of that institution's collections it belongs to.
- `continent` (text): For example South America.
- `coordinate_uncertainty_metres` (number): How far the real spot could be from the coordinates. Worth checking before mapping: a record can be accurate to 10 metres or to 30 kilometres.
- `country` (text): The country's name, e.g. Brazil.
- `country_code` (text): Its two-letter code, e.g. BR.
- `dataset_key` (text): The dataset it came from. Pass it to 'Get dataset details'.
- `dataset_name` (text): That dataset's title.
- `depth_metres` (number): Depth below the surface.
- `elevation_metres` (number): Height above sea level.
- `identified_by` (text): Who identified it.
- `individual_count` (number): How many were seen.
- `institution` (text): The museum, herbarium or project holding the record.
- `issues` (list): Quality flags GBIF raised while processing the record, such as COORDINATE_ROUNDED. Worth a look before trusting a record's position or date.
- `key` (number): GBIF's id for this record. Pass it to 'Get an occurrence record'.
- `latitude` (number): Degrees north, negative for south. Empty when not recorded.
- `license` (text): The terms the record is offered on, e.g. CC BY 4.0 (credit required).
- `license_url` (text): A link to the full terms.
- `life_stage` (text): Adult, Juvenile, Larva and so on.
- `locality` (text): Where it was found, in the publisher's own words.
- `longitude` (number): Degrees east, negative for west. Empty when not recorded.
- `media` (list): Photos, video and sound attached to the record. Empty for most records; filter on 'Only records with media' to get just the ones that have any.
- `occurrence_status` (text): Present when the species was found, Absent when it was looked for and not found. Almost every record is Present.
- `publisher_key` (text): The organization that published the dataset.
- `rank` (text): How precisely it was identified: Species, Genus, Family.
- `recorded_by` (text): Who found it.
- `recorded_on` (text): When it was found, as the publisher recorded it. Often a date, sometimes a date and time, and sometimes a range.
- `scientific_name` (text): The name as the publisher recorded it.
- `species` (text): The species name, without authorship.
- `species_key` (number): The species key, ready to pass to any species action.
- `state_province` (text): The state, province or region.
- `taxon_key` (number): The key of whatever the record was identified to, which for a record identified only to genus is the genus rather than a species.
- `url` (text): The record's page on gbif.org, to open and check it.
- `year` (number): The year it was found.

**Example output**

```json
{
  "accepted_scientific_name": "Panthera onca (Linnaeus, 1758)",
  "basis_of_record": "Human observation",
  "catalog_number": "333796888",
  "classification": {
    "class": "Mammalia",
    "family": "Felidae",
    "genus": "Panthera",
    "kingdom": "Animalia",
    "order": "Carnivora",
    "phylum": "Chordata",
    "species": "Panthera onca"
  },
  "collection_code": "Observations",
  "continent": "South America",
  "coordinate_uncertainty_metres": 30508.0,
  "country": "Brazil",
  "country_code": "BR",
  "dataset_key": "50c9509d-22c7-4a22-a47d-8c48425ef4a7",
  "dataset_name": "iNaturalist research-grade observations",
  "depth_metres": null,
  "elevation_metres": null,
  "identified_by": "Miguel A. Paix\u00e3o",
  "individual_count": null,
  "institution": "iNaturalist",
  "issues": [
    "COORDINATE_ROUNDED"
  ],
  "key": 6129956519,
  "latitude": -20.061761,
  "license": "CC BY 4.0 (credit required)",
  "license_url": "http://creativecommons.org/licenses/by/4.0/legalcode",
  "life_stage": "Adult",
  "locality": "Miranda, BR-MS, BR",
  "longitude": -56.797438,
  "media": [],
  "occurrence_status": "Present",
  "publisher_key": "28eb1a3f-1c15-4a95-931a-4af90ecb574d",
  "rank": "Species",
  "recorded_by": "Miguel A. Paix\u00e3o",
  "recorded_on": "2026-01-04T15:31",
  "scientific_name": "Panthera onca (Linnaeus, 1758)",
  "species": "Panthera onca",
  "species_key": 5219426,
  "state_province": "Mato Grosso do Sul",
  "taxon_key": 5219426,
  "url": "https://www.gbif.org/occurrence/6129956519",
  "year": 2026
}
```

### Get dataset details

One dataset in full: what it covers, how many records it holds, who publishes it, the terms it is offered on, and the citation to use when you publish anything based on it. No API key required.

**Inputs**

- Dataset key (`key`, text, required): The dataset's key in GBIF. 'Search datasets' returns it, and so does every occurrence record.

**Outputs**

- `citation` (text): The citation to use when you publish anything based on this dataset. Only 'Get dataset details' returns it.
- `description` (text): What it covers, in full.
- `doi` (text): Its DOI, e.g. 10.15468/ab3s5x.
- `doi_url` (text): That DOI as a link.
- `homepage` (text): The publisher's own page for it.
- `key` (text): GBIF's id for this dataset. Use it to filter a record search.
- `keywords` (list): Tags the publisher gave it.
- `license` (text): The terms it is offered on, e.g. CC BY 4.0 (credit required).
- `license_url` (text): A link to the full terms.
- `published_on` (text): When it was published.
- `publisher` (text): The organization behind it.
- `publisher_key` (text): That organization's key.
- `publishing_country_code` (text): Where the publisher is, as a two-letter code.
- `record_count` (number): How many occurrence records it holds. Empty for a checklist, which holds names rather than records.
- `subtype` (text): A finer kind, e.g. Specimen or Observation.
- `title` (text): The dataset's name.
- `type` (text): Occurrence records, Checklist, Sampling event or Metadata only.
- `updated_on` (text): When it last changed.
- `url` (text): The dataset's page on gbif.org.

**Example output**

```json
{
  "citation": "iNaturalist contributors, iNaturalist (2026). iNaturalist Research-grade Observations. iNaturalist.org. Occurrence dataset https://doi.org/10.15468/ab3s5x accessed via GBIF.org on 2026-09-12.",
  "description": "Research-grade records from iNaturalist.",
  "doi": "10.15468/ab3s5x",
  "doi_url": "https://doi.org/10.15468/ab3s5x",
  "homepage": "https://www.inaturalist.org/observations",
  "key": "50c9509d-22c7-4a22-a47d-8c48425ef4a7",
  "keywords": [
    "Observation",
    "Citizen science"
  ],
  "license": "CC BY-NC 4.0 (credit required, non-commercial)",
  "license_url": "http://creativecommons.org/licenses/by-nc/4.0/legalcode",
  "published_on": "2026-09-07T00:00:00.000+00:00",
  "publisher": "",
  "publisher_key": "28eb1a3f-1c15-4a95-931a-4af90ecb574d",
  "publishing_country_code": "",
  "record_count": 166947411,
  "subtype": "Observation",
  "title": "iNaturalist Research-grade Observations",
  "type": "Occurrence records",
  "updated_on": "2026-09-10T19:54:12.868+00:00",
  "url": "https://www.gbif.org/dataset/50c9509d-22c7-4a22-a47d-8c48425ef4a7"
}
```

### Get species details

Everything GBIF holds about one species: the accepted name and its authorship, the full classification, where it lives, how threatened it is, and the work the name was first published in. Takes the key that 'Look up a species name' and 'Search for species' return. No API key required.

**Inputs**

- Species key (`key`, text, required): The species' key in GBIF. 'Look up a species name' and 'Search for species' both return one, and so does every occurrence record.

**Outputs**

- `accepted_key` (number): That accepted name's key, when this one is a synonym.
- `accepted_name` (text): The name to use instead, when this one is a synonym.
- `authorship` (text): Who first described it, and when.
- `canonical_name` (text): The name without authorship, e.g. Puma concolor.
- `classification` (object): Where this organism sits in the tree of life, from kingdom down to species. Group or sort on 'family' or 'order' to summarise a long list of records.
- `common_name` (text): The plainest English name GBIF holds, e.g. Puma. Use 'List common names' for the rest, in every language.
- `dataset_key` (text): The checklist this entry comes from.
- `descendant_count` (number): How many names sit below it - subspecies, varieties and so on.
- `habitats` (list): Where it lives: Marine, Freshwater or Terrestrial.
- `is_synonym` (true/false): True when this name has been superseded by another.
- `key` (number): GBIF's id for this species. This is the key every other action here takes.
- `published_in` (text): The work the name was first published in.
- `rank` (text): Species, Genus, Family and so on.
- `scientific_name` (text): The full name with its authorship, e.g. Puma concolor (Linnaeus, 1771).
- `status` (text): Accepted for the current name, Synonym for an older one, Doubtful where GBIF is unsure.
- `threat_statuses` (list): Conservation assessments GBIF holds, e.g. Least concern, Endangered. Empty for most species.
- `url` (text): The species' page on gbif.org.

**Example output**

```json
{
  "accepted_key": null,
  "accepted_name": "",
  "authorship": "(Linnaeus, 1771)",
  "canonical_name": "Puma concolor",
  "classification": {
    "class": "Mammalia",
    "family": "Felidae",
    "genus": "Puma",
    "kingdom": "Animalia",
    "order": "Carnivora",
    "phylum": "Chordata",
    "species": "Puma concolor"
  },
  "common_name": "puma",
  "dataset_key": "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
  "descendant_count": 7,
  "habitats": [],
  "is_synonym": false,
  "key": 2435099,
  "published_in": "Mantissa Plantarum vol.2 p.266",
  "rank": "Species",
  "scientific_name": "Puma concolor (Linnaeus, 1771)",
  "status": "Accepted",
  "threat_statuses": [],
  "url": "https://www.gbif.org/species/2435099"
}
```

### List common names

What people actually call a species, in every language GBIF has recorded - a puma has 230 names across 40-odd languages. Pick a language to get only those, for labelling something in the language your readers speak. No API key required.

**Inputs**

- Species key (`key`, text, required): The species' key in GBIF. 'Look up a species name' and 'Search for species' both return one, and so does every occurrence record.
- Language (`language`, text): Optional. Only names in this language. Leave it blank for every language at once.
- How many to return (`limit`, number): Optional. Up to 1000 names a page; 50 by default. From 1 to 1000. Default: `50`.

**Outputs**

- `language_filter` (text): The language that was asked for. Empty when all languages were returned.
- `names` (list): The common names, one entry each.
- `returned_count` (number): How many came back.
- `total_count` (number): How many names there are in the chosen language, before the page size was applied.

**Example output**

```json
{
  "language_filter": "eng",
  "names": [
    {
      "country_code": "",
      "language_code": "eng",
      "name": "Mountain Lion",
      "source": "Catalogue of Life"
    },
    {
      "country_code": "",
      "language_code": "eng",
      "name": "Puma",
      "source": "Catalogue of Life"
    }
  ],
  "returned_count": 2,
  "total_count": 2
}
```

### Look up a species name

Check a scientific name against GBIF's own list and get back the accepted spelling, the rank, and the full classification from kingdom down to species. The step to run over a column of names before anything else: it catches typos, replaces an out-of-date name with the current one, and fills in the family and order nobody wrote down. When GBIF does not recognise a name it says so rather than guessing. No API key required.

**Inputs**

- Scientific name (`name`, text, required): The name to check. A species, or any broader group - Felidae and Aves work as well as Puma concolor. GBIF matches scientific names rather than common ones, so 'jaguar' will not be found where 'Panthera onca' will.

**Outputs**

- `canonical_name` (text): The name without authorship, e.g. Puma concolor.
- `classification` (object): Where this organism sits in the tree of life, from kingdom down to species. Group or sort on 'family' or 'order' to summarise a long list of records.
- `confidence` (number): How sure GBIF is, from 0 to 100.
- `found` (true/false): True when GBIF recognised the name itself. This is the field to branch on. It is false when GBIF could only place the name in a broader group, even though a high confidence comes back with that - the confidence belongs to the group it fell back to, not to the name you asked about.
- `is_synonym` (true/false): True when this name has been superseded by another.
- `key` (number): GBIF's id for this species. This is the key every other action here takes.
- `match_type` (text): How it was found: an exact match, a close match on a different spelling, or no match.
- `note` (text): What to do about a name that was not found. Empty when it was.
- `rank` (text): Species, Genus, Family and so on.
- `scientific_name` (text): The full name with its authorship, e.g. Puma concolor (Linnaeus, 1771).
- `searched_for` (text): The name that was looked up.
- `status` (text): Accepted for the current name, Synonym for an older one, Doubtful where GBIF is unsure.
- `url` (text): The species' page on gbif.org.

**Example output**

```json
{
  "canonical_name": "Puma concolor",
  "classification": {
    "class": "Mammalia",
    "family": "Felidae",
    "genus": "Puma",
    "kingdom": "Animalia",
    "order": "Carnivora",
    "phylum": "Chordata",
    "species": "Puma concolor"
  },
  "confidence": 99,
  "found": true,
  "is_synonym": false,
  "key": 2435099,
  "match_type": "Exact match",
  "note": "",
  "rank": "Species",
  "scientific_name": "Puma concolor (Linnaeus, 1771)",
  "searched_for": "Puma concolor",
  "status": "Accepted",
  "url": "https://www.gbif.org/species/2435099"
}
```

### Search datasets

Find the datasets behind the records - who collected what, where, and how much of it. Useful on its own ('what bird datasets does Kenya publish?') and as the step before narrowing a record search to one source. No API key required.

**Inputs**

- Search text (`query`, text): Optional. Words to look for in the title, description and keywords.
- Kind of dataset (`type`, text): Optional. Occurrence records are individual sightings and specimens; a checklist is a list of species with no records attached. One of: `OCCURRENCE` (Occurrence records - individual sightings and specimens), `CHECKLIST` (Checklist - a list of species), `SAMPLING_EVENT` (Sampling event - surveys with a documented method), `METADATA` (Metadata only - a description with no records).
- Published from (`publishing_country`, text): Optional. Only datasets published by an organization in this country - which is where the publisher is, not necessarily where the records were collected.
- Publisher (`publisher_key`, text): Optional. Only datasets from this one organization. 'Search publishers' returns the key.
- How many to return (`limit`, number): Optional. Up to 1000 datasets a page; 20 by default. From 1 to 1000. Default: `20`.
- Skip (`offset`, number): Optional. How many to skip before this page, for walking through a long list. Leave blank to start at the beginning. From 0 to 100000. Default: `0`.

**Outputs**

- `datasets` (list): The datasets that matched.
- `has_more` (true/false): True when there are more to fetch. Add the page size to Skip and run again.
- `limit` (number): The page size that was used.
- `offset` (number): How many were skipped.
- `returned_count` (number): How many came back on this page.
- `total_count` (number): How many datasets match in total, not just on this page.

**Example output**

```json
{
  "datasets": [
    {
      "citation": "",
      "description": "Research-grade records from iNaturalist.",
      "doi": "10.15468/ab3s5x",
      "doi_url": "https://doi.org/10.15468/ab3s5x",
      "homepage": "https://www.inaturalist.org/observations",
      "key": "50c9509d-22c7-4a22-a47d-8c48425ef4a7",
      "keywords": [
        "Observation",
        "Citizen science"
      ],
      "license": "CC BY-NC 4.0 (credit required, non-commercial)",
      "license_url": "http://creativecommons.org/licenses/by-nc/4.0/legalcode",
      "published_on": "2026-09-07T00:00:00.000+00:00",
      "publisher": "iNaturalist.org",
      "publisher_key": "28eb1a3f-1c15-4a95-931a-4af90ecb574d",
      "publishing_country_code": "US",
      "record_count": 166947411,
      "subtype": "Observation",
      "title": "iNaturalist Research-grade Observations",
      "type": "Occurrence records",
      "updated_on": "2026-09-10T19:54:12.868+00:00",
      "url": "https://www.gbif.org/dataset/50c9509d-22c7-4a22-a47d-8c48425ef4a7"
    }
  ],
  "has_more": true,
  "limit": 20,
  "offset": 0,
  "returned_count": 1,
  "total_count": 217
}
```

### Search for species

Find species by name when you do not know the exact one. Where 'Look up a species name' answers 'is this name right', this answers 'what names are there like this'. Narrow by rank, by whether the name is current, by whether the organism lives on land, in fresh water or in the sea, or to everything within a group such as Felidae. No API key required.

**Inputs**

- Search text (`query`, text): Optional. Part of a name to look for. Scientific names match best; common names are indexed too but rank by text rather than by fame, so 'jaguar' finds a moth called Schinia jaguarina before it finds the cat.
- Rank (`rank`, text): Optional. Only names at this level. Set it to Species to keep genera and families out of the results. One of: `KINGDOM`, `PHYLUM`, `CLASS`, `ORDER`, `FAMILY`, `GENUS`, `SPECIES`, `SUBSPECIES`, `VARIETY`, `FORM`.
- Name status (`status`, text): Optional. Set it to Accepted to leave out older names that have since been replaced. One of: `ACCEPTED` (Accepted - the current name for this organism), `SYNONYM` (Synonym - an older or alternative name), `DOUBTFUL` (Doubtful - GBIF is not confident this name is valid).
- Habitat (`habitat`, list): Optional. Only species living here. Choose several to accept any of them. One or more of: `MARINE` (Marine - the sea), `FRESHWATER`, `TERRESTRIAL` (Terrestrial - on land).
- Within this group (`highest_taxon`, text): Optional. Only names inside this group - Felidae for the cats, Aves for the birds. A name or a key from an earlier step both work.
- How many to return (`limit`, number): Optional. Up to 1000 species a page; 20 by default. From 1 to 1000. Default: `20`.
- Skip (`offset`, number): Optional. How many to skip before this page, for walking through a long list. Leave blank to start at the beginning. From 0 to 100000. Default: `0`.

**Outputs**

- `has_more` (true/false): True when there are more to fetch. Add the page size to Skip and run again.
- `limit` (number): The page size that was used.
- `offset` (number): How many were skipped.
- `returned_count` (number): How many came back on this page.
- `species` (list): The species that matched.
- `total_count` (number): How many species match in total, not just on this page.

**Example output**

```json
{
  "has_more": true,
  "limit": 20,
  "offset": 0,
  "returned_count": 1,
  "species": [
    {
      "accepted_key": null,
      "accepted_name": "",
      "authorship": "(Linnaeus, 1771)",
      "canonical_name": "Puma concolor",
      "classification": {
        "class": "Mammalia",
        "family": "Felidae",
        "genus": "Puma",
        "kingdom": "Animalia",
        "order": "Carnivora",
        "phylum": "Chordata",
        "species": "Puma concolor"
      },
      "common_name": "Puma",
      "dataset_key": "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
      "descendant_count": 7,
      "habitats": [
        "Terrestrial"
      ],
      "is_synonym": false,
      "key": 2435099,
      "published_in": "Mantissa Plantarum vol.2 p.266",
      "rank": "Species",
      "scientific_name": "Puma concolor (Linnaeus, 1771)",
      "status": "Accepted",
      "threat_statuses": [
        "Least concern"
      ],
      "url": "https://www.gbif.org/species/2435099"
    }
  ],
  "total_count": 123
}
```

### Search occurrence records

Find records of where a species has actually been found - museum specimens, survey results and citizen-science sightings pooled from thousands of institutions. Every filter is optional and they combine, so one step answers 'jaguars in Brazil since 2020 with a photo' as easily as 'everything in this dataset'. Each record comes back with what was found, where, when, who found it and where the data came from. No API key required.

**Inputs**

- Species (`species`, text): Optional. A scientific name such as Panthera onca, or a broader group such as Felidae or Aves. A species key from an earlier step works here too. GBIF matches scientific names rather than common ones, so if a name is not recognised the step says so instead of guessing - use 'Search for species' to find the right one.
- Country (`country`, text): Optional. Only records found in this country.
- Continent (`continent`, text): Optional. Only records found on this continent. Use it instead of Country to cover a whole region at once. One of: `AFRICA`, `ANTARCTICA`, `ASIA`, `EUROPE`, `NORTH_AMERICA` (North America), `OCEANIA`, `SOUTH_AMERICA` (South America).
- Found on or after (`recorded_from`, date): Optional. Only records from this date onwards. Leave the other date blank to mean 'ever since'.
- Found on or before (`recorded_to`, date): Optional. Only records up to this date. Leave the other date blank to mean 'from the beginning'.
- Kind of evidence (`basis_of_record`, list): Optional. What the record is based on. Choose several to accept any of them, or leave it blank for all. Preserved specimens are the most reliably identified; human observations are much the most numerous. One or more of: `HUMAN_OBSERVATION` (Human observation - someone saw it), `MACHINE_OBSERVATION` (Machine observation - a camera or sensor caught it), `PRESERVED_SPECIMEN` (Preserved specimen - held in a museum or herbarium), `LIVING_SPECIMEN` (Living specimen - in a zoo, garden or culture collection), `FOSSIL_SPECIMEN` (Fossil specimen), `MATERIAL_SAMPLE` (Material sample - tissue, DNA or similar), `MATERIAL_CITATION` (Material citation - a specimen cited in a publication), `LITERATURE` (Literature - taken from a publication), `OCCURRENCE` (Occurrence - the publisher did not say which), `UNKNOWN`.
- Present or absent (`occurrence_status`, text): Optional. Nearly every record says a species was found somewhere, but a few say it was looked for and not found. Leave this blank for both, as gbif.org does. One of: `PRESENT` (Present - the species was found), `ABSENT` (Absent - it was looked for and not found).
- Only records with media (`media_type`, list): Optional. Only records with a photo, video or sound recording attached. Choose several to accept any of them. One or more of: `StillImage` (Photo), `MovingImage` (Video), `Sound` (Sound recording), `InteractiveResource` (Interactive resource).
- Dataset (`dataset_key`, text): Optional. Only records from this one dataset. 'Search datasets' returns the key, and so does every record.
- Found by (`recorded_by`, text): Optional. Only records credited to this person or team.
- Only records with coordinates (`has_coordinates`, true/false): Optional. Turn on when you are going to map or measure the results - roughly a fifth of records have no position at all.
- Place or keyword (`search_text`, text): Optional. Matches the words in a record, which is the way to search by place: 'Yellowstone', 'Serengeti'. For a species, use the Species field above instead - it resolves the name properly.
- How many to return (`limit`, number): Optional. Up to 300 records a page; 20 by default. From 1 to 300. Default: `20`.
- Skip (`offset`, number): Optional. How many to skip before this page, for walking through a long list. Leave blank to start at the beginning. From 0 to 100000. Default: `0`.

**Outputs**

- `has_more` (true/false): True when there are more to fetch. Add the page size to Skip and run again.
- `limit` (number): The page size that was used.
- `offset` (number): How many were skipped.
- `records` (list): The records that matched.
- `returned_count` (number): How many came back on this page.
- `species_matched` (object): Which species was actually searched for. Filled in when the Species field was used, so a name that resolved to something unexpected is visible in the result rather than hidden in the request. Empty when no species was given.
- `total_count` (number): How many records match in total, not just on this page.

**Example output**

```json
{
  "has_more": true,
  "limit": 20,
  "offset": 0,
  "records": [
    {
      "accepted_scientific_name": "Panthera onca (Linnaeus, 1758)",
      "basis_of_record": "Human observation",
      "catalog_number": "333796888",
      "classification": {
        "class": "Mammalia",
        "family": "Felidae",
        "genus": "Panthera",
        "kingdom": "Animalia",
        "order": "Carnivora",
        "phylum": "Chordata",
        "species": "Panthera onca"
      },
      "collection_code": "Observations",
      "continent": "South America",
      "coordinate_uncertainty_metres": 30508.0,
      "country": "Brazil",
      "country_code": "BR",
      "dataset_key": "50c9509d-22c7-4a22-a47d-8c48425ef4a7",
      "dataset_name": "iNaturalist research-grade observations",
      "depth_metres": null,
      "elevation_metres": null,
      "identified_by": "Miguel A. Paix\u00e3o",
      "individual_count": null,
      "institution": "iNaturalist",
      "issues": [
        "COORDINATE_ROUNDED"
      ],
      "key": 6129956519,
      "latitude": -20.061761,
      "license": "CC BY 4.0 (credit required)",
      "license_url": "http://creativecommons.org/licenses/by/4.0/legalcode",
      "life_stage": "Adult",
      "locality": "Miranda, BR-MS, BR",
      "longitude": -56.797438,
      "media": [
        {
          "creator": "Miguel A. Paix\u00e3o",
          "format": "image/jpeg",
          "license": "http://creativecommons.org/licenses/by/4.0/",
          "page_url": "https://www.inaturalist.org/photos/626403359",
          "type": "Photo",
          "url": "https://inaturalist-open-data.s3.amazonaws.com/photos/626403359/original.jpg"
        }
      ],
      "occurrence_status": "Present",
      "publisher_key": "28eb1a3f-1c15-4a95-931a-4af90ecb574d",
      "rank": "Species",
      "recorded_by": "Miguel A. Paix\u00e3o",
      "recorded_on": "2026-01-04T15:31",
      "scientific_name": "Panthera onca (Linnaeus, 1758)",
      "species": "Panthera onca",
      "species_key": 5219426,
      "state_province": "Mato Grosso do Sul",
      "taxon_key": 5219426,
      "url": "https://www.gbif.org/occurrence/6129956519",
      "year": 2026
    }
  ],
  "returned_count": 1,
  "species_matched": {
    "confidence": 99,
    "key": 5219426,
    "match_type": "Exact match",
    "rank": "Species",
    "scientific_name": "Panthera onca (Linnaeus, 1758)"
  },
  "total_count": 979
}
```

### Search publishers

Find the institutions that publish into GBIF - museums, herbaria, universities, government agencies and citizen-science projects - by name or by country, with how many datasets each has published. The far end of the trail that runs from a record to its dataset to whoever stands behind it. No API key required.

**Inputs**

- Search text (`query`, text): Optional. Words to look for in the name and description.
- Country (`country`, text): Optional. Only organizations based in this country.
- How many to return (`limit`, number): Optional. Up to 1000 publishers a page; 20 by default. From 1 to 1000. Default: `20`.
- Skip (`offset`, number): Optional. How many to skip before this page, for walking through a long list. Leave blank to start at the beginning. From 0 to 100000. Default: `0`.

**Outputs**

- `has_more` (true/false): True when there are more to fetch. Add the page size to Skip and run again.
- `limit` (number): The page size that was used.
- `offset` (number): How many were skipped.
- `publishers` (list): The organizations that matched.
- `returned_count` (number): How many came back on this page.
- `total_count` (number): How many publishers match in total, not just on this page.

**Example output**

```json
{
  "has_more": false,
  "limit": 20,
  "offset": 0,
  "publishers": [
    {
      "address": "Calle Lord Cochrane 111, Of 110, San Isidro, Lima, Peru",
      "city": "Lima",
      "country_code": "PE",
      "dataset_count": 1,
      "description": "Assessments and long-term monitoring of biodiversity from the Amazon to the Andes.",
      "email": "",
      "homepage": "",
      "key": "7a2605e0-8a1e-4393-836b-d6d6ac064e74",
      "latitude": -12.11042,
      "longitude": -77.03707,
      "title": "Smithsonian Peru Biodiversity Program",
      "url": "https://www.gbif.org/publisher/7a2605e0-8a1e-4393-836b-d6d6ac064e74"
    }
  ],
  "returned_count": 1,
  "total_count": 8
}
```
