BYTETOOLS

iDigBio API

Free iDigBio search API with no key: query 140M+ digitised museum specimen records in Darwin Core, with locality, collector, date and media. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

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

What is the iDigBio API?

The iDigBio search API is a free, key-free interface to more than 140 million digitised biological specimen records from natural history collections. Records come back in Darwin Core terms with taxonomy, collecting locality, coordinates, collector, dates and links to specimen images.

iDigBio is the US national aggregator for digitised natural history collections — the physical specimens in museum drawers, with their labels transcribed and often photographed. That makes it different from observation-based biodiversity data: each record is backed by a preserved object someone can re-examine, with a catalogue number and an institution behind it. For historical distribution work and for anything where the identification must be verifiable, that provenance is the point.

Queries go in a JSON object passed as the `rq` query parameter, URL-encoded — an unusual pattern that trips people up, but it means the full query grammar including ranges, geographic filters and boolean combinations is available in a GET. Records arrive under `data` with their original Darwin Core term names, prefixed `dwc:` and `dcterms:`, exactly as the institution supplied them. That fidelity is deliberate and it means the data is messy: dates in many formats, coordinates of varying precision, and identifications of varying age. Read `dwc:dateIdentified` and `dwc:identificationRemarks` before treating a determination as current.

Quick facts

Base URL
https://search.idigbio.org/v2
Authentication
No API key or account. Individual records carry the licence set by the contributing institution, most commonly CC0 or CC BY; iDigBio asks that you cite both the aggregator and the source collections.
Rate limit
No published hard limit. iDigBio provides a download API for large result sets, which is the intended route beyond a few thousand records.
Pricing
Free. Record licences are set by contributing institutions.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the iDigBio 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 specimen records for a species

GET https://search.idigbio.org/v2/search/records?rq=%7B%22scientificname%22%3A%22puma%20concolor%22%7D&limit=1

