granules: Search granules

API: nasa.gov:nasa-earthdata-api
Endpoint: /granules
Response format: application/json +1 format
Auth: none
Method: GET
Last Status: 403
Latency: 170ms

Description

Search for data granules (individual files) within collections. Requires a collection filter (concept_id, short_name, provider, etc.).

Parameters (11)

bounding_box (string, query, optional)

Spatial bounding box in format: min_lon,min_lat,max_lon,max_lat

cloud_cover (string, query, optional)

Cloud cover percentage range

concept_id (string, query, optional)

Parent collection concept ID

day_night_flag (string, query, optional)

Day or night acquisition

Constraints: {'enum': ['DAY', 'NIGHT', 'UNSPECIFIED']}

granule_ur (string, query, optional)

Granule unique identifier

page_size (integer, query, optional, default: 10)

Number of results per page (max 2000)

Constraints: {'maximum': 2000}

point (string, query, optional)

Point location in format: lon,lat

producer_granule_id (string, query, optional)

Producer granule ID

short_name (string, query, optional)

Collection short name

temporal (string, query, optional)

Temporal range in ISO 8601 format

version (string, query, optional)

Collection version

Examples (5)

Search granules by bounding box curl
curl 'https://cmr.earthdata.nasa.gov/search/granules?bounding_box=-122.5%2C37.7%2C-122.3%2C37.9&page_size=10' \
  -d '{"errors": ["The CMR does not allow querying across granules in all collections. To help optimize your search, you should limit your query using conditions that identify one or more collections, such as provider, provider_id, concept_id, collection_concept_id, short_name, version or entry_title. For any questions please contact cmr-support@nasa.gov."]}'
import requests

