granules: Search granules

API: nasa.gov:nasa-earthdata-cmr-api
Endpoint: /granules
Response format: text/html +1 format
Auth: unknown
Method: GET
Last Status: 400
Latency: 230ms

Description

Search for data granules (individual files) within a collection.

Parameters (8)

bounding_box (string, query, optional)

Spatial bounding box (min_lon,min_lat,max_lon,max_lat)

collection_concept_id (string, query, optional)

Collection concept ID to search within

granule_ur (string, query, optional)

Granule unique identifier

page_num (integer, query, optional, default: 1)

Page number

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

Number of results per page

point (string, query, optional)

Point location (lon,lat)

polygon (string, query, optional)

Polygon coordinates

temporal (string, query, optional)

Temporal range (start_date,end_date)

Examples (4)

Search granules by spatial bounding box curl
curl 'https://cmr.earthdata.nasa.gov/search/granules?bounding_box=-122.5%2C37.5%2C-122.0%2C38.0&page_size=5' \
  -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.5,-122.0,38.0',
        'page_size': '5',
    },
    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-cmr")
result = api.fetch("granules", bounding_box="-122.5,37.5,-122.0,38.0", page_size=5)

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.5%2C-122.0%2C38.0&page_size=5", {
  body: JSON.stringify(body),
});
const data = await resp.json();
Search granules by temporal range and cloud cover curl
curl 'https://cmr.earthdata.nasa.gov/search/granules?temporal=2023-06-01T00%3A00%3A00Z%2C2023-06-30T23%3A59%3A59Z&cloud_cover=0%2C20&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={
        'temporal': '2023-06-01T00:00:00Z,2023-06-30T23:59:59Z',
        'cloud_cover': '0,20',
        '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-cmr")
result = api.fetch("granules", temporal="2023-06-01T00:00:00Z,2023-06-30T23:59:59Z", cloud_cover="0,20", 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?temporal=2023-06-01T00%3A00%3A00Z%2C2023-06-30T23%3A59%3A59Z&cloud_cover=0%2C20&page_size=10", {
  body: JSON.stringify(body),
});
const data = await resp.json();
Search granules by collection concept ID with platform filter curl
curl 'https://cmr.earthdata.nasa.gov/search/granules?collection_concept_id=C1443528505-LAADS&platform=MODIS&page_size=5'
import requests

resp = requests.get(
    "https://cmr.earthdata.nasa.gov/search/granules",
    params={
        'collection_concept_id': 'C1443528505-LAADS',
        'platform': 'MODIS',
        'page_size': '5',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("nasa-earthdata-cmr")
result = api.fetch("granules", collection_concept_id="C1443528505-LAADS", platform="MODIS", page_size=5)

for item in result:
    print(item)
const resp = await fetch("https://cmr.earthdata.nasa.gov/search/granules?collection_concept_id=C1443528505-LAADS&platform=MODIS&page_size=5");
const data = await resp.json();
Search data granules openapi-spec
curl 'https://cmr.earthdata.nasa.gov/search/granules?bounding_box=-180%2C-90%2C180%2C90'
import requests

resp = requests.get(
    "https://cmr.earthdata.nasa.gov/search/granules",
    params={
        'bounding_box': '-180,-90,180,90',
    },
)
data = resp.json()
import zingu_apis

api = zingu_apis.api("nasa-earthdata-cmr")
result = api.fetch("granules", bounding_box="-180,-90,180,90")

for item in result:
    print(item)
const resp = await fetch("https://cmr.earthdata.nasa.gov/search/granules?bounding_box=-180%2C-90%2C180%2C90");
const data = await resp.json();

Probe History

Latency

Status Codes

TimeStatusLatencySize
2026-04-16 03:29:27.575493 400 230ms
2026-04-16 02:22:08.029623 403 193ms
2026-04-16 01:05:00.020558 200 587ms
2026-04-16 00:13:33.633442 403 166ms
2026-04-15 03:30:27.599190 403 160ms
2026-04-15 03:19:48.107707 403 125ms
2026-04-15 00:46:07.409002 400 245ms
2026-04-15 00:41:51.058616 200 346ms
2026-04-14 03:21:35.911749 200 297ms
2026-04-14 03:00:53.475293 400 308ms
2026-04-14 02:29:24.729037 403 163ms
2026-04-14 01:43:59.755675 403 196ms
2026-04-12 15:58:26.223543 403 165ms
2026-04-12 14:45:34.568170 200 262ms
2026-04-12 13:56:14.239735 403 102ms
2026-04-12 13:51:42.154470 400 253ms
2026-04-10 04:20:16.307134 400 403ms
2026-04-10 03:32:01.151409 200 396ms
2026-04-10 02:50:58.238379 403 72ms
2026-04-10 00:34:49.856193 403 82ms
2026-04-09 02:43:05.183612 403 151ms
2026-04-09 02:17:41.023714 400 319ms
2026-04-09 01:11:02.828518 200 533ms
2026-04-09 00:16:12.924910 403 123ms
2026-04-08 07:53:42.245712 200 262ms
2026-04-08 07:35:43.717835 403 218ms
2026-04-08 07:06:27.678203 400 268ms
2026-04-08 00:03:15.816439 403 232ms
2026-04-07 01:43:53.583141 200 298ms
2026-04-07 01:32:52.425113 400 243ms
2026-04-07 01:20:35.044598 403 174ms
2026-04-07 00:43:01.920635 403 122ms
2026-04-06 05:12:32.803806 403 166ms
2026-04-06 05:06:32.768857 400 304ms
2026-04-06 04:01:03.862992 200 348ms
2026-04-05 21:06:14.670206 403 197ms
2026-04-05 14:39:37.737900 400 375ms
2026-04-05 14:29:36.868635 200 318ms
2026-04-05 02:20:51.974905 403 213ms
2026-04-05 01:17:27.571280 403 166ms
2026-04-05 01:04:33.735356 400 289ms
2026-04-05 00:40:40.027164 200 327ms
2026-04-04 03:21:07.650081 403 122ms
2026-04-04 03:16:24.219480 403 145ms
2026-04-04 03:15:04.454414 200 295ms
2026-04-04 02:37:41.813664 400 321ms
2026-04-03 13:27:41.176473 403 180ms
2026-04-03 13:06:54.053295 200 262ms
2026-04-03 12:41:37.026495 403 174ms
2026-04-03 12:29:06.674912 400 330ms