Community science / Biodiversity observations
iNaturalist observations
iNaturalist exposes people-generated observations with event time, public or obscured coordinates, positional accuracy, quality grade, taxon identity and conservation context, media, annotations and identifications.
Provenance and access
How the data is reached
Public GET /v1/observations with bbox, quality, paging and sorting filters. No auth for public reads.
Per observation and per photo; tested observation license_code was cc-by-nc.
- Method
- GET
- Format
- JSON
- Authentication
- None
Field-level detail
What is actually returned
Observation response and core observation
High-value public fields; the API has additional annotation, identification, comment, project and vote objects documented separately.
| Field / path | Type | Null? | Example | Meaning | Freshness |
|---|---|---|---|---|---|
total_results | integer | No | 32698 | Matching observations | derived |
page | integer | No | 1 | Page number | derived |
per_page | integer | No | 1 | Page size | derived |
results[].id | integer | No | 383860697 | Observation ID | reference |
results[].uuid | UUID string | No | ... | Global observation ID | reference |
results[].quality_grade | string enum | No | research | Data-quality grade | derived |
results[].species_guess | string | Yes | Greek Tortoise | Display identification guess | reference |
results[].observed_on | date string | Yes | 2026-07-21 | Observation date | historical |
results[].time_observed_at | ISO datetime | Yes | 2026-07-21T18:30:39Z | Normalized observation time | historical |
results[].observed_on_details | object | Yes | {"date":"2026-07-21","day":21} | Decomposed local date/time | derived |
results[].created_at | ISO datetime | No | 2026-07-21T... | Platform creation time | historical |
results[].updated_at | ISO datetime | No | 2026-07-22T... | Last platform update | live |
results[].description | string | Yes | null | Observer description | historical |
results[].positional_accuracy | number | Yes | ... | Submitted coordinate accuracy in meters | historical |
results[].public_positional_accuracy | number | Yes | 27754 | Accuracy of public coordinate in meters | derived |
results[].location | string | Yes | 41.691299204,44.957892466 | Public lat/lon string | reference |
results[].geojson.type | string | Yes | Point | Public geometry type | reference |
results[].geojson.coordinates | array<number> | Yes | [44.957892466,41.691299204] | Public longitude and latitudeCan be deliberately obscured. | reference |
results[].place_guess | string | Yes | ... | Human-readable place | reference |
results[].place_ids | array<integer> | Yes | [...] | iNaturalist place IDs | reference |
results[].geoprivacy | string | Yes | null | User geoprivacy setting | reference |
results[].taxon_geoprivacy | string | Yes | obscured | Conservation-driven geoprivacy | derived |
results[].obscured | boolean | No | true | Public position is obscured | derived |
results[].mappable | boolean | No | true | Public observation is mappable | derived |
results[].captive | boolean | No | false | Captive/cultivated flag | reference |
results[].license_code | string | Yes | cc-by-nc | Observation license | reference |
results[].tags | array<string> | Yes | [] | User tags | historical |
results[].annotations | array<object> | Yes | [] | Controlled attributes | reference |
results[].comments_count | integer | No | 0 | Comment count | live |
results[].identifications_count | integer | No | ... | Identification count | live |
results[].num_identification_agreements | integer | No | ... | Agreeing identifications | derived |
results[].num_identification_disagreements | integer | No | ... | Disagreeing identifications | derived |
results[].uri | URL | No | https://www.inaturalist.org/observations/383860697 | Canonical page | reference |
results[].user.id | integer | No | ... | Public contributor ID | reference |
results[].user.login | string | No | ... | Public contributor handle | reference |
Taxon and observation photo
Taxon identity, status and media fields.
| Field / path | Type | Null? | Example | Meaning | Freshness |
|---|---|---|---|---|---|
results[].taxon.id | integer | No | ... | iNaturalist taxon ID | reference |
results[].taxon.name | string | No | Testudo graeca | Scientific name | reference |
results[].taxon.rank | string | No | species | Taxonomic rank | reference |
results[].taxon.preferred_common_name | string | Yes | Greek Tortoise | Common name | reference |
results[].taxon.iconic_taxon_name | string | Yes | Reptilia | Broad iconic group | reference |
results[].taxon.threatened | boolean | Yes | true | Threat flag | reference |
results[].taxon.native / introduced / endemic | boolean | Yes | false | Place-sensitive status flags | derived |
results[].taxon.default_photo | object | Yes | {license_code,attribution,url,...} | Default taxon image metadata | reference |
results[].taxon.conservation_status | object | Yes | {"status":"VU"} | Conservation status and authority/context | reference |
results[].observation_photos[].photo.id | integer | Yes | ... | Observation photo ID | reference |
results[].observation_photos[].photo.license_code | string | Yes | cc-by-nc | Photo license | reference |
results[].observation_photos[].photo.url | URL | Yes | .../square.jpg | Photo URL | reference |
Representative evidence
Sample records
Obscured Greek tortoise observation
Retrieved 2026-07-22 13:39 Asia/Tbilisi
{"total_results":32698,"results":[{"id":383860697,"quality_grade":"research","species_guess":"Greek Tortoise","observed_on":"2026-07-21","taxon_geoprivacy":"obscured","public_positional_accuracy":27754,"obscured":true,"geojson":{"type":"Point","coordinates":[44.957892466,41.691299204]},"license_code":"cc-by-nc","taxon":{"name":"Testudo graeca","rank":"species","preferred_common_name":"Greek Tortoise","threatened":true}}]}Boundaries
Reliability, caveats, and privacy
What held up
- Official API returned a current result and explicit total count.
- updated_at and geoprivacy fields make change/privacy semantics visible.
What can go wrong
- Bbox is broader than administrative Tbilisi.
- Threatened taxa can have intentionally obscured coordinates.
- Observation and photo licenses vary.
- Community identification can change.
Privacy boundary
- Never attempt to reverse obscured coordinates.
- Avoid profiling public contributor accounts.
Cross-source possibilities
Ideas using this source
Source trail
Primary pages and documentation
- DocumentationiNaturalist API documentation ↗
https://api.inaturalist.org/v1/docs/