curl
curl 'https://search.idigbio.org/v2/search/records?rq=%7B%22scientificname%22%3A%22puma%20concolor%22%7D&limit=1'
JavaScript (fetch)
const res = await fetch("https://search.idigbio.org/v2/search/records?rq=%7B%22scientificname%22%3A%22puma%20concolor%22%7D&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://search.idigbio.org/v2/search/records?rq=%7B%22scientificname%22%3A%22puma%20concolor%22%7D&limit=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "itemCount": 3314,
  "lastModified": "2026-04-23T17:00:33.061Z",
  "items": [
    {
      "uuid": "0746b188-c390-4ab1-bd20-5489a9c6c33c",
      "type": "records",
      "etag": "415551d4f124c12ab39ab088d03b122370a811d2",
      "data": {
        "dwc:identificationRemarks": "Former nature_of_id: expert.",
        "dc:language": "en",
        "dc:type": "PhysicalObject",
        "dwc:recordedBy": "Collector(s): Javier Vasquez",
        "dwc:georeferencedDate": "2013-05-18 00:00:00",
        "dwc:earliestEonOrLowestEonothem": "Phanerozoic",
        "dcterms:accessRights": "http://arctosdb.org/home/data/",
        "dwc:occurrenceID": "https://arctos.database.museum/guid/UTEP:ES:107-1142",
        "dwc:dateIdentified": "2013-07-27",
        "dwc:earliestEpochOrLowestSeries": "Pleistocene",
        "id": "https://arctos.database.museum/guid/UTEP:ES:107-1142",
        "dwc:minimumElevationInMeters": "1645",
        "dwc:stateProvince": "Texas",
        "dwc:locationRemarks": "Rio Grande drainage",
        "dwc:eventDate": "2013-05-18/2013-05-18",
        "dwc:collectionID": "https://arctos.database.museum/collection/UTEP:ES",
        "dwc:institutionCode": "UTEP",
        "dwc:country": "United States",
        "dwc:earliestPeriodOrLowestSystem": "Quaternary",
        "dwc:collectionCode": "Earth Science",
        "dwc:higherClassification": "Animalia, Chordata, Mammalia, Carnivora, Felidae, Puma, Puma concolor",
        "dwc:decimalLatitude": "31.205281",
        "dwc:maximumElevationInMeters": "1645",
        "dwc:locationAccordingTo": "Javier Vasquez",
        "dwc:basisOfR

Parameters

ParameterTypeRequiredDescription
rqqueryRequiredThe record query as a URL-encoded JSON object. Supports exact matches, ranges, geographic filters and boolean logic. {"scientificname":"puma concolor"}
limitqueryOptionalRecords per page, up to 5000 on the search endpoint. 1
offsetqueryOptionalZero-based offset for paging. 0
fieldsqueryOptionalJSON array of field names to return, keeping responses small. ["dwc:scientificName","dwc:country"]
sortqueryOptionalJSON array of sort specifications. ["dwc:eventDate"]
(endpoint) /search/mediapathOptionalSearch specimen images and other media instead of records. /v2/search/media

Response fields

itemCountinteger
Total matching records, independent of `limit`.
items[].uuidstring
iDigBio's stable identifier for the specimen record.
items[].dataobject
The record as supplied, with original Darwin Core term names prefixed `dwc:` and `dcterms:`.
data['dwc:scientificName'] / ['dwc:higherClassification']string
Determination and classification as recorded by the institution, which may be decades old.
data['dwc:decimalLatitude'] / ['dwc:decimalLongitude']string
Coordinates as strings, of varying precision. Many older records are georeferenced retrospectively from locality text.
data['dwc:eventDate']string
Collection date, in whatever format the institution used — frequently a range or a partial date.
data['dwc:institutionCode'] / ['dwc:collectionCode']string
Which museum and collection holds the physical specimen.

What you can build with the iDigBio API

  • Map historical collection localities for a species
  • Find museum specimens available for loan or examination
  • Study range shifts by comparing old and recent specimen records
  • Pull specimen images for identification reference
  • Audit a collection's digitised records against its catalogue

Common errors and how to fix them

400

The `rq` parameter was not valid URL-encoded JSON.

Fix: Build the query object, serialise it to JSON, then URL-encode the whole string. Double-encoding and unencoded braces are the usual failures.

Empty items

Field names or values did not match.

Fix: Query field names are lowercase index names such as `scientificname`, not the `dwc:` terms that appear in responses. The two vocabularies differ.

Inconsistent date formats

Records preserve the institution's original values.

Fix: `dwc:eventDate` can be a year, a range or a full timestamp. Parse defensively and expect failures on a small percentage of records.

Coordinates missing or imprecise

Many specimens predate GPS.

Fix: Check for georeferencing metadata before mapping. Retrospectively georeferenced localities can be accurate to tens of kilometres.

iDigBio API — frequently asked questions

Is the iDigBio API free?

Yes, free with no key or registration. Individual records carry licences set by the contributing institutions, most often CC0 or CC BY, and iDigBio asks that you cite both the aggregator and the source collections.

How is iDigBio different from GBIF?

iDigBio focuses on digitised physical specimens from US natural history collections, preserving the original Darwin Core record verbatim. GBIF aggregates globally and includes large volumes of human observation data alongside specimens. Overlap is substantial but the emphases differ.

How do I write a query?

Build a JSON object of field-value pairs, serialise it, and pass it URL-encoded as the `rq` parameter. The grammar supports exact matches, ranges, geographic shapes and boolean composition, all within a normal GET request.

Can I trust the species identifications?

With care. Each record reflects the determination made by whoever last examined the specimen, which may have been decades ago and before subsequent taxonomic revisions. Check `dwc:dateIdentified` and `dwc:identificationRemarks`, and remember the specimen itself can be re-examined — which is exactly why specimen data is valuable.

Tools that pair with this API

iDigBio 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.