Collection Discovery: searching for collections across multiple APIs using the Federated Collection Discovery tools

Author: Henry Rodman (Development Seed)

Date: December 18, 2025

Description: These examples show how to use the Federated Collection Discovery STAC API to search for collections across multiple STAC APIs. There is also an interactive search application for using the API which you can use at https://discover.maap-project.org.

Background

It can be challenging to find the data that you need for an analysis when any of the following are true:

  • you don’t know the collection ID for a collection that you know exists

  • you don’t know which exact API the data can be accessed from

  • you don’t know which collections you even need

Fear not! The Federated STAC Collection Discovery application (and the underlying API) can help you find the data you need by running your search for collections across multiple catalogs simultaneously.

Federated Collection Discovery application

Using discover.maap-project.org

The Federated Collection Discovery web application is a great place to browse for datasets that may be relevant to your work. The application allows you to apply free-text, spatial, and temporal filters to the collections that are housed in a set of configured catalogs. By default, the application will search through the following catalogs:

You can toggle any of these APIs on/off and add new STAC APIs to the list in the ‘Settings’ menu:

cfa3be5269234dfebf81ca2439b439ac

Note: Any custom STAC API that you provide must have the free-text and collection-search STAC API extensions enabled. If those extensions are not available then the application will warn you that those search features are not available.

The search form allows you to apply text, temporal, and spatial filters to the collections:

d0fb458ec47a4adaaf131458f20eb64a

Inspect the search results

The matching collections from your search query will be printed in a table. If you click on a row, the collection details will pop up showing the description, the spatial and temporal extents, the source catalog, and data provider entries.

312e4851a4684f05b358180767ac86e4

If the collection seems like a good match for your needs, you can scroll down to the ‘STAC Item Code Hints’ to get the Python and R code you need to do an item-level search in a notebook or script.

ed2512d1a7a347a286432e651cc12246

Users can also follow links to the original STAC collection JSON in its home API and browse for items there.

Federated STAC Collection Discovery API

The web application is powered by the Federated STAC Collection Discovery API which is a STAC API that can be used to run collection searches across multiple upstream STAC APIs simultaneously.

For fully capable upstream STAC APIs, the following parameters are available on the /collections endpoint:

search parameters:

  • bbox: bounding box coordinates (EPSG:4326)

  • datetime: datetime extent

  • q: free-text search

  • filter: cql2 filtering

  • sortby: sort results by some field

Note: The API uses the collection-search STAC API extension which can be paired with several other extensions to create a robust search interface for collections across multiple STAC APIs. However, the functionality of the Federated STAC Collection Discovery API is limited to the capabilities of the least capable upstream API. For example, if you try to use it with an upstream STAC API that does not implement the collection-search extension or the free-text search extension, the advanced search capabilities will not be available at all.

Searching for collections with pystac-client

Since the Federated Collection Discovery API is a valid STAC API we can use pystac-client to run searches and interact with the results.

This section uses the CollectionSearch client from pystac-client which was added in version 0.8.4 so you will need to install pystac-client>=0.8.4.

Note: The MAAP ADE has a lower version installed by default so you will need to upgrade the package in your workspace to follow the examples in this notebook!

You can install the required version like this:

pip install pystac-client>=0.8.4
[1]:
from pystac_client import Client
from requests import Request

API_URL = "https://discover-api.maap-project.org"

client = Client.open(API_URL)

search = client.collection_search(
    q="GEDI",
    limit=1,
    max_collections=4,
)

for i, collection in enumerate(search.collections()):
    print(f"\n- {collection.id}")
    print(f"  Title: {collection.title}")
    print(f"  Upstream API link: {collection.get_self_href()}")
    description = (
        collection.description[:100] + "..."
        if len(collection.description) > 100
        else collection.description
    )
    print(f"  Description: {description}")

