BYTETOOLS

iNaturalist API

Free iNaturalist API with no key: millions of citizen-science species observations with photos, coordinates, identifications and quality grades. Tested example.

No API key requiredCORS enabledHTTPSFree tier

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

What is the iNaturalist API?

The iNaturalist API is a free, key-free API providing access to hundreds of millions of citizen-science wildlife observations, each with photographs, coordinates, community identifications and a data quality grade.

iNaturalist is the largest citizen science biodiversity platform, and its API exposes the whole observation corpus — photographs, locations, dates and the community identification process behind each record.

The `quality_grade` field is essential and frequently ignored. Only observations marked `research` have community-verified identifications; `needs_id` and `casual` records may be misidentified. Filtering to research grade is almost always the right default for any analytical use.

Quick facts

Base URL
https://api.inaturalist.org/v1
Authentication
No API key for public reads. Writing observations requires OAuth.
Rate limit
About 100 requests per minute, and the maintainers ask for no more than 10,000 per day.
Pricing
Free. Observation photos carry per-user licences — check before reuse.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the iNaturalist 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. Fetch recent species observations

GET https://api.inaturalist.org/v1/observations?per_page=1

curl
curl 'https://api.inaturalist.org/v1/observations?per_page=1'
JavaScript (fetch)
const res = await fetch("https://api.inaturalist.org/v1/observations?per_page=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.inaturalist.org/v1/observations?per_page=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "total_results": 378721193,
  "page": 1,
  "per_page": 1,
  "results": [
    {
      "quality_grade": "needs_id",
      "time_observed_at": "2026-08-17T13:50:46-04:00",
      "taxon_geoprivacy": null,
      "annotations": [],
      "uuid": "16f73012-9d1f-4ddb-89ba-b464edb94569",
      "observed_on_details": {
        "date": "2026-08-17",
        "day": 17,
        "month": 8,
        "year": 2026,
        "hour": 13,
        "week": 34
      },
      "id": 392741421,
      "cached_votes_total": 0,
      "identifications_most_agree": false,
      "created_at_details": {
        "date": "2026-08-19",
        "day": 19,
        "month": 8,
        "year": 2026,
        "hour": 15,
        "week": 34
      },
      "species_guess": null,
      "identifications_most_disagree": false,
      "tags": [],
      "positional_accuracy": 10,
      "comments_count": 0,
      "site_id": 1,
      "created_time_zone": "America/New_York",
      "license_code": "cc-by-nc",
      "observed_time_zone": "America/New_York",
      "quality_metrics": [],
      "public_positional_accuracy": 10,
      "reviewed_by": [
        6211994
      ],
      "oauth_application_id": 843,
      "flags": [],
      "created_at": "2026-08-19T15:51:05-04:00",
      "description": null,
      "time_zone_offset": "-05:00",
      "project_ids_with_curator_id": [],
      "observed_on": "2026-08-17",
      "observed_on_string": "2026-08-17 13:50:46",
      "updated_at": "2026-08-19T15:51:06-04:00",
      "sounds": [],
      "place_ids": [
        1,
        39,
        9853,
        48819,
        50853,
        518

Parameters

ParameterTypeRequiredDescription
per_pageintegerOptionalResults per page, max 200. 30
taxon_namestringOptionalFilter by species or taxon name. Danaus plexippus
lat / lng / radiusfloatOptionalGeographic filter — centre point and radius in km. 31.52
quality_gradestringOptionalresearch, needs_id or casual. research
d1 / d2stringOptionalObservation date range. 2026-01-01

Response fields

total_resultsinteger
Total observations matching the query.
results[].species_guessstring
The observer's initial identification.
results[].taxonobject
Resolved taxon with scientific name and rank.
results[].quality_gradestring
research, needs_id or casual — filter on this.
results[].photosarray
Photo URLs with per-photo licence codes.
results[].geojsonobject
Observation coordinates, sometimes obscured for sensitive species.
results[].observed_onstring
Date of observation.

What you can build with the iNaturalist API

  • Show local wildlife sightings on a nature or park website
  • Build a species identification learning tool with real photos
  • Analyse seasonal migration and phenology patterns
  • Support ecological research with citizen science data

Common errors and how to fix them

Misidentified species in results

You included non-research-grade observations.

Fix: Filter with quality_grade=research for community-verified identifications only.

Coordinates are vague or missing

Locations for threatened species are deliberately obscured.

Fix: Check the geoprivacy fields; do not assume coordinates are precise.

429

Rate limit exceeded.

Fix: Stay under about 100 requests per minute and cache aggressively.

iNaturalist API — frequently asked questions

Is the iNaturalist API free?

Yes, free with no API key for public reads. Writing observations requires OAuth authentication.

What does quality_grade mean?

It indicates identification confidence. `research` means the community has verified the identification; `needs_id` and `casual` may be wrong. Filter to research grade for any serious use.

Can I use the observation photos?

Only within their licence. Each photo carries its own licence code set by the photographer — many are Creative Commons but some are all rights reserved. Check per photo.

Why are some coordinates imprecise?

iNaturalist deliberately obscures locations for threatened and sensitive species to prevent poaching and disturbance. That is by design, not a data error.

Tools that pair with this API

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