resp = requests.get(
    "https://cmr.earthdata.nasa.gov/search/granules",
    params={
        'bounding_box': '-122.5,37.7,-122.3,37.9',
        'page_size': '10',
    },
    json={
        'errors': ['The CMR does not allow querying across granules in all collections. To help optimize your search, you should limit your query using conditions that identify one or more collections, such as provider, provider_id, concept_id, collection_concept_id, short_name, version or entry_title. For any questions please contact cmr-support@nasa.gov.'],
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("nasa-earthdata")
result = api.fetch("granules", bounding_box="-122.5,37.7,-122.3,37.9", page_size=10)

for item in result:
    print(item)
const body = {
  "errors": [
    "The CMR does not allow querying across granules in all collections. To help optimize your search, you should limit your query using conditions that identify one or more collections, such as provider, provider_id, concept_id, collection_concept_id, short_name, version or entry_title. For any questions please contact cmr-support@nasa.gov."
  ]
};

const resp = await fetch("https://cmr.earthdata.nasa.gov/search/granules?bounding_box=-122.5%2C37.7%2C-122.3%2C37.9&page_size=10", {
  body: JSON.stringify(body),
});
const data = await resp.json();
Search granules by collection with temporal filter curl
curl 'https://cmr.earthdata.nasa.gov/search/granules?collection_concept_id=C1234567890-PROV&temporal=2024-01-01T00%3A00%3A00Z%2C2024-03-01T00%3A00%3A00Z&page_size=20'
import requests

resp = requests.get(
    "https://cmr.earthdata.nasa.gov/search/granules",
    params={
        'collection_concept_id': 'C1234567890-PROV',
        'temporal': '2024-01-01T00:00:00Z,2024-03-01T00:00:00Z',
        'page_size': '20',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("nasa-earthdata")
result = api.fetch("granules", collection_concept_id="C1234567890-PROV", temporal="2024-01-01T00:00:00Z,2024-03-01T00:00:00Z", page_size=20)

for item in result:
    print(item)
const resp = await fetch("https://cmr.earthdata.nasa.gov/search/granules?collection_concept_id=C1234567890-PROV&temporal=2024-01-01T00%3A00%3A00Z%2C2024-03-01T00%3A00%3A00Z&page_size=20");
const data = await resp.json();
Search granules by point with cloud cover filter curl
curl 'https://cmr.earthdata.nasa.gov/search/granules?point=-95.5%2C29.7&cloud_cover=0%2C10&day_night_flag=DAY&page_size=15' \
  -d '{"errors": ["The CMR does not allow querying across granules in all collections. To help optimize your search, you should limit your query using conditions that identify one or more collections, such as provider, provider_id, concept_id, collection_concept_id, short_name, version or entry_title. For any questions please contact cmr-support@nasa.gov."]}'
import requests

resp = requests.get(
    "https://cmr.earthdata.nasa.gov/search/granules",
    params={
        'point': '-95.5,29.7',
        'cloud_cover': '0,10',
        'day_night_flag': 'DAY',
        'page_size': '15',
    },
    json={
        'errors': ['The CMR does not allow querying across granules in all collections. To help optimize your search, you should limit your query using conditions that identify one or more collections, such as provider, provider_id, concept_id, collection_concept_id, short_name, version or entry_title. For any questions please contact cmr-support@nasa.gov.'],
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("nasa-earthdata")
result = api.fetch("granules", point="-95.5,29.7", cloud_cover="0,10", day_night_flag="DAY", page_size=15)

for item in result:
    print(item)
const body = {
  "errors": [
    "The CMR does not allow querying across granules in all collections. To help optimize your search, you should limit your query using conditions that identify one or more collections, such as provider, provider_id, concept_id, collection_concept_id, short_name, version or entry_title. For any questions please contact cmr-support@nasa.gov."
  ]
};

const resp = await fetch("https://cmr.earthdata.nasa.gov/search/granules?point=-95.5%2C29.7&cloud_cover=0%2C10&day_night_flag=DAY&page_size=15", {
  body: JSON.stringify(body),
});
const data = await resp.json();
Search for granules openapi-spec
curl 'https://cmr.earthdata.nasa.gov/search/granules?collection_concept_id=C123456-PROV1&temporal=2020-01-01T00%3A00%3A00Z%2C2020-12-31T23%3A59%3A59Z&cloud_cover=0%2C20'
import requests

resp = requests.get(
    "https://cmr.earthdata.nasa.gov/search/granules",
    params={
        'collection_concept_id': 'C123456-PROV1',
        'temporal': '2020-01-01T00:00:00Z,2020-12-31T23:59:59Z',
        'cloud_cover': '0,20',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("nasa-earthdata")
result = api.fetch("granules", collection_concept_id="C123456-PROV1", temporal="2020-01-01T00:00:00Z,2020-12-31T23:59:59Z", cloud_cover="0,20")

for item in result:
    print(item)
const resp = await fetch("https://cmr.earthdata.nasa.gov/search/granules?collection_concept_id=C123456-PROV1&temporal=2020-01-01T00%3A00%3A00Z%2C2020-12-31T23%3A59%3A59Z&cloud_cover=0%2C20");
const data = await resp.json();
Search granules openapi-spec
curl 'https://cmr.earthdata.nasa.gov/granules?cloud_cover=0%2C20'
import requests

resp = requests.get(
    "https://cmr.earthdata.nasa.gov/granules",
    params={
        'cloud_cover': '0,20',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("nasa-earthdata")
result = api.fetch("granules", cloud_cover="0,20")

for item in result:
    print(item)
const resp = await fetch("https://cmr.earthdata.nasa.gov/granules?cloud_cover=0%2C20");
const data = await resp.json();

Probe History

Latency

Status Codes

TimeStatusLatencySize
2026-04-16 17:17:31.536442 403 170ms
2026-04-16 17:16:08.551000 200 355ms
2026-04-16 17:12:59.631608 400 422ms
2026-04-16 04:00:39.962587 400 580ms
2026-04-16 03:52:00.167729 403 166ms
2026-04-16 03:40:38.606315 200 234ms
2026-04-16 00:28:18.763000 403 154ms
2026-04-16 00:25:31.724289 200 322ms
2026-04-15 03:50:03.928075 403 172ms
2026-04-15 02:19:26.714849 200 320ms
2026-04-15 02:01:12.364190 403 168ms
2026-04-15 01:25:28.627277 200 338ms
2026-04-15 00:57:21.840131 400 469ms
2026-04-14 03:18:15.875797 403 133ms
2026-04-14 03:05:08.393776 403 120ms
2026-04-14 02:17:22.883623 200 286ms
2026-04-14 01:49:58.570719 400 391ms
2026-04-14 01:18:25.439568 200 290ms
2026-04-12 15:46:43.271037 403 188ms
2026-04-12 14:56:42.206224 400 461ms
2026-04-12 14:04:00.764169 200 261ms
2026-04-12 13:34:36.678975 200 301ms
2026-04-12 13:28:42.218754 403 169ms
2026-04-10 06:49:01.548779 200 235ms
2026-04-10 05:09:59.387313 403 132ms
2026-04-10 04:18:04.194598 200 1749ms
2026-04-10 02:07:25.722547 403 97ms
2026-04-10 02:01:00.602760 400 388ms
2026-04-09 03:49:10.972969 403 270ms
2026-04-09 01:38:50.998773 403 151ms
2026-04-09 00:59:34.132899 200 309ms
2026-04-09 00:15:58.426016 400 435ms
2026-04-09 00:13:44.511304 200 310ms
2026-04-08 07:21:00.348061 400 373ms
2026-04-08 07:11:11.027845 403 131ms
2026-04-08 00:33:10.830926 403 113ms
2026-04-08 00:19:46.241661 200 241ms
2026-04-08 00:08:37.243262 200 242ms
2026-04-07 00:45:32.807317 400 508ms
2026-04-07 00:44:03.261191 200 278ms
2026-04-07 00:27:59.720841 403 192ms
2026-04-07 00:26:35.542985 200 251ms
2026-04-07 00:23:24.325983 403 149ms
2026-04-06 04:28:47.596735 403 213ms
2026-04-06 04:18:31.422939 400 448ms
2026-04-06 04:11:40.120180 200 686ms
2026-04-05 19:38:28.600223 200 468ms
2026-04-05 19:32:01.055901 403 181ms
2026-04-05 14:39:40.055747 403 209ms
2026-04-05 14:26:46.683925 200 334ms