- GEDI_CalVal_Field_Data
  Title: Global Ecosystem Dynamics Investigation (GEDI) Calibration/Validation Field Survey Dataset
  Upstream API link: https://stac.maap-project.org/collections/GEDI_CalVal_Field_Data
  Description: The Global Ecosystem Dynamics Investigation (GEDI) Forest Structure and Biomass Database (FSBD) is a...

- GEDI_ISS_L3_Canopy_Height_Mean_RH100_201904-202303
  Title: GEDI Mean Canopy Height AGL
  Upstream API link: https://staging.openveda.cloud/api/stac/collections/GEDI_ISS_L3_Canopy_Height_Mean_RH100_201904-202303
  Description: The Global Ecosystem Dynamics Investigation ([GEDI](https://gedi.umd.edu/)) mission aims to characte...

- C2141081749-LPCLOUD
  Title: GEDI L1B Geolocated Waveform Data Global Footprint Level V001
  Upstream API link: https://catalog.maap.eo.esa.int/catalogue/collections/C2141081749-LPCLOUD
  Description: GEDI Version 1 data products were decommissioned on February 15, 2022. Users are advised to use the ...

- GEDI02_A_002
  Title: GEDI L2A Elevation and Height Metrics Data Global Footprint Level V002
  Upstream API link: https://cmr.earthdata.nasa.gov/stac/LPCLOUD/collections/GEDI02_A_002
  Description: The Global Ecosystem Dynamics Investigation ([GEDI](https://gedi.umd.edu/)) mission aims to characte...

Searching Specific APIs with pystac-client

You can also specify which upstream APIs to query by supplying the apis parameter in a request_modifier function:

[2]:
def add_apis(request: Request):
    """Add the `apis` parameter to all requests to this STAC API client"""
    request.params.update(
        {
            "apis": [
                "https://stac.eoapi.dev",
                "https://stac.maap-project.org",
            ]
        }
    )
    return request


specific_client = Client.open(API_URL, request_modifier=add_apis)

# Search for biomass collections from specific APIs only
search = specific_client.collection_search(
    q="biomass",
    limit=1,
    max_collections=4,
)

print("Searching specific APIs for biomass collections:")

# Show collection details
for i, collection in enumerate(search.collections()):
    print(f"\n- {collection.id}")
    print(f"  Title: {collection.title}")
    print(f"  Upstream API link: {collection.get_self_href()}")
    description = (
        collection.description[:100] + "..."
        if len(collection.description) > 100
        else collection.description
    )
    print(f"  Description: {description}")
Searching specific APIs for biomass collections:

- AFRISAR_DLR
  Title: AFRISAR_DLR
  Upstream API link: https://stac.maap-project.org/collections/AFRISAR_DLR
  Description: The  ESA  BIOMASS  mission  was  selected  in  2013  as  the  7th  Earth  Explorer  mission.  BIOMAS...

- AFRISAR_DLR2
  Title: AFRISAR_DLR2
  Upstream API link: https://stac.maap-project.org/collections/AFRISAR_DLR2
  Description: The ESA BIOMASS mission was selected in 2013 as the 7th Earth Explorer mission. BIOMASS will provide...

- AfriSAR_UAVSAR_Geocoded_Covariance
  Title: AfriSAR UAVSAR Geocoded Covariance Matrix product Generated Using NISAR Tools
  Upstream API link: https://stac.maap-project.org/collections/AfriSAR_UAVSAR_Geocoded_Covariance
  Description: The Geocoded Covariance Matrix dataset is the 4x4 Native Covariance Matrix geocoded to a spatial res...

- AfriSAR_UAVSAR_Geocoded_SLC
  Title: AfriSAR UAVSAR Geocoded SLCs Generated Using NISAR Tools
  Upstream API link: https://stac.maap-project.org/collections/AfriSAR_UAVSAR_Geocoded_SLC
  Description: The Geocoded SLC (single-look-complex) dataset contains the geolocated SLC magnitude of a particular...

Searching for collections using an http client

[3]:
from datetime import datetime, timezone

import httpx
import pandas as pd
from IPython.display import display, HTML

The API is configured to search across several STAC APIs by default, you can use the /_mgmt/health endpoint to see the collection-search capabilities to see the collection-search capabilities of each of the configured upstream STAC APIs.

[4]:
api_status = httpx.get(f"{API_URL}/_mgmt/health", timeout=20).json()
api_status
[4]:
{'status': 'UP',
 'lifespan': {'status': 'UP'},
 'upstream_apis': {'https://stac.maap-project.org': {'healthy': True,
   'collection_search_conformance': ['collection-search',
    'collection-search#fields',
    'collection-search#filter',
    'collection-search#free-text',
    'collection-search#query',
    'collection-search#sort']},
  'https://staging.openveda.cloud/api/stac': {'healthy': True,
   'collection_search_conformance': ['collection-search',
    'collection-search#fields',
    'collection-search#filter',
    'collection-search#free-text',
    'collection-search#query',
    'collection-search#sort']},
  'https://catalog.maap.eo.esa.int/catalogue': {'healthy': True,
   'collection_search_conformance': ['collection-search',
    'collection-search#filter',
    'collection-search#free-text']},
  'https://cmr.earthdata.nasa.gov/stac/ALL': {'healthy': True,
   'collection_search_conformance': ['collection-search',
    'collection-search#free-text',
    'collection-search#sort']}}}
[5]:
search_request = httpx.get(
    f"{API_URL}/collections",
    params={
        "q": "(elevation OR DEM) -biomass",
    },
    timeout=20,
)
search_request.raise_for_status()
search_results = search_request.json()

results_df = (
    pd.DataFrame(search_results["collections"])
    .assign(
        catalog_url=lambda df: df["links"].apply(
            lambda links_list: next(
                (link["href"] for link in links_list if link["rel"] == "root"),
                None
            )
        )
    )
)
display(HTML(results_df[["id", "catalog_url", "title"]].to_html()))
id catalog_url title
0 ABoVE_UAVSAR_PALSAR https://stac.maap-project.org/ Arctic-Boreal Vulnerability Experiment Uninhabited Aerial Vehicle Synthetic Aperture Radar Polarimetric SAR
1 SRTMGL1_COD https://stac.maap-project.org/ NASA Shuttle Radar Topography Mission Global 1
2 la-fires-slope https://staging.openveda.cloud/api/stac/ Eaton and Palisades Fires (2025) Slope
3 la-fires-slope-test-march6 https://staging.openveda.cloud/api/stac/ Eaton and Palisades Fires (2025) Slope-Test-March6

The results contain a list of collection-level metadata with some basic properties that you can review further.

[6]:
collection_info = results_df.iloc[0]
print(collection_info)

print("\ndescription:\n", collection_info.description)
id                                                      ABoVE_UAVSAR_PALSAR
type                                                             Collection
links                     [{'rel': 'items', 'type': 'application/geo+jso...
title                     Arctic-Boreal Vulnerability Experiment Uninhab...
extent                    {'spatial': {'bbox': [[-166.788382, 59.729364,...
license                                                             CC0-1.0
providers                 [{'url': 'https://above.nasa.gov/', 'name': 'N...
description               The Arctic-Boreal Vulnerability Experiment (AB...
item_assets                                                              {}
stac_version                                                          1.1.0
keywords                                                                NaN
stac_extensions                                                         NaN
assets                                                                  NaN
renders                                                                 NaN
summaries                                                               NaN
datetime_range                                                          NaN
dashboard:is_periodic                                                   NaN
dashboard:time_density                                                  NaN
catalog_url                                  https://stac.maap-project.org/
Name: 0, dtype: object

description:
 The Arctic-Boreal Vulnerability Experiment (ABoVE) is a NASA Terrestrial Ecology Program field campaign conducted from June through September 2017 over Alaska and Western Canada. ABoVE is a large-scale study of environmental change and to assess the vulnerability and resilience of Arctic and boreal ecosystems and provide scientific bases for societal response decision making.  ABoVE utilized the Uninhabited Aerial Vehicle Synthetic Aperture Radar (UAVSAR) Polarimetric SAR (PALSAR) instrument to provide image transects to survey the land surface, hydrological systems and vegetation.  SAR products in this collection include the Digital Elevation Model (DEM), the local incidence angle, the terrain slope product, ground projected complex cross products, the compressed stokes matrix, pauli decompositions, multi-look cross products, and scene annotation files.

bounding box filter

Perform a search for collections that intersect Finland’s bounding box with a free-text filter for ‘biomass’

[7]:
finland_bbox = (18.061, 59.348, 31.181, 70.576)
search_request = httpx.get(
    f"{API_URL}/collections",
    params={
        "q": "biomass",
        "bbox": ",".join(str(coord) for coord in finland_bbox),
    },
    timeout=20,
)
search_request.raise_for_status()
search_results = search_request.json()

results_df = (
    pd.DataFrame(search_results["collections"])
    .assign(
        catalog_url=lambda df: df["links"].apply(
            lambda links_list: next(
                (link["href"] for link in links_list if link["rel"] == "root"),
                None
            )
        )
    )
)
display(HTML(results_df[["id", "catalog_url", "title"]].to_html()))
id catalog_url title
0 BIOSAR1 https://stac.maap-project.org/ BIOSAR1
1 ESACCI_Biomass_L4_AGB_V4_100m https://stac.maap-project.org/ ESA CCI Above-Ground Biomass Product Level 4 Version 4
2 GEDI_CalVal_Field_Data https://stac.maap-project.org/ Global Ecosystem Dynamics Investigation (GEDI) Calibration/Validation Field Survey Dataset
3 GEDI_CalVal_Lidar_Data_Compressed https://stac.maap-project.org/ Global Ecosystem Dynamics Investigation (GEDI) Calibration/Validation Airborne Lidar Dataset (Compressed)
4 icesat2-boreal https://stac.maap-project.org/ Circumpolar boreal forest structure from ICESat-2 & HLS (2020 v1.0): 30m aboveground woody biomass density
5 ICESat2_Boreal_AGB_tindex_average https://stac.maap-project.org/ ICESat2-Boreal Above Ground Biomass T-Index Average
6 icesat2-boreal-v2.1-agb https://stac.maap-project.org/ Circumpolar boreal forest structure from ICESat-2 & HLS (2020 v2.1): 30m aboveground woody biomass density
7 icesat2-boreal-v2.1-ht https://stac.maap-project.org/ Circumpolar boreal forest structure from ICESat-2 & HLS (2020 v2.1): 30m vegetation height
8 icesat2-boreal-v3.0-agb https://stac.maap-project.org/ Circumpolar boreal forest structure from ICESat-2 & HLS (2020 v3.0): 30m aboveground woody biomass density
9 icesat2-boreal-v3.0-ht https://stac.maap-project.org/ Circumpolar boreal forest structure from ICESat-2 & HLS (2020 v3.0): 30m vegetation height
10 BiomassLevel2a https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 2A
11 BiomassLevel1bIOC https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 1B (IOC)
12 BiomassLevel1aIOC https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 1A (IOC)
13 C3327359101-FEDEO https://catalog.maap.eo.esa.int/catalogue/ ESA Biomass Climate Change Initiative (Biomass_cci): Global datasets of forest above-ground biomass for the years 2010, 2015, 2016, 2017, 2018, 2019, 2020 and 2021, v5.01
14 C3327359400-FEDEO https://catalog.maap.eo.esa.int/catalogue/ ESA Biomass Climate Change Initiative (Biomass_cci): Global datasets of forest above-ground biomass for the years 2010, 2017, 2018, 2019 and 2020, v4
15 BiomassLevel2aIOC https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 2A (IOC)
16 BiomassAuxRest https://catalog.maap.eo.esa.int/catalogue/ Biomass Auxiliary Restricted
17 BiomassLevel1b https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 1B
18 BiomassCalVal10 https://catalog.maap.eo.esa.int/catalogue/ Biomass Cal/Val
19 BiomassSimulated https://catalog.maap.eo.esa.int/catalogue/ Biomass Simulated data
20 95913ffb6467447ca72c4e9d8cf30501_NA https://cmr.earthdata.nasa.gov/stac ESA Biomass Climate Change Initiative (Biomass_cci): Global datasets of forest above-ground biomass for the years 2007, 2010, 2015, 2016, 2017, 2018, 2019, 2020, 2021 and 2022, v6.0
21 bf535053562141c6bb7ad831f5998d77_NA https://cmr.earthdata.nasa.gov/stac ESA Biomass Climate Change Initiative (Biomass_cci): Global datasets of forest above-ground biomass for the years 2010, 2015, 2016, 2017, 2018, 2019, 2020 and 2021, v5.01
22 5f331c418e9f4935b8eb1b836f8a91b8_NA https://cmr.earthdata.nasa.gov/stac ESA Biomass Climate Change Initiative (Biomass_cci): Global datasets of forest above-ground biomass for the years 2010, 2017 and 2018, v3
23 84403d09cef3485883158f4df2989b0c_NA https://cmr.earthdata.nasa.gov/stac ESA Biomass Climate Change Initiative (Biomass_cci): Global datasets of forest above-ground biomass for the years 2010, 2017 and 2018, v2
24 af60720c1e404a9e9d2c145d2b2ead4e_NA https://cmr.earthdata.nasa.gov/stac ESA Biomass Climate Change Initiative (Biomass_cci): Global datasets of forest above-ground biomass for the years 2010, 2017, 2018, 2019 and 2020, v4
25 Global_Biomass_1950-2010_1296_1 https://cmr.earthdata.nasa.gov/stac Global 1-degree Maps of Forest Area, Carbon Stocks, and Biomass, 1950-2010
26 Boreal_AGB_Density_ICESat2_2186_1 https://cmr.earthdata.nasa.gov/stac Aboveground Biomass Density for High Latitude Forests from ICESat-2, 2020
27 IS2ATBABD_1 https://cmr.earthdata.nasa.gov/stac ICESat-2 Derived 30 m Along-Track Boreal Aboveground Biomass Density V001
28 Boreal_AGB_Density_ICESat2_V3_2437_3 https://cmr.earthdata.nasa.gov/stac Circumpolar Boreal Forest Aboveground Biomass Density and Vegetation Height, V3
29 CMS_Global_Forest_Age_2345_1 https://cmr.earthdata.nasa.gov/stac Classification of Global Forests for IPCC Aboveground Biomass Tier 1 Estimates, 2020

pagination

The results returned by the API are paginated, so you can use the next link from the /collections response to access the next page. Pagination state is handled with the token parameter.

[8]:
next_link = next((link["href"] for link in search_results["links"] if link["rel"] == "next"), None)
print(next_link)
next_results = httpx.get(next_link).json()

results_df = (
    pd.DataFrame(next_results["collections"])
    .assign(
        catalog_url=lambda df: df["links"].apply(
            lambda links_list: next(
                (link["href"] for link in links_list if link["rel"] == "root"),
                None
            )
        )
    )
)
display(HTML(results_df[["id", "catalog_url", "title"]].to_html()))
https://discover-api.maap-project.org/collections?token=eyJjdXJyZW50Ijp7Imh0dHBzOi8vc3RhYy5tYWFwLXByb2plY3Qub3JnIjoiaHR0cHM6Ly9zdGFjLm1hYXAtcHJvamVjdC5vcmcvY29sbGVjdGlvbnM_YmJveD0xOC4wNjElMkM1OS4zNDglMkMzMS4xODElMkM3MC41NzYmbGltaXQ9MTAmZmlsdGVyX2xhbmc9Y3FsMi10ZXh0JnE9YmlvbWFzcyZvZmZzZXQ9MTAiLCJodHRwczovL2NhdGFsb2cubWFhcC5lby5lc2EuaW50L2NhdGFsb2d1ZSI6Imh0dHBzOi8vY2F0YWxvZy5tYWFwLmVvLmVzYS5pbnQvY2F0YWxvZ3VlL2NvbGxlY3Rpb25zP2Jib3g9MTguMDYxLDU5LjM0OCwzMS4xODEsNzAuNTc2JmxpbWl0PTEwJmZpbHRlcl9sYW5nPWNxbDItdGV4dCZxPWJpb21hc3Mmc3RhcnRSZWNvcmQ9MTEiLCJodHRwczovL2Ntci5lYXJ0aGRhdGEubmFzYS5nb3Yvc3RhYy9BTEwiOiJodHRwczovL2Ntci5lYXJ0aGRhdGEubmFzYS5nb3Yvc3RhYy9BTEwvY29sbGVjdGlvbnM_YmJveD0xOC4wNjElMkM1OS4zNDglMkMzMS4xODElMkM3MC41NzYmZmlsdGVyX2xhbmc9Y3FsMi10ZXh0JmxpbWl0PTEwJnE9YmlvbWFzcyZjdXJzb3I9ZXlKcWMyOXVJam9pV3pFdU5Dd3dMakFzTUM0d0xERTJNRGswTlRreE9UazVPVGtzWENJeklDMGdaM0pwWkdSbFpDQnZZbk5sY25aaGRHbHZibk5jSWl4Y0lrTk5VMTlIYkc5aVlXeGZSbTl5WlhOMFgwRm5aVjh5TXpRMVhDSXNYQ0l4WENJc016QTVNVEUxTXpNM09Td3hORjBpTENKMWJXMGlPaUpiTVM0MExEQXVNQ3d3TGpBc01UWXdPVFExT1RFNU9UazVPU3hjSWpNZ0xTQm5jbWxrWkdWa0lHOWljMlZ5ZG1GMGFXOXVjMXdpTEZ3aVEwMVRYMGRzYjJKaGJGOUdiM0psYzNSZlFXZGxYekl6TkRWY0lpeGNJakZjSWl3ek1Ea3hNVFV6TXpjNUxERTBYU0o5In0sImlzX2ZpcnN0X3BhZ2UiOmZhbHNlfQ==
id catalog_url title
0 icesat2-boreal-v3.1-agb https://stac.maap-project.org/ Circumpolar boreal forest structure from ICESat-2 & HLS (2020 v3.1): 30m aboveground woody biomass density
1 icesat2-boreal-v3.1-ht https://stac.maap-project.org/ Circumpolar boreal forest structure from ICESat-2 & HLS (2020 v3.1): 30m vegetation height
2 BiomassLevel2bIOC https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 2B (IOC)
3 BiomassLevel0 https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 0
4 CCIBiomassV5.01 https://catalog.maap.eo.esa.int/catalogue/ CCI Biomass V5.01
5 BiomassLevel2b https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 2B
6 BiomassAuxIOC https://catalog.maap.eo.esa.int/catalogue/ Biomass Auxiliary (IOC)
7 BiomassLevel0IOC https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 0 (IOC)
8 BiomassLevel1a https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 1A
9 C3904051179-ORNL_CLOUD https://catalog.maap.eo.esa.int/catalogue/ Circumpolar Boreal Forest Aboveground Biomass Density and Vegetation Height, V3
10 C2756302505-ORNL_CLOUD https://catalog.maap.eo.esa.int/catalogue/ Aboveground Biomass Density for High Latitude Forests from ICESat-2, 2020
11 BiomassLevel1cIOC https://catalog.maap.eo.esa.int/catalogue/ Biomass Level 1C (IOC)
12 Global_Maps_C_Density_2010_1763_1 https://cmr.earthdata.nasa.gov/stac Global Aboveground and Belowground Biomass Carbon Density Maps for the Year 2010
13 Eurasia_Biomass_1278_1 https://cmr.earthdata.nasa.gov/stac LiDAR-based Biomass Estimates, Boreal Forest Biome, Eurasia, 2005-2006
14 gov.noaa.nodc:0049894_Not Applicable https://cmr.earthdata.nasa.gov/stac Size-fractioned zooplankton biomass data sampled during the Institute of Marine Research Norwegian Sea survey from 1995 to 2005 (NCEI Accession 0049894)
15 biomass_allocation_703_1 https://cmr.earthdata.nasa.gov/stac Biomass Allocation and Growth Data of Seeded Plants
16 gov.noaa.nodc:0049499_Not Applicable https://cmr.earthdata.nasa.gov/stac Zooplankton biomass measurements collected using bottle from various platforms in the North Pacific Ocean from 1954 to 2001 (NCEI Accession 0049499)
17 root_biomass_658_1 https://cmr.earthdata.nasa.gov/stac Global Distribution of Fine Root Biomass in Terrestrial Ecosystems
18 NPP_Grassland_31_654_2 https://cmr.earthdata.nasa.gov/stac NPP Grassland: NPP Estimates from Biomass Dynamics for 31 Sites, 1948-1994, R1
19 FluxSatMGPP_L3_Daily_p05deg_2.2 https://cmr.earthdata.nasa.gov/stac Daily FluxSat GPP of biomass over Land, Based on MODIS Terra and Aqua adjusted reflectance Collection 6.1, on a Global 0.05 by 0.05 Degree Grid, Level 3 Version 2.2
20 FluxSatMGPP_L3_Daily_p5deg_2.2 https://cmr.earthdata.nasa.gov/stac Daily FluxSat GPP of biomass over Land, Based on MODIS Terra and Aqua adjusted reflectance Collection 6.1, on a Global 0.5 by 0.625 Degree Grid, Level 3 Version 2.2
21 TRPSCRECOBM2D_1 https://cmr.earthdata.nasa.gov/stac TROPESS Chemical Reanalysis Surface Biomass Burning CO emissions Monthly 2-dimensional Product V1 (TRPSCRECOBM2D) at GES DISC

temporal filter

You can use the datetime parameter to filter down to collections with temporal extents that overlap a provided range. For example, to find collections with a temporal extent that includes the term ‘spectral’ and has data as recent as September 15, 2024, you can run the following search:

[9]:
recent_date = datetime(year=2024, month=9, day=15, tzinfo=timezone.utc)

search_request = httpx.get(
    f"{API_URL}/collections",
    params={
        "datetime": f"{recent_date.isoformat().replace('+00:00', 'Z')}/..",
        "q": "spectral",
    },
    timeout=20,
)
search_request.raise_for_status()
search_results = search_request.json()

results_df = (
    pd.DataFrame(search_results["collections"])
    .assign(
        catalog_url=lambda df: df["links"].apply(
            lambda links_list: next(
                (link["href"] for link in links_list if link["rel"] == "root"),
                None
            )
        )
    )
)
display(HTML(results_df[["id", "catalog_url", "title"]].to_html()))
id catalog_url title
0 EOP:ESA:Sentinel-2 https://catalog.maap.eo.esa.int/catalogue/ Sentinel-2
1 ResourceSat-2.archive.and.tasking https://catalog.maap.eo.esa.int/catalogue/ ResourceSat-2 full archive and tasking
2 EarthCAREL0L1Products https://catalog.maap.eo.esa.int/catalogue/ EarthCARE L0 and L1 Products for the Commissioning Team
3 Pleiades.HiRI.archive.and.new https://catalog.maap.eo.esa.int/catalogue/ Pleiades full archive and tasking
4 WorldView-3.full.archive.and.tasking https://catalog.maap.eo.esa.int/catalogue/ WorldView-3 full archive and tasking
5 WorldView-2.full.archive.and.tasking https://catalog.maap.eo.esa.int/catalogue/ WorldView-2 full archive and tasking
6 Vision-1.full.archive.and.tasking https://catalog.maap.eo.esa.int/catalogue/ Vision-1 full archive and tasking
7 EarthCAREL1InstChecked_MAAP https://catalog.maap.eo.esa.int/catalogue/ EarthCARE L1 Products for Cal/Val Users
8 EarthCAREL0L1Products_MAAP https://catalog.maap.eo.esa.int/catalogue/ EarthCARE L0 and L1 Products for the Commissioning Team
9 EarthCAREL1Validated_MAAP https://catalog.maap.eo.esa.int/catalogue/ EarthCARE L1 Products
10 GLHYVI_001 https://cmr.earthdata.nasa.gov/stac G-LiHT Hyperspectral Vegetative Indices V001
11 GLRADS_001 https://cmr.earthdata.nasa.gov/stac G-LiHT Hyperspectral Radiance V001
12 GLREFL_001 https://cmr.earthdata.nasa.gov/stac G-LiHT Hyperspectral Reflectance V001
13 TSIS_SSI_L3_12HR_13 https://cmr.earthdata.nasa.gov/stac TSIS SIM Level 3 Solar Spectral Irradiance 12-Hour Means V13 (TSIS_SSI_L3_12HR) at GES DISC
14 TSIS_SSI_L3_24HR_13 https://cmr.earthdata.nasa.gov/stac TSIS SIM Level 3 Solar Spectral Irradiance 24-Hour Means V13 (TSIS_SSI_L3_24HR) at GES DISC
15 f920473c-15a2-490c-8b24-b48f9b8a0226_NA https://cmr.earthdata.nasa.gov/stac Firebird MSC - Level 0 Multispectral Images
16 HLSS30_2.0 https://cmr.earthdata.nasa.gov/stac HLS Sentinel-2 Multi-spectral Instrument Surface Reflectance Daily Global 30m v2.0
17 HLSS30_VI_2.0 https://cmr.earthdata.nasa.gov/stac HLS Sentinel-2 Multi-spectral Instrument Vegetation Indices Daily Global 30 m V2.0
18 SOR3SIMD_027 https://cmr.earthdata.nasa.gov/stac SORCE SIM Level 3 Solar Spectral Irradiance Daily Means V027 (SOR3SIMD) at GES DISC
19 FORMOSAT-2 https://cmr.earthdata.nasa.gov/stac FORMOSAT-2 Panchromatic and Multispectral imagery

Note: For open datetime ranges, use .. to represent either the beginning or ending timestamp.

Specify APIs with urls

You can specify a specific set of STAC APIs to search through with the apis parameter. This will override the default STAC API URLs.

[10]:
stac_api_urls = [
    "https://stac.eoapi.dev",
]
search_request = httpx.get(
    f"{API_URL}/collections",
    params={
        "apis": ",".join(stac_api_urls),
        "q": "fire"
    },
    timeout=30,
)
search_request.raise_for_status()
search_results = search_request.json()

results_df = (
    pd.DataFrame(search_results["collections"])
    .assign(
        catalog_url=lambda df: df["links"].apply(
            lambda links_list: next(
                (link["href"] for link in links_list if link["rel"] == "root"),
                None
            )
        )
    )
)
display(HTML(results_df[["id", "catalog_url", "title"]].to_html()))
id catalog_url title
0 MAXAR_Marshall_Fire_21_Update https://stac.eoapi.dev/ Marshall Fire
1 MAXAR_Maui_Hawaii_fires_Aug_23 https://stac.eoapi.dev/ Maui Fires
2 MAXAR_McDougallCreekWildfire_BC_Canada_Aug_23 https://stac.eoapi.dev/ McDougall Creek Wildfire
3 MAXAR_NWT_Canada_Aug_23 https://stac.eoapi.dev/ Northwest Territories Fires

Note: The collection discovery API will only provide search functionality that is provided by ALL of the upstream APIS. If one of the APIs that you want tos earch does not provide the free-text extension, then the q parameter will not do anything!

Additional resources