STAC API#

Overview#

This notebook explains the use of the STAC API interface with GeoJSON response format. It uses the pystac [RD17] and pystac_client [RD18] libraries to access the interface. The visualisation of search results is borrowed from the ODC notebook available at [RD19]. Examples using curl on the command-line are provided as well.

URL_LANDING_PAGE = 'https://catalog.maap.eo.esa.int/catalogue/'

Access landing page#

The landing page provides access to collections (rel=”data”), child catalogs (rel=”child”) and the STAC item search endpoint (rel=”search”). Get the catalogue landing page with links to other resources and available collections.

curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/
from pystac_client import Client 

api = Client.open(URL_LANDING_PAGE) 
# show as a dictionary
api.to_dict()
{'type': 'Catalog',
 'id': 'fedeo',
 'stac_version': '1.1.0',
 'description': 'MAAP Catalogue provides interoperable access, following ISO/OGC interface guidelines, to Earth Observation metadata',
 'links': [{'rel': 'self',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/',
   'type': 'application/json'},
  {'rel': 'search',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/api?httpAccept=application/opensearchdescription%2Bxml',
   'type': 'application/opensearchdescription+xml',
   'title': 'OpenSearch Description Document'},
  {'rel': 'service-desc',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/api?httpAccept=application/vnd.oai.openapi%2Bjson;version=3.0',
   'type': 'application/vnd.oai.openapi+json;version=3.0',
   'title': 'OpenAPI definition in JSON format'},
  {'rel': 'data',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/collections',
   'type': 'application/json',
   'title': 'Metadata about the feature collections'},
  {'rel': 'data',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/collections',
   'type': 'application/ld+json',
   'title': 'Metadata about the feature collections'},
  {'rel': 'data',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/collections',
   'type': 'application/rdf+xml',
   'title': 'Metadata about the feature collections'},
  {'rel': 'data',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/collections',
   'type': 'text/turtle',
   'title': 'Metadata about the feature collections'},
  {'rel': 'conformance',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/conformance',
   'type': 'application/json',
   'title': 'OGC conformance classes implemented by this API'},
  {'rel': 'service-doc',
   'href': 'https://catalog.maap.eo.esa.int/doc/index.html',
   'type': 'text/html',
   'title': 'API Documentation (Jupyter)'},
  {'rel': 'service-doc',
   'href': 'http://petstore.swagger.io/?url=https://catalog.maap.eo.esa.int/catalogue/api',
   'type': 'text/html',
   'title': 'API documentation in Swagger.io format'},
  {'rel': 'search',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/search',
   'type': 'application/geo+json',
   'title': 'STAC Search',
   'method': 'GET'},
  {'rel': 'search',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/search',
   'type': 'application/geo+json',
   'title': 'STAC Search',
   'method': 'POST'},
  {'rel': 'child',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/series',
   'type': 'application/json',
   'title': 'Collections'},
  {'rel': 'child',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/services',
   'type': 'application/json',
   'title': 'Services'},
  {'rel': 'root',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/',
   'type': 'application/json',
   'title': 'MAAP Catalogue'}],
 'extent': {'spatial': {'bbox': [[-180, -90, 180, 90]]},
  'temporal': {'interval': [[None, None]]}},
 'license': 'other',
 'conformsTo': ['http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core',
  'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30',
  'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson',
  'http://www.opengis.net/spec/ogcapi_common-2/1.0/conf/collections',
  'http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/simple-query',
  'http://www.opengis.net/spec/ogcapi-records-1/1.0/req/cql-filter',
  'http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/features-filter',
  'http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/filter',
  'https://api.stacspec.org/v1.0.0/core',
  'https://api.stacspec.org/v1.0.0/ogcapi-features',
  'https://api.stacspec.org/v1.0.0/collections',
  'https://api.stacspec.org/v1.0.0-rc.1/collection-search',
  'https://api.stacspec.org/v1.0.0-rc.1/collection-search#filter',
  'https://api.stacspec.org/v1.0.0-rc.1/collection-search#free-text',
  'https://api.stacspec.org/v1.0.0-rc.1/collection-search#sort',
  'https://api.stacspec.org/v1.0.0/item-search',
  'https://api.stacspec.org/v1.0.0-rc.3/item-search#filter',
  'http://www.opengis.net/spec/cql2/1.0/conf/cql2-text',
  'http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2',
  'http://www.opengis.net/spec/cql2/1.0/conf/cql2-json',
  'http://www.opengis.net/spec/cql2/1.0/conf/advanced-comparison-operators',
  'https://api.stacspec.org/v1.0.0/item-search#sort',
  'https://api.stacspec.org/v1.0.0/ogcapi-features#sort',
  'https://api.stacspec.org/v1.0.0/ogcapi-features#sort',
  'https://api.stacspec.org/v1.0.0/item-search#fields',
  'https://api.stacspec.org/v1.0.0/ogcapi-features#fields',
  'https://api.stacspec.org/v1.0.0-rc.1/collection-search#fields'],
 'title': 'MAAP Catalogue'}
# Get catalog title and description
print("Title\t\t:", api.title)
print("Description\t:", api.description)
print("Search link\t:", api.get_search_link())
Title		: MAAP Catalogue
Description	: MAAP Catalogue provides interoperable access, following ISO/OGC interface guidelines, to Earth Observation metadata
Search link	: <Link rel=search target=https://catalog.maap.eo.esa.int/catalogue/search>

Collection properties#

Collection identification#

# Use first collection from response

results = api.collection_search(    
    q = COLLECTION_ID6_MAAP
)

print(f"{results.matched()} collections found.")

data = results.collection_list_as_dict()
data = data['collections'][0]
1 collections found.
jstr = json.dumps(data, indent=3)
md("```json\n" + jstr + "\n```\n")
{
   "extent": {
      "spatial": {
         "bbox": [
            [
               -180,
               -90,
               180,
               90
            ]
         ]
      },
      "temporal": {
         "interval": [
            [
               "2024-07-31T00:00:00.000Z",
               null
            ]
         ]
      }
   },
   "stac_version": "1.0.0",
   "keywords": [
      "EARTH SCIENCE > BIOSPHERE > ECOSYSTEMS > TERRESTRIAL ECOSYSTEMS",
      "EARTH SCIENCE > AGRICULTURE > FOREST SCIENCE > AFFORESTATION/REFORESTATION",
      "Forestry",
      "Afforestation/Reforestation",
      "Imaging Radars",
      "Biomass",
      "P-SAR",
      "ESA_open_and_free",
      "PUBLIC"
   ],
   "created": "2023-02-16T00:00:00.00Z",
   "description": "Biomass Level 1A Products",
   "collection": "EOP:ESA:MAAP",
   "type": "Collection",
   "title": "Biomass Level 1A",
   "themes": [
      {
         "concepts": [
            {
               "id": "PUBLIC",
               "url": "http://publications.europa.eu/resource/authority/access-right/PUBLIC"
            }
         ],
         "scheme": "http://publications.europa.eu/resource/authority/access-right"
      },
      {
         "concepts": [
            {
               "id": "ESA_open_and_free",
               "url": "https://maap.eo.esa.int/metadata-codelist/access-right/ESA_open_and_free"
            }
         ],
         "scheme": "https://maap.eo.esa.int/metadata-codelist/access-right"
      }
   ],
   "license": "various",
   "assets": {
      "metadata_iso_19139": {
         "roles": [
            "metadata"
         ],
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/vnd.iso.19139%2Bxml",
         "title": "ISO 19139 metadata",
         "type": "application/vnd.iso.19139+xml"
      },
      "metadata_iso_19139_2": {
         "roles": [
            "metadata"
         ],
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/vnd.iso.19139-2%2Bxml",
         "title": "ISO 19139-2 metadata",
         "type": "application/vnd.iso.19139-2+xml"
      },
      "metadata_dif_10": {
         "roles": [
            "metadata"
         ],
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/dif10%2Bxml",
         "title": "DIF-10 metadata",
         "type": "application/dif10+xml"
      },
      "metadata_ogc_17_084r1": {
         "roles": [
            "metadata"
         ],
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?mode=owc",
         "title": "OGC 17-084r1 metadata",
         "type": "application/geo+json;profile=\"http://www.opengis.net/spec/eoc-geojson/1.0\""
      },
      "metadata_iso_191115_3": {
         "roles": [
            "metadata"
         ],
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/vnd.iso.19115-3%2Bxml",
         "title": "ISO 19115-3 metadata",
         "type": "application/vnd.iso.19115-3+xml"
      }
   },
   "links": [
      {
         "rel": "self",
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a",
         "type": "application/json"
      },
      {
         "rel": "root",
         "href": "https://catalog.maap.eo.esa.int/catalogue/",
         "type": "application/json",
         "title": "MAAP Catalogue"
      },
      {
         "rel": "parent",
         "href": "https://catalog.maap.eo.esa.int/catalogue/",
         "title": "collections",
         "type": "application/json"
      },
      {
         "rel": "items",
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a/items",
         "type": "application/geo+json",
         "title": "Datasets search for the series BiomassLevel1a"
      },
      {
         "rel": "http://www.opengis.net/def/rel/ogc/1.0/queryables",
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a/queryables",
         "type": "application/schema+json",
         "title": "Queryables for BiomassLevel1a"
      },
      {
         "rel": "license",
         "href": "https://earth.esa.int/eogateway/documents/d/earth-online/esa-eo-data-policy",
         "type": "application/x-binary",
         "title": "Access to and use of BIOMASS products are governed by the ESA's Data Policy and require acceptance of the specific Terms & Conditions. By accessing Biomass products, users inherently acknowledge and agree to these terms."
      },
      {
         "rel": "search",
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a/api",
         "type": "application/opensearchdescription+xml",
         "title": "OpenSearch Description Document"
      },
      {
         "rel": "describedby",
         "href": "https://esatellus.service-now.com/csp?id=esa_simple_request",
         "title": "Get Help? - ESA TellUS Help Page"
      },
      {
         "rel": "alternate",
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/ld%2Bjson;profile=https://schema.org",
         "type": "application/ld+json;profile=\"https://schema.org\"",
         "title": "JSON-LD (schema.org) metadata"
      },
      {
         "rel": "alternate",
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/ld%2Bjson",
         "type": "application/ld+json;profile=\"http://data.europa.eu/930/\"",
         "title": "JSON-LD (GeoDCAT-AP) metadata"
      }
   ],
   "id": "BiomassLevel1a",
   "updated": "2023-02-16T00:00:00.00Z",
   "stac_extensions": [
      "https://stac-extensions.github.io/processing/v1.2.0/schema.json",
      "https://stac-extensions.github.io/themes/v1.0.0/schema.json",
      "https://stac-extensions.github.io/sar/v1.3.0/schema.json"
   ],
   "providers": [
      {
         "roles": [
            "producer"
         ],
         "name": "ESA/ESRIN",
         "url": "https://www.esa.int"
      },
      {
         "roles": [
            "host"
         ],
         "name": "ESA MAAP",
         "url": "https://catalog.maap.eo.esa.int/catalogue/"
      }
   ],
   "summaries": {
      "processing:level": [
         "L1A"
      ],
      "proj:code": [
         "EPSG:4326"
      ],
      "instruments": [
         "P-SAR"
      ],
      "platform": [
         "Biomass"
      ],
      "sar:polarizations": [
         "HH, HV, VH, VV"
      ]
   }
}
# use stac_client class for STAC collection
c = Collection.from_dict(data)
print("id\t\t:", c.id)
print("title\t\t:", c.title)
print("description\t:", c.description)
print("keywords\t:", c.keywords)
print("spatial extent\t:", c.extent.spatial)
print("temporal extent\t:", c.extent.temporal)
id		: BiomassLevel1a
title		: Biomass Level 1A
description	: Biomass Level 1A Products
keywords	: ['EARTH SCIENCE > BIOSPHERE > ECOSYSTEMS > TERRESTRIAL ECOSYSTEMS', 'EARTH SCIENCE > AGRICULTURE > FOREST SCIENCE > AFFORESTATION/REFORESTATION', 'Forestry', 'Afforestation/Reforestation', 'Imaging Radars', 'Biomass', 'P-SAR', 'ESA_open_and_free', 'PUBLIC']
spatial extent	: <pystac.collection.SpatialExtent object at 0x00000248B347E150>
temporal extent	: <pystac.collection.TemporalExtent object at 0x00000248B3593EC0>

The collection id (id) is to be used as collections parameter for a corresponding STAC item (granule) search. It can also be used in the ids parameter when searching collections by identifier.

Collection DOI#

Not all collections have a digital object identifier assigned. if they do, then it is available as sci:doi property. This value can be used for searching collections by DOI. Collections with DOI, typically also contain a link with rel=”cite-as” referring to their landing page.

try: 
    print(data['sci:doi'])
except:
    print("Not available")
Not available

Collection geometry#

Geometry information for a collection is included in the JSON response at the path $.extent.spatial.

data['extent']['spatial']
{'bbox': [[-180, -90, 180, 90]]}

Collection temporal extent#

The JSON response element provides temporal information for a collection, i.e. the start time and end time at the path $.extent.temporal. The end time may be absent indicating that the collection is not completed.

try: 
    print(data['extent']['temporal'])
except:
    print("Not available")
{'interval': [['2024-07-31T00:00:00.000Z', None]]}

Collection assets#

Collections provide access to a dictionary with assets. The roles attribute indicates the purpose of the asset. The href attribute provides the URL to access the asset. Collection assets may include thumbnail (when available), search interfaces, and various metadata formats.

The table below list some frequently used metadata formats and their corresponding media type (type).

Format

type

ISO19139

application/vnd.iso.19139+xml

ISO19139-2

application/vnd.iso.19139-2+xml

ISO19115-3

application/vnd.iso.19115-3+xml

ISO19157-2

application/vnd.iso.19157-2+xml

# Show assets of the collection (GeoJSON)
jstr = json.dumps(data['assets'], indent=3)
md("```json\n" + jstr + "\n```\n")
{
   "metadata_iso_19139": {
      "roles": [
         "metadata"
      ],
      "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/vnd.iso.19139%2Bxml",
      "title": "ISO 19139 metadata",
      "type": "application/vnd.iso.19139+xml"
   },
   "metadata_iso_19139_2": {
      "roles": [
         "metadata"
      ],
      "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/vnd.iso.19139-2%2Bxml",
      "title": "ISO 19139-2 metadata",
      "type": "application/vnd.iso.19139-2+xml"
   },
   "metadata_dif_10": {
      "roles": [
         "metadata"
      ],
      "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/dif10%2Bxml",
      "title": "DIF-10 metadata",
      "type": "application/dif10+xml"
   },
   "metadata_ogc_17_084r1": {
      "roles": [
         "metadata"
      ],
      "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?mode=owc",
      "title": "OGC 17-084r1 metadata",
      "type": "application/geo+json;profile=\"http://www.opengis.net/spec/eoc-geojson/1.0\""
   },
   "metadata_iso_191115_3": {
      "roles": [
         "metadata"
      ],
      "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?httpAccept=application/vnd.iso.19115-3%2Bxml",
      "title": "ISO 19115-3 metadata",
      "type": "application/vnd.iso.19115-3+xml"
   }
}
# Display assets belonging to the collection
c = Collection.from_dict(data)
assets = c.assets
df = pd.DataFrame(columns=['roles', 'title', 'type'])
for key in assets:
    ndf = pd.DataFrame({ 
            'roles': assets[key].roles, 
            'type': assets[key].media_type, 
            'title': assets[key].title, 
            # 'href': assets[key].href  
        }, index = [0])
    df = pd.concat([df, ndf], ignore_index=True)
df
roles title type
0 metadata ISO 19139 metadata application/vnd.iso.19139+xml
1 metadata ISO 19139-2 metadata application/vnd.iso.19139-2+xml
2 metadata DIF-10 metadata application/dif10+xml
3 metadata OGC 17-084r1 metadata application/geo+json;profile="http://www.openg...
4 metadata ISO 19115-3 metadata application/vnd.iso.19115-3+xml

Granule properties#

Granules are returned via item links in the Catalog or Collection objects, or via the STAC API (Feature). An item is a GeoJSON Feature and the encoding is derived from the original OGC 17-003r2 encoding according to a documented mapping.

The properties available include attributes from STAC extensions as well:

Assets#

Granules provide access to a dictionary with assets. The roles attribute indicates the purpose of the asset. The href attribute provides the URL to access the asset. Granule assets include thumbnail (when available), a data download link (equivalent to the rel=enclosure), and various metadata formats.

The table below list some frequently used metadata formats and their corresponding media type (type).

Format

type

ISO19139

application/vnd.iso.19139+xml

ISO19139-2

application/vnd.iso.19139-2+xml

ISO19115-3

application/vnd.iso.19115-3+xml

OGC 10-157r4

application/gml+xml;profile=http://www.opengis.net/spec/EOMPOM/1.1

OGC 17-003r2

application/geo+json;profile=http://www.opengis.net/spec/eo-geojson/1.0

# Show assets of first search result (GeoJSON)
data = results.item_collection_as_dict()
jstr = json.dumps(data['features'][1]['assets'], indent=3)
md("```json\n" + jstr + "\n```\n")
{
   "quicklook_1": {
      "roles": [
         "overview"
      ],
      "href": "https://catalog.maap.eo.esa.int/data/cat-pre-data-02/BiomassLevel1a/2017/01/10/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC/preview/bio_s2_scs__1s_20170110t222200_20170110t222221_i_g01_m01_c01_t011_f001_ql.png",
      "type": "image/png",
      "title": "preview"
   },
   "thumbnail": {
      "roles": [
         "thumbnail"
      ],
      "href": "https://catalog.maap.eo.esa.int/data/cat-pre-data-02/BiomassLevel1a/2017/01/10/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC/public/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC.BI.PNG",
      "type": "image/png",
      "title": "Preview"
   },
   "product": {
      "file:local_path": "BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC.ZIP",
      "alternate:name": "HTTPS",
      "roles": [
         "data",
         "metadata",
         "archive"
      ],
      "href": "https://catalog.maap.eo.esa.int/data/zipper/cat-pre-data-02/BiomassLevel1a/2017/01/10/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC",
      "auth:refs": [
         "oidc"
      ],
      "published": "2017-01-10T22:22:21.003Z",
      "title": "Zipped product",
      "type": "application/zip"
   },
   "metadata_ogc_10_157r4": {
      "roles": [
         "metadata"
      ],
      "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a/items/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC?httpAccept=application/gml%2Bxml&recordSchema=om",
      "title": "OGC 10-157r4 metadata",
      "type": "application/gml+xml;profile=\"http://www.opengis.net/spec/EOMPOM/1.1\""
   },
   "metadata_ogc_17_003r2": {
      "roles": [
         "metadata"
      ],
      "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a/items/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC?mode=owc",
      "title": "OGC 17-003r2 metadata",
      "type": "application/geo+json;profile=\"http://www.opengis.net/spec/eo-geojson/1.0\""
   },
   "metadata_iso_19139": {
      "roles": [
         "metadata"
      ],
      "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a/items/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC?httpAccept=application/vnd.iso.19139%2Bxml",
      "title": "ISO 19139 metadata",
      "type": "application/vnd.iso.19139+xml"
   },
   "quicklook": {
      "roles": [
         "overview"
      ],
      "href": "https://catalog.maap.eo.esa.int/data/cat-pre-data-02/BiomassLevel1a/2017/01/10/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC/BIO_S2_SCS__1S_20170110T222200_20170110T222221_I_G01_M01_C01_T011_F001_01_CT15EC/preview/bio_s2_scs__1s_20170110t222200_20170110t222221_i_g01_m01_c01_t011_f001_map.kmz",
      "type": "application/vnd.google-earth.kmz",
      "title": "preview"
   }
}
df = pd.DataFrame(columns=['roles', 'title', 'type'])
    
# Display assets belonging to first item in results
for item in results.items():
    assets = item.assets
    for key in assets: 
        try: 
            ndf = pd.DataFrame({ 
                'roles': str(assets[key].roles), 
                'type': assets[key].media_type, 
                'title': assets[key].title, 
                # 'href': assets[key].href  
            }, index = [0])
            df = pd.concat([df, ndf], ignore_index=True)
        except:
            pass
    break
df
roles title type
0 ['overview'] preview image/png
1 ['thumbnail'] Preview image/png
2 ['data', 'metadata', 'archive'] Zipped product application/zip
3 ['metadata'] OGC 10-157r4 metadata application/gml+xml;profile="http://www.opengi...
4 ['metadata'] OGC 17-003r2 metadata application/geo+json;profile="http://www.openg...
5 ['metadata'] ISO 19139 metadata application/vnd.iso.19139+xml
6 ['overview'] preview application/vnd.google-earth.kmz

Advanced topics#

Conformance classes#

The conformance classes supported by the STAC interface are advertised in the conformsTo property of the landing page.

[
   "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core",
   "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30",
   "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson",
   "http://www.opengis.net/spec/ogcapi_common-2/1.0/conf/collections",
   "http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/simple-query",
   "http://www.opengis.net/spec/ogcapi-records-1/1.0/req/cql-filter",
   "http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/features-filter",
   "http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/filter",
   "https://api.stacspec.org/v1.0.0/core",
   "https://api.stacspec.org/v1.0.0/ogcapi-features",
   "https://api.stacspec.org/v1.0.0/collections",
   "https://api.stacspec.org/v1.0.0-rc.1/collection-search",
   "https://api.stacspec.org/v1.0.0-rc.1/collection-search#filter",
   "https://api.stacspec.org/v1.0.0-rc.1/collection-search#free-text",
   "https://api.stacspec.org/v1.0.0-rc.1/collection-search#sort",
   "https://api.stacspec.org/v1.0.0/item-search",
   "https://api.stacspec.org/v1.0.0-rc.3/item-search#filter",
   "http://www.opengis.net/spec/cql2/1.0/conf/cql2-text",
   "http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2",
   "http://www.opengis.net/spec/cql2/1.0/conf/cql2-json",
   "http://www.opengis.net/spec/cql2/1.0/conf/advanced-comparison-operators",
   "https://api.stacspec.org/v1.0.0/item-search#sort",
   "https://api.stacspec.org/v1.0.0/ogcapi-features#sort",
   "https://api.stacspec.org/v1.0.0/ogcapi-features#sort",
   "https://api.stacspec.org/v1.0.0/item-search#fields",
   "https://api.stacspec.org/v1.0.0/ogcapi-features#fields",
   "https://api.stacspec.org/v1.0.0-rc.1/collection-search#fields"
]

Additional search parameters#

Additional search parameters beyond the STAC search parameters can be used to filter collection search results. The available parameters for collection search are advertised at https://catalog.maap.eo.esa.int/catalogue/collections/queryables and represented as a JSON Schema.

URL_QUERYABLES = URL_LANDING_PAGE + 'collections/queryables'
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections/queryables
response = requests.get(URL_QUERYABLES)   
data = json.loads(response.text)    
df = pd.DataFrame(data['properties'].items(),columns=['key','value'])
df['type'] = df.apply(lambda row : row['value']['type'], axis = 1)
df['format'] = df.apply(lambda row : row['value']['format'] if 'format' in row['value'] else '-' , axis = 1)
df.drop('value',axis=1).sort_values(by=['key'])
key type format
16 classifiedAs string uri
5 collection string -
9 datetime string -
3 description string -
4 externalId string -
2 format string -
13 id string -
10 instruments string -
12 offering string -
7 otherConstraint string -
8 platform string -
0 processing:level string -
15 providers string -
1 sci:doi string -
6 title string -
14 updated string date-time
11 useLimitation string -
{
   "$schema": "https://json-schema.org/draft/2019-09/schema",
   "description": "Queryable names for the STAC API Collection Search filter.",
   "type": "object",
   "title": "Queryables for the STAC API",
   "properties": {
      "processing:level": {
         "description": "The processing level applied to the entry",
         "title": "Processing level",
         "type": "string",
         "enum": [
            "l0",
            "l1",
            "l1.5",
            "l1a",
            "l1b",
            "l1b+",
            "l1c",
            "l1d",
            "l1g",
            "l1gt",
            "l1r",
            "l1t",
            "l2",
            "l2a",
            "l2b",
            "l2c",
            "l3",
            "l3a",
            "l3b",
            "l4",
            "level 0",
            "level 1",
            "level 1.5",
            "level 1a",
            "level 1b",
            "level 1b+",
            "level 1c",
            "level 1d",
            "level 1g",
            "level 1gt",
            "level 1r",
            "level 1t",
            "level 2",
            "level 2a",
            "level 2b",
            "level 2c",
            "level 3",
            "level 3a",
            "level 3b",
            "level 4",
            "level-a",
            "level-a+",
            "multiple"
         ]
      },
      "sci:doi": {
         "description": "Digital Object Identifier identifying the product (see http://www.doi.org)",
         "title": "Doi",
         "type": "string",
         "enum": [
            "10.48550/arXiv.2310.04423",
            "10.5270/AL1-5e400fd",
            "10.5270/AL1-a06d3ac",
            "10.5270/AL1-b459f4e",
            "10.5270/AL1-d9cfa6d",
            "10.5270/AL1-d9d4874",
            "10.5270/AVH-f1i8784",
            "10.5270/CR2-120cf4c",
            "10.5270/DM1-w9tup3r",
            "10.5270/EN1-179289a",
            "10.5270/EN1-42e99a2",
            "10.5270/EN1-4c37krv",
            "10.5270/EN1-5eab12a",
            "10.5270/EN1-61d6y63",
            "10.5270/EN1-77pi5sd",
            "10.5270/EN1-88oasur",
            "10.5270/EN1-a1rc3jf",
            "10.5270/EN1-c8hgqx4",
            "10.5270/EN1-cu4a5e3",
            "10.5270/EN1-d9ryw7t",
            "10.5270/EN1-eqvj8vs",
            "10.5270/EN1-opsw96m",
            "10.5270/EN1-q74d24h",
            "10.5270/EN1-ttqbj6p",
            "10.5270/EN1-u55aesn",
            "10.5270/EN1-ueksx4q",
            "10.5270/EN1-vqoj1gs",
            "10.5270/EN1-w5xkqmx",
            "10.5270/EN1-x542no0",
            "10.5270/ER2-ua38y2m",
            "10.5270/ER2-uw3eflc",
            "10.5270/ERS-0p2cu8d",
            "10.5270/ERS-7c3qhyo",
            "10.5270/ERS-suu0xfp",
            "10.5270/ESA-6615b19",
            "10.5270/ESA-852456e",
            "10.5270/ESA-86e26dc",
            "10.5270/ESA-a36265c",
            "10.5270/ESA-c26d993",
            "10.5270/IK2-5dwhs28",
            "10.5270/JE1-408s1ur",
            "10.5270/JE1-64xxf7c",
            "10.5270/JE1-cerzmcu",
            "10.5270/KO2-2ijzzay",
            "10.5270/OD1-010f2d4",
            "10.5270/QB2-ftu9xmh",
            "10.5270/SE1-99j66hv",
            "10.5270/esa-02d6cbf",
            "10.5270/esa-2d07033",
            "10.5270/esa-2eb13ab",
            "10.5270/esa-4427c33",
            "10.5270/esa-6mxo3sr",
            "10.5270/esa-6riial9",
            "10.5270/esa-79a176b",
            "10.5270/esa-7c37033",
            "10.5270/esa-7nc8pjp",
            "10.5270/esa-8sfucze",
            "10.5270/esa-8xb8scs",
            "10.5270/esa-a681fe7",
            "10.5270/esa-d69ulft",
            "10.5270/esa-e3e68ff",
            "10.5270/esa-ht6sxz7",
            "10.5270/esa-iboli84",
            "10.5270/esa-j340roh",
            "10.5270/esa-jfhe2um",
            "10.5270/esa-l8g67jw",
            "10.5270/esa-otce9j2",
            "10.5270/esa-qoe849q",
            "10.5285/bf535053562141c6bb7ad831f5998d77",
            "10.57780/AL1-5f3877f",
            "10.57780/EN1-394f962",
            "10.57780/EN1-4a94d2e",
            "10.57780/EN1-89061a2",
            "10.57780/EN1-a0f1eee",
            "10.57780/EN1-b655562",
            "10.57780/EN1-dfd0eaa",
            "10.57780/SM1-857c3d7",
            "10.57780/al1-36b29e9",
            "10.57780/eca-224d95c",
            "10.57780/eca-5828141",
            "10.57780/en1-2d5de29",
            "10.57780/ers-2607327",
            "10.57780/ers-af99f2b",
            "10.57780/ers-b781bc0",
            "10.57780/ers-ee9aba7",
            "10.57780/esa-1268efe",
            "10.57780/esa-38f62f7",
            "10.57780/esa-5018efb",
            "10.57780/esa-53b8e3f",
            "10.57780/esa-62845f6",
            "10.57780/esa-6f8593e",
            "10.57780/esa-6fc121d",
            "10.57780/esa-76f3d32",
            "10.57780/esa-80e19f0",
            "10.57780/esa-8d039fa",
            "10.57780/esa-97d2b7",
            "10.57780/esa-b435dfa",
            "10.57780/esa-b667eb7",
            "10.57780/esa-c9d5673",
            "10.57780/esa-f9d597e",
            "10.57780/sm1-4f787c3",
            "10.57780/sm1-5ebe10b",
            "10.57780/sm1-fbf89e0"
         ]
      },
      "format": {
         "description": "Product encoding formats",
         "title": "Format",
         "type": "string"
      },
      "description": {
         "description": "Free text search term",
         "title": "Query",
         "type": "string"
      },
      "externalId": {
         "description": "Search by external identifier",
         "title": "External identifiers",
         "type": "string"
      },
      "collection": {
         "description": "The parent of the entry in a hierarchy of resources",
         "title": "Parent identifier",
         "type": "string",
         "enum": [
            "EOP:ESA:EARTH-ONLINE",
            "EOP:ESA:MAAP",
            "EOP:EU:CDSE",
            "EOP:NASA:CMR"
         ]
      },
      "title": {
         "description": "A name given to the resource",
         "title": "Title",
         "type": "string"
      },
      "otherConstraint": {
         "description": "Other restrictions and legal prerequisites for accessing and using the resource or metadata",
         "title": "Other constraint",
         "type": "string"
      },
      "platform": {
         "description": "The platform short name",
         "title": "Platform",
         "type": "string",
         "enum": [
            "ALOS-1",
            "AQUA",
            "Aeolus",
            "Aura",
            "Beijing-1",
            "Biomass",
            "COSMO-SkyMed Second Generation",
            "COSMO-SkyMed",
            "CryoSat-2",
            "ERS-1",
            "ERS-2",
            "EarthCARE",
            "Envisat",
            "FFSCat",
            "FLEX",
            "GEOSAT-1",
            "GEOSAT-2",
            "GHGSat-C1",
            "GHGSat-C2",
            "GOCE",
            "GOSAT-1",
            "GOSAT-2",
            "GRACE",
            "GeoEye-1",
            "ICEYE",
            "IKONOS-2",
            "IRS-1C",
            "IRS-1D",
            "IRS-P5",
            "IRS-P6",
            "IRS-R2",
            "JERS-1",
            "KOMPSAT-1",
            "KOMPSAT-2",
            "LANDSAT-9",
            "Landsat",
            "Landsat-1",
            "Landsat-2",
            "Landsat-3",
            "Landsat-4",
            "Landsat-5",
            "Landsat-7",
            "Landsat-8",
            "MOS-1",
            "MOS-1B",
            "Metop-A",
            "Metop-B",
            "NOAA POES",
            "NigeriaSat-1",
            "ODIN",
            "OceanSat-2",
            "OrbView-2",
            "PAZ",
            "PROBA-1",
            "PROBA-V",
            "PlanetScope",
            "Pleiades Neo",
            "Pleiades",
            "Pleiades-1A",
            "Pleiades-1B",
            "QuickBird-2",
            "QuikSCAT",
            "RADARSAT-1",
            "RADARSAT-2",
            "RapidEye",
            "SAOCOM-1A",
            "SAOCOM-1B",
            "SCISAT-1",
            "SMOS",
            "SPOT 1",
            "SPOT 2",
            "SPOT 3",
            "SPOT 4",
            "SPOT 5",
            "SPOT 6",
            "SPOT 7",
            "Seasat",
            "Sentinel-1A",
            "Sentinel-1B",
            "Sentinel-2",
            "Sentinel-2B",
            "Sentinel-3A",
            "Sentinel-3B",
            "Sentinel-5",
            "Sentinel-5P",
            "Sentinel-6A",
            "SkySat",
            "Spire",
            "Swarm",
            "TERRA",
            "TanDEM-X",
            "TanSat",
            "TerraSAR-X",
            "UK-DMC-1",
            "Vision-1",
            "WorldView-1",
            "WorldView-2",
            "WorldView-3",
            "WorldView-4"
         ]
      },
      "datetime": {
         "description": "Temporal interval to search",
         "title": "Datetime",
         "type": "string"
      },
      "instruments": {
         "description": "The instrument (e.g. MERIS, AATSR, ASAR, HRVIR. SAR)",
         "title": "Instrument",
         "type": "string",
         "enum": [
            "AATSR",
            "ACC",
            "ACE-FTS",
            "ACGS",
            "AIRSAFE",
            "ALADIN",
            "AMI/SAR",
            "AMI/Scatterometer",
            "ASAR",
            "ASM",
            "ATLID",
            "ATSR-1",
            "ATSR-2",
            "AVHRR",
            "AVNIR-2",
            "AwiFS",
            "BBR",
            "BGI",
            "CAPI",
            "CHRIS",
            "CPR",
            "CSG-SAR",
            "DORIS",
            "EFI",
            "EGG",
            "EOC",
            "ETM",
            "GIS",
            "GOME",
            "GOMOS",
            "GPSR",
            "GRACE ACC",
            "GRACE INTERFEROMETER",
            "GRACE LRR",
            "GRACE SCA",
            "HRC",
            "HRG",
            "HRS",
            "HRV",
            "HRVIR",
            "HiRAIS",
            "HiRI",
            "HyperScout-2",
            "Imaging Radars",
            "Imaging Spectrometers/Radiometers",
            "KBR",
            "LISS-3",
            "LISS-4",
            "LRR",
            "Lidar/Laser Sounders",
            "MAESTRO",
            "MERIS",
            "MESSR",
            "MGM",
            "MIPAS",
            "MIRAS",
            "MODIS",
            "MSC",
            "MSI",
            "MSS",
            "MWR",
            "NAOMI",
            "OCM-2",
            "OLCI",
            "OLI",
            "OMI",
            "OPS",
            "OSA",
            "OSIRIS",
            "P-SAR",
            "PALSAR",
            "PAN",
            "PAZ-SAR",
            "PNEO",
            "PRARE",
            "PRISM",
            "PlanetScope Camera",
            "RA",
            "RA-2",
            "RBV",
            "Radar Altimeters",
            "Radiometers",
            "SAOCOM-SAR",
            "SAR",
            "SCIAMACHY",
            "SENSE",
            "SIRAL",
            "SLIM6",
            "SLSTR",
            "SMR",
            "SRAL",
            "SSTI",
            "SSTL S1-4",
            "STR",
            "STRATOS",
            "SeaWiFS",
            "SeaWinds",
            "SkySat Camera",
            "SpaceView-110",
            "TANSO-CAI",
            "TANSO-CAI-2",
            "TANSO-FTS",
            "TANSO-FTS-2",
            "TDX-1",
            "TIRS",
            "TM",
            "TROPOMI",
            "TSX-1",
            "VFM",
            "VGT",
            "VTIR",
            "WAF-P",
            "WV110",
            "WV60",
            "X-SAR"
         ]
      },
      "useLimitation": {
         "description": "A string identifying informing if the resource has usage limitations",
         "title": "Use limitation",
         "type": "string",
         "enum": [
            "access to and use of biomass products are governed by the esa's data policy and require acceptance of the specific terms & conditions. by accessing biomass products, users inherently acknowledge and agree to these terms.",
            "access to ftp 1. open ftps://ec-pdgs-dissemination1.eo.esa.int/earthcare/earthcarel1validated via an ftp client 2. log in with an active _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ account 3. find the product you want 4. download. the earthcare l1 validate products collection is freely accessible in accordance with esa\u2019s earth observation data policy. an active eo sign in account is required to download the products. new users can register an account on _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ . for further information about the eo sign in service you can visit _$$tellus$$ https://esatellus.service-now.com/csp?id=esa_faq&kb_category=3e0b38dedb212700ee849785ca96194e . more information on how to use the earthcare online dissemination service can be found in the faq. should you need support please contact _$$eohelp$$ https://esatellus.service-now.com/csp?id=esa_simple_request&sys_id=f27b38f9dbdffe40e3cedb11ce961958 .",
            "access to ftp 1. open ftps://ec-pdgs-dissemination1.eo.esa.int/earthcare/earthcareorbitdata via an ftp client 2. log in with an active _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ account 3. find the product you want 4. download. the orbit data collection is freely accessible in accordance with esa\u2019s earth observation data policy. an active eo sign in account is required to download the products. new users can register an account on eo sign in (link to https://eoiam-idp.eo.esa.int/). for further information about the eo sign in service you can visit _$$tellus$$ https://esatellus.service-now.com/csp?id=esa_faq&kb_category=3e0b38dedb212700ee849785ca96194e . more information on how to use the earthcare online dissemination service can be found in the faq. should you need support please contact _$$eohelp$$ https://esatellus.service-now.com/csp?id=esa_simple_request&sys_id=f27b38f9dbdffe40e3cedb11ce961958 .",
            "access to ftp 1. open ftps://ec-pdgs-dissemination1.eo.esa.int/earthcare/jaxal2validated via an ftp client 2. log in with an active _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ account 3. find the product you want 4. download. the earthcare jaxa l2 validate products collection is freely accessible in accordance with esa\u2019s earth observation data policy. an active eo sign in account is required to download the products. new users can register an account on eo sign in (link to https://eoiam-idp.eo.esa.int/). for further information about the eo sign in service you can visit _$$tellus$$ https://esatellus.service-now.com/csp?id=esa_faq&kb_category=3e0b38dedb212700ee849785ca96194e . more information on how to use the earthcare online dissemination service can be found in the faq. should you need support please contact _$$eohelp$$ https://esatellus.service-now.com/csp?id=esa_simple_request&sys_id=f27b38f9dbdffe40e3cedb11ce961958 .",
            "access via ftp 1. open ftps://ec-pdgs-dissemination1.eo.esa.int/earthcare/earthcarel2validated via an ftp client 2. log in with an active _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ account 3. find the product you want 4. download the earthcare esa l2 products collection is freely accessible in accordance with esa\u2019s earth observation data policy. an active eo sign in account is required to download the products. new users can register an account on _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ . for further information about the eo sign in service you can visit _$$tellus$$ https://esatellus.service-now.com/csp?id=esa_faq&kb_category=3e0b38dedb212700ee849785ca96194e . should you need support please contact _$$eohelp$$ https://esatellus.service-now.com/csp?id=esa_simple_request&sys_id=f27b38f9dbdffe40e3cedb11ce961958 .",
            "available to residents of the following countries: worldwide",
            "data service request",
            "eo sign in authentication (open) access to https 1. go to the _$$dissemination service$$ https://ec-pdgs-dissemination1.eo.esa.int/oads/access/collection/earthcarel1validated 2. find the product you want 3. register or log in to _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ 4. download",
            "eo sign in authentication (open) access to https 1. go to the _$$dissemination service$$ https://ec-pdgs-dissemination1.eo.esa.int/oads/access/collection/earthcareorbitdata 2. find the product you want 3. register or log in to _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ 4. download",
            "eo sign in authentication (open) access to https 1. go to the _$$dissemination service$$ https://ec-pdgs-dissemination1.eo.esa.int/oads/access/collection/jaxal2validated 2. find the product you want 3. register or log in to _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ 4. download",
            "eo sign in authentication (open) access via https 1. go to the _$$dissemination service$$ https://ec-pdgs-dissemination2.eo.esa.int/oads/access/collection/earthcarel2validated 2. find the product you want 3. register or log in to _$$eo sign in$$ https://eoiam-idp.eo.esa.int/ 4. download",
            "eo sign in authentication (open)",
            "eo sign in authentication",
            "external data",
            "fast registration with approval (restrained)",
            "fast registration with approval",
            "fast registration with immediate access",
            "open access",
            "open data",
            "products are distributed under a cc-by-4.0 license. https://spdx.org/licenses/cc-by-4.0",
            "project proposal (restrained)",
            "project proposal",
            "restrained data",
            "this earthcare auxiliary data collection is available only to the earthcare commissioning team and to principal and co-investigators of accepted proposals to the _$$esa announcement of opportunity for the validation of earthcare$$ https://earth.esa.int/eogateway/announcement-of-opportunity/closed-earthcare-calibration-and-validation-announcement-of-opportunity .",
            "this earthcare esa l2 collection is available only to the earthcare commissioning team and to principal and co-investigators of accepted proposals to the _$$esa announcement of opportunity for the validation of earthcare$$ https://earth.esa.int/eogateway/announcement-of-opportunity/closed-earthcare-calibration-and-validation-announcement-of-opportunity .",
            "this earthcare esa l2 collection is available only to the earthcare commissioning team.",
            "this earthcare jaxa l2 collection is available only to the earthcare commissioning team and to principal and co-investigators of accepted proposals to the _$$esa announcement of opportunity for the validation of earthcare$$ https://earth.esa.int/eogateway/announcement-of-opportunity/closed-earthcare-calibration-and-validation-announcement-of-opportunity .",
            "this earthcare jaxa l2 collection is available only to the earthcare commissioning team.",
            "this earthcare l0 and l1 collection is available only to the earthcare commissioning team.",
            "this earthcare l1 collection is available only to the earthcare commissioning team and to principal and co-investigators of accepted proposals to the _$$esa announcement of opportunity for the validation of earthcare$$ https://earth.esa.int/eogateway/announcement-of-opportunity/closed-earthcare-calibration-and-validation-announcement-of-opportunity .",
            "under the following licence https://artefacts.ceda.ac.uk/licences/specific_licences/esacci_biomass_terms_and_conditions_v2.pdf, appropriate use of these data may fall under any use. this message is intended as guidance, always read the full licence. when using these data you must cite them correctly using the citation given on the ceda data catalogue record. https://artefacts.ceda.ac.uk/licences/specific_licences/esacci_biomass_terms_and_conditions_v2.pdf",
            "world wide"
         ]
      },
      "offering": {
         "description": "Related service offering",
         "title": "Offering",
         "type": "string",
         "enum": [
            "describecoverage",
            "getcapabilities",
            "getcoverage",
            "getmap",
            "search",
            "wcs",
            "wms"
         ]
      },
      "id": {
         "description": "Item identifier",
         "title": "Item ID",
         "type": "string"
      },
      "updated": {
         "format": "date-time",
         "description": "The date when the metadata item was last modified (i.e. updated) in the catalogue",
         "title": "Modification date",
         "type": "string"
      },
      "providers": {
         "description": "The name of the organization responsible for the resource",
         "title": "Organisation name",
         "type": "string",
         "enum": [
            "CEDA",
            "CMR",
            "CloudFerro",
            "EC",
            "ESA/ESRIN",
            "EUMETSAT",
            "NASA NSIDC DAAC",
            "OpenGeoHub",
            "USGS"
         ]
      },
      "classifiedAs": {
         "format": "uri",
         "description": "Keyword URI appearing in metadata record",
         "title": "Classified as",
         "type": "string"
      }
   },
   "$id": "https://catalog.maap.eo.esa.int/catalogue/collections/queryables"
}

Additional search parameters beyond the STAC search parameters can be used to filter granule search results. The available parameters for granule search are advertised for each individual collection and represented as a JSON Schema.

For example, the collection BiomassLevel1a, advertises its search parameters at https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a/queryables in JSON Schema format. Therefore, the following parameters can be used within a filter expression.

Get filter parameters for granule search

curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a/queryables
key type format
12 completionTimeFromAscendingNode number -
17 created string date-time
6 datetime string -
2 eofeos:global_coverage_id string -
5 eofeos:major_cycle_id string -
29 eofeos:mission_phase string -
26 eofeos:orbit_drift_flag string -
0 eofeos:repeat_cycle_id string -
11 eopf:datatake_id integer -
28 eopf:instrument_mode string -
19 externalId string -
34 frame string -
13 id string -
7 instruments string -
4 platform string -
18 polarisationChannels string -
27 processing:datetime string date-time
1 processing:facility string -
16 processing:level string -
14 processing:software string -
30 processingMode string -
33 product:acquisition_type string -
3 product:type string -
9 productionStatus string -
20 published string -
25 q string -
23 sar:observation_direction string -
24 sar:polarizations string -
31 sat:absolute_orbit integer -
8 sat:orbit_state string -
10 startTimeFromAscendingNode number -
21 swathIdentifier string -
15 track string -
32 updated string date-time
22 version string -
{
   "$schema": "https://json-schema.org/draft/2019-09/schema",
   "description": "Queryable names for the STAC API Item Search filter.",
   "type": "object",
   "title": "Queryables for BiomassLevel1a collection",
   "properties": {
      "eofeos:repeat_cycle_id": {
         "description": "Repeat cycle identifier. Each Major Cycle is split into repeat cycles, depending on Mission Phase or Orbit Control moment. Values are mission-specific.",
         "title": "Repeat cycle id",
         "type": "string",
         "enum": [
            "1",
            "2",
            "3"
         ]
      },
      "processing:facility": {
         "description": "The processing center (e.g. PDHS-E, PDHS-K, DPA, F-ACRI)",
         "title": "Processing center",
         "type": "string",
         "enum": [
            "Biomass CPF"
         ]
      },
      "eofeos:global_coverage_id": {
         "description": "Global coverage identifier. Each Phase of the mission is split in different Global Coverages. Values are mission-specific.",
         "title": "Global coverage id",
         "type": "string",
         "enum": [
            "1"
         ]
      },
      "product:type": {
         "description": "A string identifying the entry type",
         "title": "Product type",
         "type": "string",
         "enum": [
            "S1_SCS__1M",
            "S1_SCS__1S",
            "S2_SCS__1M",
            "S2_SCS__1S",
            "S3_SCS__1M",
            "S3_SCS__1S"
         ]
      },
      "platform": {
         "description": "The platform short name",
         "title": "Platform",
         "type": "string",
         "enum": [
            "Biomass"
         ]
      },
      "eofeos:major_cycle_id": {
         "description": "Major cycle identifier. Each Global Coverage is split into multiple Major cycles. Values are mission-specific.",
         "title": "Major cycle id",
         "type": "string",
         "enum": [
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7"
         ]
      },
      "datetime": {
         "description": "Temporal interval to search",
         "title": "Datetime",
         "type": "string"
      },
      "instruments": {
         "description": "The instrument (e.g. MERIS, AATSR, ASAR, HRVIR. SAR)",
         "title": "Instrument",
         "type": "string",
         "enum": [
            "P-SAR"
         ]
      },
      "sat:orbit_state": {
         "description": "The acquisition orbit direction",
         "title": "Orbit direction",
         "type": "string",
         "enum": [
            "ASCENDING",
            "DESCENDING"
         ]
      },
      "productionStatus": {
         "description": "The status of the entry",
         "title": "Production status",
         "type": "string",
         "enum": [
            "ARCHIVED"
         ]
      },
      "startTimeFromAscendingNode": {
         "description": "Start time of acquisition in milliseconds from ascending node date",
         "title": "Start time from ascending node",
         "type": "number"
      },
      "eopf:datatake_id": {
         "description": "Datatake identification",
         "title": "Data take id",
         "type": "integer"
      },
      "completionTimeFromAscendingNode": {
         "description": "Completion time of acquisition in milliseconds from ascending node date",
         "title": "Completion time from ascending node",
         "type": "number"
      },
      "id": {
         "description": "Item identifier",
         "title": "Item ID",
         "type": "string"
      },
      "processing:software": {
         "description": "The processor software name",
         "title": "Processor name",
         "type": "string",
         "enum": [
            "Biomass L1 Processor"
         ]
      },
      "track": {
         "description": "The orbit track",
         "title": "Track",
         "type": "string"
      },
      "processing:level": {
         "description": "The processing level applied to the entry",
         "title": "Processing level",
         "type": "string",
         "enum": [
            "L1A"
         ]
      },
      "created": {
         "format": "date-time",
         "description": "The date when the metadata item was ingested for the first time (i.e. inserted) in the catalogue",
         "title": "Creation date",
         "type": "string"
      },
      "polarisationChannels": {
         "description": "Polarisation channel transmit/receive configuration: horizontal, vertical",
         "title": "Polarisation channels",
         "type": "string",
         "enum": [
            "HH, HV, VH, VV"
         ]
      },
      "externalId": {
         "description": "Search by external identifier",
         "title": "External identifiers",
         "type": "string"
      },
      "published": {
         "description": "The time when the result became available (e.g. if postprocessing or laboratory analysis is required, it might be different to the phenomenonTime). dateTime in ISO 8601 format (CCYY-MM- DDThh:mm[:ss[.cc]]Z)",
         "title": "Availability time",
         "type": "string"
      },
      "swathIdentifier": {
         "description": "Swath identifier (e.g. Envisat ASAR has 7 distinct swaths (I1,I2,I3...I7) that correspond to precise incidence angles for the sensor). Value list can be retrieved with codeSpace",
         "title": "Swath identifier",
         "type": "string",
         "enum": [
            "S1",
            "S2",
            "S3"
         ]
      },
      "version": {
         "description": "The version of the product",
         "title": "Product version",
         "type": "string",
         "enum": [
            "01"
         ]
      },
      "sar:observation_direction": {
         "description": "Antenna look direction",
         "title": "Antenna look direction",
         "type": "string",
         "enum": [
            "LEFT",
            "RIGHT"
         ]
      },
      "sar:polarizations": {
         "description": "Polarisation mode",
         "title": "Polarisation mode",
         "type": "string",
         "enum": [
            "Q"
         ]
      },
      "q": {
         "description": "Free text search term",
         "title": "API Records Query",
         "type": "string"
      },
      "eofeos:orbit_drift_flag": {
         "description": "Orbit drift flag. Indicates if the product was generated during a moment where there were no active orbit control measures",
         "title": "Orbit drift flag",
         "type": "string",
         "enum": [
            "false"
         ]
      },
      "processing:datetime": {
         "format": "date-time",
         "description": "A date interval requesting entries processed within a given time interval",
         "title": "Processing date",
         "type": "string"
      },
      "eopf:instrument_mode": {
         "description": "The sensor mode",
         "title": "Sensor mode",
         "type": "string",
         "enum": [
            "SM"
         ]
      },
      "eofeos:mission_phase": {
         "description": "Mission phase, each one has a specific objective for the mission. Values are mission-specific.",
         "title": "Mission phase",
         "type": "string",
         "enum": [
            "INTERFEROMETRIC"
         ]
      },
      "processingMode": {
         "description": "Processing mode. Often referred to as real time, near real time etc",
         "title": "Processing mode",
         "type": "string",
         "enum": [
            "OPERATIONAL"
         ]
      },
      "sat:absolute_orbit": {
         "description": "The acquisition orbit number",
         "title": "Orbit number",
         "type": "integer"
      },
      "updated": {
         "format": "date-time",
         "description": "The date when the metadata item was last modified (i.e. updated) in the catalogue",
         "title": "Modification date",
         "type": "string"
      },
      "product:acquisition_type": {
         "description": "Used to distinguish at a high level the appropriateness of the acquisition for \"general\" use, whether the product is a nominal acquisition, special calibration product or other",
         "title": "Acquisition type",
         "type": "string",
         "enum": [
            "NOMINAL"
         ]
      },
      "frame": {
         "description": "The orbit frame",
         "title": "Frame",
         "type": "string"
      }
   },
   "$id": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a/queryables"
}

CQL2 Text filter expressions#

The STAC interface supports the filter parameter and filter expressions in cql2-text filter format at the following endpoints:

  • /collections

  • /collections/{collection-id}/items

  • /search

At the /search endpoint, it is required that a single collection can be determined from the collections or ids parameter. The queryables allowed in the filter expression are then identical to the ones at the corresponding /collections/{collection-id}/items/queryables endpoint. filter cannot be used at the /search endpoint when collections contains 0 or more than 1 collection identifiers.

Filter expressions are to be expressed with the Text encoding of the Basic Common Query Language (Basic CQL2-Text) [RD22]. See the OGC API Features “Conformance class Filter” section for CQL2 examples.

Example: 8.1

CQL Filter for collection search with logical operators (and, or).

filter = "platform = 'Envisat' and ( instrument = 'MERIS' or instrument = 'MIPAS' ) and organisationName = 'ESA/ESRIN'"

results = api.collection_search(   
    filter = filter
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections \
	--data-urlencode "filter=platform = 'Envisat' and ( instrument = 'MERIS' or instrument = 'MIPAS' ) and organisationName = 'ESA/ESRIN'" \
	--data-urlencode "filter-lang=cql2-text"
data = results.collection_list_as_dict()
df = pd.json_normalize(data, record_path=['collections'])

df[['id', 'summaries.platform','summaries.instruments']]
id summaries.platform summaries.instruments
0 MER.RR__1P [Envisat] [MERIS]
1 ENVISAT.MIP.NL__1P [Envisat] [MIPAS]
2 MER_FRS_1P [Envisat] [MERIS]
3 ENVISAT.MIP.NL__2P [Envisat] [MIPAS]
4 MER_FRS_2P [Envisat] [MERIS]
5 MER.RR__2P [Envisat] [MERIS]

Example: 8.2

CQL filter for granule search with comparison operators. Search granules with eo:cloud_cover between 10 and 15%.

from pystac_client import Client 
api = Client.open(URL_LANDING_PAGE)  

results = api.search(
    method = 'GET',   
    max_items = 30,
    collections = [COLLECTION_ID3_CLOUDS],
    filter = "eo:cloud_cover >= 10 and eo:cloud_cover < 15"   
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/search \
	--data-urlencode "collections=IKONOS.ESA.archive" \
	--data-urlencode "filter=eo:cloud_cover >= 10 and eo:cloud_cover < 15" \
	--data-urlencode "filter-lang=cql2-text"
print(f"{results.matched()} items found.")
26 items found.
# Display cloud-cover values as histogram to show that range is taken into account
stac_json = results.item_collection_as_dict()
gdf = gpd.GeoDataFrame.from_features(stac_json)
try:
  _ = gdf[['title','eo:cloud_cover']].hist()
except:
  print("eo:cloud_cover information is not available.")
_images/6bf20967f35f17bd43acf61d8189b95c6362bd5ec6822f719f580f5f99a40cdd.png

Example: 8.3

CQL filter with LIKE operator.

from pystac_client import Client
api = Client.open(URL_LANDING_PAGE)

results = api.collection_search(
    filter = "title LIKE '%Bio%'",
    max_collections=10
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections \
	--data-urlencode "filter=title LIKE '%Bio%'" \
	--data-urlencode "filter-lang=cql2-text"
print(f"{results.matched()} collections found.")
data = results.collection_list_as_dict()
df = pd.json_normalize(data, record_path=['collections'])
df[['id', 'title']]
31 collections found.
id title
0 C2734289572-ORNL_CLOUD GEDI L4A Footprint Level Aboveground Biomass D...
1 BiomassSimulated Biomass Simulated data
2 BiomassLevel1b Biomass Level 1B
3 BiomassAuxRest Biomass Auxiliary Restricted
4 BiomassCalVal10 Biomass Cal/Val
5 BiomassLevel2aIOC Biomass Level 2A (IOC)
6 C3495301468-ORNL_CLOUD GEDI L4A Footprint Level Aboveground Biomass D...
7 C2756302505-ORNL_CLOUD Aboveground Biomass Density for High Latitude ...
8 C3043630107-ORNL_CLOUD Gridded GEDI Vegetation Structure Metrics and ...
9 C2813390180-ORNL_CLOUD GEDI L4B Country-level Summaries of Abovegroun...

Example: 8.4

CQL filter with IN operator.

from pystac_client import Client
api = Client.open(URL_LANDING_PAGE)

results = api.collection_search(
    filter = "platform IN ('Biomass','EarthCARE')",
    max_collections=10
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections \
	--data-urlencode "filter=platform IN ('Biomass','EarthCARE')" \
	--data-urlencode "filter-lang=cql2-text"
print(f"{results.matched()} collections found.")
data = results.collection_list_as_dict()
df = pd.json_normalize(data, record_path=['collections'])
df[['id', 'summaries.platform']]
45 collections found.
id summaries.platform
0 EarthCAREL2InstChecked [EarthCARE]
1 EarthCAREL1InstChecked [EarthCARE]
2 BiomassSimulated [Biomass]
3 BiomassLevel1b [Biomass]
4 BiomassAuxRest [Biomass]
5 BiomassCalVal10 [Biomass]
6 BiomassLevel2aIOC [Biomass]
7 EarthCAREL1Validated_MAAP [EarthCARE]
8 EarthCAREL2InstChecked_MAAP [EarthCARE]
9 EarthCAREL1InstChecked_MAAP [EarthCARE]

Example: 8.5

CQL filter with BETWEEN operator.

from pystac_client import Client
api = Client.open(URL_LANDING_PAGE)

results = api.search(
    method = 'POST',
    max_items=50,
    collections=[COLLECTION_ID10_MAAP],
    filter="sat:absolute_orbit BETWEEN 5000 AND 5015"
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/search \
	--data-urlencode "collections=EarthCAREL2Products_MAAP" \
	--data-urlencode "filter=sat:absolute_orbit BETWEEN 5000 AND 5015" \
	--data-urlencode "filter-lang=cql2-text"
print(f"{results.matched()} items found.")
32 items found.
# Display cloud-cover values as histogram to show that range is taken into account
stac_json = results.item_collection_as_dict()
gdf = gpd.GeoDataFrame.from_features(stac_json)
try:
  _ = gdf[['title','sat:absolute_orbit']].hist()
except:
  print("sat:absolute_orbit information is not available.")
_images/53f4db8b9fa35b24a6aaa2e31c9eef356510691f4c4084b94fe6757ce74d65ab.png

Example: 8.6

Unsupported filter returns an HTTP error. E.g. collection search with advanced temporal function.

URL = URL_LANDING_PAGE + "collections"+ "?filter=T_INTERSECTS(modificationDate , INTERVAL('2022-01-01T00:00:00Z', '2024-11-01T00:00:00Z'))"
curl_str = curl_command(URL)
md("```shell\n" + curl_str + "\n```\n")
response = requests.get(URL)
print("HTTP Code: ",response.status_code)
print("HTTP Body: ",response.content)
HTTP Code:  400
HTTP Body:  {
  "error": {
    "code": 400,
    "message": "The Temporal'T_INTERSECTS' operator is not supported.",
    "errors": [
      {
        "location": "request"
      }
    ]
  }
}

CQL2 JSON filter expressions#

The STAC interface supports the filter parameter and filter expressions in cql2-json filter format at the following endpoints:

  • /collections

  • /collections/{collection-id}/items

  • /search

At the /search endpoint, it is required that at least one collection can be determined from the collections or ids parameter. The queryables allowed in the filter expression are then identical to the ones at the corresponding /collections/{collection-id}/items/queryables endpoint.

Filter expressions are to be expressed with the JSON encoding of the Basic Common Query Language (Basic CQL2-Text) [RD22].

Example: 9.1

CQL JSON Filter for collection search with logical operators (and, or) with cql2-json filter-lang.

_filter = {
    "op": "and",
    "args": [
        {
            "op": "=","args": [
                { "property": "platform" },
                "Envisat"
            ]
        },
        {
            "op": "or","args": [
                {"op": "=","args": [
                    { "property": "instrument" },
                    "MERIS"
                ]
            },
            {"op": "=","args": [
                { "property": "instrument" },
                "MIPAS"
                ]
            }
            ]
        },
        {
            "op": "=","args": [
                { "property": "organisationName" },
                "ESA/ESRIN"
            ]
        }
    ]
}
results = api.collection_search(
    # api does not support a 'dict' as parameter ?
    filter = json.dumps(_filter),
    filter_lang = "cql2-json"
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections \
	--data-urlencode "filter={\"op\": \"and\", \"args\": [{\"op\": \"=\", \"args\": [{\"property\": \"platform\"}, \"Envisat\"]}, {\"op\": \"or\", \"args\": [{\"op\": \"=\", \"args\": [{\"property\": \"instrument\"}, \"MERIS\"]}, {\"op\": \"=\", \"args\": [{\"property\": \"instrument\"}, \"MIPAS\"]}]}, {\"op\": \"=\", \"args\": [{\"property\": \"organisationName\"}, \"ESA/ESRIN\"]}]}" \
	--data-urlencode "filter-lang=cql2-json"
data = results.collection_list_as_dict()
df = pd.json_normalize(data, record_path=['collections'])
df[['id', 'summaries.platform','summaries.instruments']]
id summaries.platform summaries.instruments
0 MER.RR__1P [Envisat] [MERIS]
1 ENVISAT.MIP.NL__1P [Envisat] [MIPAS]
2 MER_FRS_1P [Envisat] [MERIS]
3 ENVISAT.MIP.NL__2P [Envisat] [MIPAS]
4 MER_FRS_2P [Envisat] [MERIS]
5 MER.RR__2P [Envisat] [MERIS]

Example: 9.2

CQL filter with BETWEEN operator.

filter_dict = {
    "op":"between",
    "args":[
        {"property":"sat:absolute_orbit"},
        5000,
        5010
    ]
}
results = api.search(
    method = 'POST',
    max_items = 30,
    collections = [COLLECTION_ID10_MAAP],
    filter = filter_dict,
    filter_lang = "cql2-json"
)
print(f"{results.matched()} items found.")
32 items found.
# Display cloud-cover values as histogram to show that range is taken into account
stac_json = results.item_collection_as_dict()
gdf = gpd.GeoDataFrame.from_features(stac_json)
try:
  _ = gdf[['title','sat:absolute_orbit']].hist()
except:
  print("sat:absolute_orbit information is not available.")
_images/9e7ce3b4580dbd6160ba06954a6191840fe93b3fce7cd653c941f96dd6c3a977.png

Example: 9.3

CQL filter for granule search with comparison operators using cql2-json filterLang. Search granules with orbit number (sat:absolute_orbit) between 5000 and 5010.

from pystac_client import Client
api = Client.open(URL_LANDING_PAGE)

results = api.search(
    method = 'GET',
    max_items = 30,
    collections = [COLLECTION_ID10_MAAP],
    filter = '{"op": "and","args": [{"op": ">=","args":[{"property":"sat:absolute_orbit"},5000]},{"op":"<","args":[{"property":"sat:absolute_orbit"},5010]}]}',
    filter_lang="cql2-json"
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/search \
	--data-urlencode "collections=EarthCAREL2Products_MAAP" \
	--data-urlencode "filter={\"op\": \"and\",\"args\": [{\"op\": \">=\",\"args\":[{\"property\":\"sat:absolute_orbit\"},5000]},{\"op\":\"<\",\"args\":[{\"property\":\"sat:absolute_orbit\"},5010]}]}" \
	--data-urlencode "filter-lang=cql2-json"
print(f"{results.matched()} items found.")
32 items found.
# Display cloud-cover values as histogram to show that range is taken into account
stac_json = results.item_collection_as_dict()
gdf = gpd.GeoDataFrame.from_features(stac_json)
try:
    _ = gdf[['title','eo:cloud_cover']].hist()
except:
    print("eo:cloud_cover information is not available.")
eo:cloud_cover information is not available.

Example: 9.4

CQL JSON filter for granule search with comparison operators using cql2-json filterLang on the POST endpoint. Search granules with orbit number (sat:absolute_orbit) between 5000 and 5010.

filter_dict = {
    "op": "and",
    "args": [
        {
            "op": ">=",
            "args": [
                {"property": "sat:absolute_orbit"},
                10
            ]
        },
        {
            "op": "<",
            "args": [
                {"property": "sat:absolute_orbit"},
                15
            ]
        }
    ]
}
results = api.search(
    method='POST',
    max_items=30,
    collections=[COLLECTION_ID10_MAAP],    
    filter= filter_dict,
    filter_lang="cql2-json"
)
# Display cloud-cover values as histogram to show that range is taken into account
stac_json = results.item_collection_as_dict()
gdf = gpd.GeoDataFrame.from_features(stac_json)
try:
    _ = gdf[['title','eo:cloud_cover']].hist()
except:
    print("eo:cloud_cover information is not available.")
eo:cloud_cover information is not available.

Sorting results#

The STAC interface supports the sortby parameter at the following endpoints:

  • /collections

  • /collections/{collection-id}/items

  • /search

At the /search endpoint, it is required that a single collection can be determined from the collections parameter. The sortables allowed in the filter expression are then identical to the ones at the corresponding /collections/{collection-id}/items endpoint. sortby cannot be used at the /search endpoint when collections contains 0 or more than 1 collection identifiers.

Sorting of search results is available for collection and granule searches, but the available criteria differ per resource type. The STAC API Sort Extension [RD26] defines the syntax to be used. The sorting parameter has to be expressed as the corresponding STAC property name. A minus sign (-) before the property name indicates a descending order. If the property used for sorting is an array with more than one element, the result may be unexpected. A 400 Bad Request status code is returned when the sort criteria used are not supported.

Collections (at /collections)

[properties.]id

[properties.]instruments

[properties.]platform

[properties.]processing:level

[properties.]providers

[properties.]sci:doi

[properties.]title

[properties.]updated

The available sort criteria for items (granules) depend also on the sensortype, e.g. optical, radar, etc. and whether the remote catalogue hosting the granule metadata supports sorting as well.

Items (granules at /items or /search)

[properties.]created

[properties.]datetime

[properties.]end_datetime

[properties.]eo:cloud_cover

[properties.]eo:snow_cover

[properties.]eofeos:global_coverage_id

[properties.]eofeos:is_coregistration_primary

[properties.]eofeos:major_cycle_id

[properties.]eofeos:mission_phase

[properties.]eofeos:orbit_drift_flag

[properties.]eofeos:repeat_cycle_id

[properties.]eofeos:stack_id

[properties.]eopf:datatake_id

[properties.]eopf:instrument_mode

[properties.]id

[properties.]instruments

[properties.]platform

[properties.]processing:datetime

[properties.]processing:facility

[properties.]processing:level

[properties.]processing:software

[properties.]product:acquisition_type

[properties.]product:type

[properties.]sar:observation_direction

[properties.]sar:polarizations

[properties.]sat:absolute_orbit

[properties.]sat:orbit_state

[properties.]sci:doi

[properties.]start_datetime

[properties.]updated

[properties.]version

[properties.]view:sun_azimuth

[properties.]view:sun_elevation

The sort criteria can optionally be prefixed by “properties.” for compatibility with the STACBrowser software.

The /collections and /items endpoints support only the GET method. At the /search endpoint, both the GET and POST method are supported.

Example: 10.1

Sort collection search results by platform (ascending) and instrument (descending).

URL = URL_LANDING_PAGE + "collections" \
    + "?filter=parentIdentifier='EOP:ESA:EARTH-ONLINE' and organisationName='ESA/ESRIN'" \
    + "&sortby=platform,-instruments"
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections \
	--data-urlencode "filter=parentIdentifier='EOP:ESA:EARTH-ONLINE' and organisationName='ESA/ESRIN'" \
	--data-urlencode "sortby=platform,-instruments"
response = requests.get(URL)
data = json.loads(response.text)
df = pd.json_normalize(data, record_path=['collections'])
df[['id','title','summaries.platform','summaries.instruments']]
id title summaries.platform summaries.instruments
0 WorldViewLegionfullarchiveandtasking0 WorldView Legion full archive and tasking NaN NaN
1 EarthCAREXMETL1DProducts10 EarthCARE X-MET L1D Products NaN NaN
2 ALOS_PRISM_L1B Alos PRISM L1B [ALOS-1] [PRISM]
3 alos-prism-l1c ALOS PRISM L1C [ALOS-1] [PRISM]
4 alos.prism.l1c.european.coverage.cloud.free ALOS PRISM L1C European Coverage Cloud Free [ALOS-1] [PRISM]
5 ALOSIPY ALOS PALSAR International Polar Year Antarctica [ALOS-1] [PALSAR]
6 ALOS.PALSAR.FBS.FBD.PLR.products ALOS PALSAR products [ALOS-1] [PALSAR]
7 ALOS Alos African Coverage ESA archive [ALOS-1] [PRISM]
8 ALOS.AVNIR-2.L1C ALOS AVNIR-2 L1C [ALOS-1] [AVNIR-2]
9 TropForest TropForest- ALOS, GEOSAT-1 & KOMPSAT-2 optical... [ALOS-1, GEOSAT-1, KOMPSAT-2] [AVNIR-2, SLIM6, MSC]

Example: 10.2

Sort collection search results by instrument (descending).

URL = URL_LANDING_PAGE + "collections"+ "?filter=platform='Envisat'" \
    + "&sortby=-instruments" \
    + "&limit=30"
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections \
	--data-urlencode "filter=platform='Envisat'" \
	--data-urlencode "sortby=-instruments" \
	--data-urlencode "limit=30"
response = requests.get(URL)
data = json.loads(response.text)
df = pd.json_normalize(data, record_path=['collections'])
df[['id','summaries.platform','summaries.instruments']]
id summaries.platform summaries.instruments
0 SCIAMACHYLevel2 [Envisat] [SCIAMACHY]
1 SCIAMACHYLevel1 [Envisat] [SCIAMACHY]
2 SCIAMACHYLevel2LimbOzone [Envisat] [SCIAMACHY]
3 TDPforAtmosphere [ERS-1, ERS-2, Envisat] [MWR, MWR, RA-2]
4 TDPforSeaice [Envisat, ERS-1, ERS-2] [MWR, RA, RA]
5 TDPforOceanWaves [ERS-1, ERS-2, Envisat] [MWR, MWR, RA-2]
6 FDRforAltimetry [ERS-1, ERS-2, Envisat] [MWR, MWR, RA-2]
7 TDPforOceanCoastalTopography [ERS-1, ERS-2, Envisat] [MWR, MWR, RA-2]
8 FDRforRadiometry [ERS-1, ERS-2, Envisat] [MWR, MWR, RA-2]
9 TDPforLandice [ERS-1, ERS-2, Envisat] [MWR, MWR, RA-2]
10 TDPforInlandWater [ERS-1, ERS-2, Envisat] [MWR, MWR, RA-2]
11 ENVISAT.MIP.NL__1P [Envisat] [MIPAS]
12 ENVISAT.MIP.NL__2P [Envisat] [MIPAS]
13 MER.RR__1P [Envisat] [MERIS]
14 MER_FRS_1P [Envisat] [MERIS]
15 MER_FRS_2P [Envisat] [MERIS]
16 MER.RR__2P [Envisat] [MERIS]
17 ENVISAT.GOM.LIM_1P [Envisat] [GOMOS]
18 NetCDF.GOMOS_UFP_Gridded [Envisat] [GOMOS]
19 ENVISAT.GOM_EXT_2P [Envisat] [GOMOS]
20 NetCDF.GOMOS_UFP [Envisat] [GOMOS]
21 ENVISAT.GOM.TRA_1P [Envisat] [GOMOS]
22 ENVISAT.GOM.NL__2P [Envisat] [GOMOS]
23 FDRforAtmosphericCompositionATMOSL1B [Envisat, ERS-2] [SCIAMACHY, GOME]
24 ENVISAT.DOR.DOP_1P [Envisat] [DORIS]
25 ENVISAT.DOR.VOR_AX [Envisat] [DORIS]
26 ENVISAT.ASA.APP_1P [Envisat] [ASAR]
27 ENVISAT.ASA.WSM_1P [Envisat] [ASAR]
28 ENVISAT.ASA.WVW_2P [Envisat] [ASAR]
29 ENVISAT.ASA.IMS_1P [Envisat] [ASAR]

Example: 10.3

Sort collection search results by modification date (ascending).

URL = URL_LANDING_PAGE + "collections"+ "?filter=parentIdentifier='EOP:ESA:EARTH-ONLINE'" \
    + "&sortby=properties.updated" \
    + "&limit=15"
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections \
	--data-urlencode "filter=parentIdentifier='EOP:ESA:EARTH-ONLINE'" \
	--data-urlencode "sortby=properties.updated" \
	--data-urlencode "limit=15"
response = requests.get(URL)
data = json.loads(response.text)
df = pd.json_normalize(data, record_path=['collections'])
df[['title','updated']]
title updated
0 SMOS Level 3C Sea Ice Thickness 2025-04-24T10:23:59Z
1 Swarm Level 2 longterm 2025-04-24T10:24:00Z
2 Swarm Geodesy/Gravity 2025-04-24T10:24:00Z
3 Swarm Oceans 2025-04-24T10:24:00Z
4 TANSAT AGCS and CAPI products 2025-04-24T10:24:01Z
5 SciSat-1: ACE-FTS and MAESTRO 2025-04-24T10:24:01Z
6 Envisat SCIAMACHY Level 2 [SCI_____2P] 2025-04-24T10:24:02Z
7 ERS-2 GOME Spectral Product L1 2025-04-24T10:24:02Z
8 ERS-2 GOME Total Column Amount of Trace Gases ... 2025-04-24T10:24:02Z
9 Odin OSIRIS data products 2025-04-24T10:24:02Z
10 GOME Total Column Water Vapour Climate product 2025-04-24T10:24:03Z
11 Envisat GOMOS Level 1b - Limb spectra [GOM_LIM... 2025-04-24T10:24:03Z
12 Envisat MIPAS L2 - Temperature, pressure and a... 2025-04-24T10:24:03Z
13 SPOT-6 to 7 full archive and tasking 2025-04-24T10:24:04Z
14 GEOSAT-1 full archive and tasking 2025-04-24T10:24:04Z

Example: 10.4

Sort collection search results by title (ascending).

URL = URL_LANDING_PAGE + "collections"+ "?filter=parentIdentifier='EOP:ESA:EARTH-ONLINE'" \
    + "&sortby=properties.title" \
    + "&limit=15"
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections \
	--data-urlencode "filter=parentIdentifier='EOP:ESA:EARTH-ONLINE'" \
	--data-urlencode "sortby=properties.title" \
	--data-urlencode "limit=15"
response = requests.get(URL)
data = json.loads(response.text)
df = pd.json_normalize(data, record_path=['collections'])
df[['id','title']]
id title
0 ADAM.Surface.Reflectance.Database ADAM Surface Reflectance Database v4.0
1 ALOS Alos African Coverage ESA archive
2 ALOS.AVNIR-2.L1C ALOS AVNIR-2 L1C
3 ALOSIPY ALOS PALSAR International Polar Year Antarctica
4 ALOS.PALSAR.FBS.FBD.PLR.products ALOS PALSAR products
5 ALOS_PRISM_L1B Alos PRISM L1B
6 alos-prism-l1c ALOS PRISM L1C
7 alos.prism.l1c.european.coverage.cloud.free ALOS PRISM L1C European Coverage Cloud Free
8 TDPforAtmosphere Atmospheric Thematic Data Product [MWR_TDPATM]
9 NASA_OMI Aura OMI complete NASA dataset
10 AVHRRLocalAreaCoverageImagery10 AVHRR Level-1B/1C Local Area Coverage Imagery
11 CartoSat-1.archive.and.Euro-Maps.3D.Digital.Su... CartoSat-1 archive and Euro-Maps 3D Digital Su...
12 Cartosat-1.Euro-Maps.3D Cartosat-1 Euro-Maps 3D
13 CosmoSkyMed COSMO-SkyMed ESA archive
14 COSMO-SkyMed.full.archive.and.tasking COSMO-SkyMed full archive and tasking

Example: 10.5

Sort item search results by orbit number (ascending) and id (ascending) at /items endpoint.

COLLECTION_ID = 'BiomassLevel1cIOC'
URL = URL_LANDING_PAGE + "collections/"+ COLLECTION_ID + "/items?sortby=sat:absolute_orbit,id"
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1cIOC/items \
	--data-urlencode "sortby=sat:absolute_orbit,id"
response = requests.get(URL)
data = json.loads(response.text)
# Convert STAC items into data frame
df = pd.json_normalize(data, record_path=['features'])
df[['id', 'properties.sat:absolute_orbit']]
id properties.sat:absolute_orbit
0 BIO_S1_STA__1M_20170105T103648_20170105T103657... 62
1 BIO_S1_STA__1M_20170108T103651_20170108T103700... 106
2 BIO_S1_STA__1M_20250623T025119_20250623T025133... 803
3 BIO_S1_STA__1M_20250623T025131_20250623T025152... 803
4 BIO_S1_STA__1M_20250623T025150_20250623T025209... 803
5 BIO_S1_STA__1M_20250623T025759_20250623T025812... 804
6 BIO_S1_STA__1M_20170527T220953_20170527T221011... 2151
7 BIO_S1_STA__1M_20170527T220953_20170527T221012... 2151
8 BIO_S1_STA__1M_20170527T220953_20170527T221012... 2151
9 BIO_S1_STA__1M_20170527T220953_20170527T221012... 2151

Example: 10.6

Sort item search results (granules) by start_datetime (descending) at /search endpoint (GET).

from pystac_client import Client 
api = Client.open(URL_LANDING_PAGE) 

results = api.search(
    method = 'GET',         
    max_items = 10,
    collections=[COLLECTION_ID],
    sortby="-start_datetime"
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/search \
	--data-urlencode "collections=BiomassLevel1cIOC" \
	--data-urlencode "sortby=-start_datetime"
# Convert STAC items into data frame
stac_json = results.item_collection_as_dict()
gdf = gpd.GeoDataFrame.from_features(stac_json, "epsg:4326")
# limit to useful values
gdf[['title','start_datetime']]
title start_datetime
0 BIO_S1_STA__1M_20250623T025759_20250623T025812... 2025-06-23T02:57:59.724Z
1 BIO_S1_STA__1M_20250623T025150_20250623T025209... 2025-06-23T02:51:50.384Z
2 BIO_S1_STA__1M_20250623T025131_20250623T025152... 2025-06-23T02:51:31.404Z
3 BIO_S1_STA__1M_20250623T025119_20250623T025133... 2025-06-23T02:51:19.237Z
4 BIO_S1_STA__1M_20170602T221054_20170602T221115... 2017-06-02T22:10:54.668Z
5 BIO_S1_STA__1M_20170602T221054_20170602T221115... 2017-06-02T22:10:54.667Z
6 BIO_S1_STA__1M_20170602T221054_20170602T221115... 2017-06-02T22:10:54.667Z
7 BIO_S1_STA__1M_20170602T221054_20170602T221115... 2017-06-02T22:10:54.664Z
8 BIO_S1_STA__1M_20170602T221035_20170602T221056... 2017-06-02T22:10:35.669Z
9 BIO_S1_STA__1M_20170602T221035_20170602T221056... 2017-06-02T22:10:35.668Z

Example: 10.7

Sort item search results by start_datetime (descending) at /items endpoint.

URL = URL_LANDING_PAGE + "collections/"+ COLLECTION_ID3_CLOUDS + "/items" \
    + "?sortby=-start_datetime"
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections/IKONOS.ESA.archive/items \
	--data-urlencode "sortby=-start_datetime"
response = requests.get(URL)
data = json.loads(response.text)
# Convert STAC items into data frame
df = pd.json_normalize(data, record_path=['features'])
df[['properties.title', 'properties.datetime']]
properties.title properties.datetime
0 IK2_OPER_OSA_GEO_1P_20081209T065500_N28-272_E0... 2008-12-09T06:55:00Z
1 IK2_OPER_OSA_GEO_1P_20081113T110300_N31-177_W0... 2008-11-13T11:03:00Z
2 IK2_OPER_OSA_GEO_1P_20081104T103000_N49-649_E0... 2008-11-04T10:30:00Z
3 IK2_OPER_OSA_GEO_1P_20081005T072900_N21-879_E0... 2008-10-05T07:29:00Z
4 IK2_OPER_OSA_GEO_1P_20081004T064900_N34-012_E0... 2008-10-04T06:49:00Z
5 IK2_OPER_OSA_GEO_1P_20080827T070900_N22-241_E0... 2008-08-27T07:09:00Z
6 IK2_OPER_OSA_GEO_1P_20080820T092600_N38-054_E0... 2008-08-20T09:26:00Z
7 IK2_OPER_OSA_GEO_1P_20080816T070400_N34-704_E0... 2008-08-16T07:04:00Z
8 IK2_OPER_OSA_GEO_1P_20080806T105200_N49-207_E0... 2008-08-06T10:52:00Z
9 IK2_OPER_OSA_GEO_1P_20080806T105100_N49-207_E0... 2008-08-06T10:51:00Z

Example: 10.8

Sort item search results by cloud cover (ascending) and id (ascending) at /items endpoint.

URL = URL_LANDING_PAGE + "collections/"+ COLLECTION_ID3_CLOUDS + "/items" \
    + "?datetime=2001-01-01T00:00:00Z/2003-01-02T00:00:00Z" \
    + "&sortby=eo:cloud_cover,id"
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections/IKONOS.ESA.archive/items \
	--data-urlencode "datetime=2001-01-01T00:00:00Z/2003-01-02T00:00:00Z" \
	--data-urlencode "sortby=eo:cloud_cover,id"
response = requests.get(URL)
data = json.loads(response.text)
# Convert STAC items into data frame
df = pd.json_normalize(data, record_path=['features'])
df[['id', 'properties.eo:cloud_cover', 'properties.datetime']]
id properties.eo:cloud_cover properties.datetime
0 IK2_OPER_OSA_GEO_1P_20010613T085400_N40-024_E0... 0 2001-06-13T08:54:00Z
1 IK2_OPER_OSA_GEO_1P_20010613T085400_N40-131_E0... 0 2001-06-13T08:54:00Z
2 IK2_OPER_OSA_GEO_1P_20010814T113300_N38-653_W0... 0 2001-08-14T11:33:00Z
3 IK2_OPER_OSA_GEO_1P_20010830T080000_N35-463_E0... 0 2001-08-30T08:00:00Z
4 IK2_OPER_OSA_GEO_1P_20011122T090100_N38-428_E0... 0 2001-11-22T09:01:00Z
5 IK2_OPER_OSA_GEO_1P_20020520T092400_N39-944_E0... 0 2002-05-20T09:24:00Z
6 IK2_OPER_OSA_GEO_1P_20020624T103800_N43-607_E0... 0 2002-06-24T10:38:00Z
7 IK2_OPER_OSA_GEO_1P_20030101T064600_N25-938_E0... 0 2003-01-01T06:46:00Z
8 IK2_OPER_OSA_GEO_1P_20020118T101700_N41-972_E0... 14 2002-01-18T10:17:00Z
9 IK2_OPER_OSA_GEO_1P_20010810T104600_N43-573_E0... 22 2001-08-10T10:46:00Z

Example: 10.9

Sort item search results by eofeos:repeat_cycle_id (descending) at /items endpoint.

URL = URL_LANDING_PAGE + "collections/"+ COLLECTION_ID + "/items?limit=20" \
    + "&datetime=2017-05-30T00:00:00Z/2017-06-02T23:00:00Z"  \
    + "&sortby=-eofeos:repeat_cycle_id"
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1cIOC/items \
	--data-urlencode "limit=20" \
	--data-urlencode "datetime=2017-05-30T00:00:00Z/2017-06-02T23:00:00Z" \
	--data-urlencode "sortby=-eofeos:repeat_cycle_id"
response = requests.get(URL)
data = json.loads(response.text)
# Convert STAC items into data frame
df = pd.json_normalize(data, record_path=['features'])
df[['id', 'properties.eofeos:repeat_cycle_id']]
id properties.eofeos:repeat_cycle_id
0 BIO_S1_STA__1M_20170602T221016_20170602T221037... 3
1 BIO_S1_STA__1M_20170602T221016_20170602T221037... 3
2 BIO_S1_STA__1M_20170602T220959_20170602T221018... 3
3 BIO_S1_STA__1M_20170602T221035_20170602T221056... 3
4 BIO_S1_STA__1M_20170602T221054_20170602T221115... 3
5 BIO_S1_STA__1M_20170602T220959_20170602T221018... 3
6 BIO_S1_STA__1M_20170602T221054_20170602T221115... 3
7 BIO_S1_STA__1M_20170602T220959_20170602T221018... 3
8 BIO_S1_STA__1M_20170602T221016_20170602T221037... 3
9 BIO_S1_STA__1M_20170602T221054_20170602T221115... 3
10 BIO_S1_STA__1M_20170602T221054_20170602T221115... 3
11 BIO_S1_STA__1M_20170602T221035_20170602T221056... 3
12 BIO_S1_STA__1M_20170602T221035_20170602T221056... 3
13 BIO_S1_STA__1M_20170602T221016_20170602T221037... 3
14 BIO_S1_STA__1M_20170602T221035_20170602T221056... 3
15 BIO_S1_STA__1M_20170602T220959_20170602T221018... 3
16 BIO_S1_STA__1M_20170530T220956_20170530T221015... 2
17 BIO_S1_STA__1M_20170530T221051_20170530T221112... 2
18 BIO_S1_STA__1M_20170530T220956_20170530T221015... 2
19 BIO_S1_STA__1M_20170530T221110_20170530T221131... 2

Control properties returned#

The STAC interface supports the fields parameter at the following endpoints:

  • /collections

  • /collections/{collection-id}/items

  • /search

Example: 11.1

Excluding fields at /items endpoint (GET).

fields = '-geometry,-properties,-links,-assets'
URL = URL_LANDING_PAGE + "collections/TropForest/items" + "?fields=" + fields
curl_str = curl_command(URL)
md("```shell\n" + curl_str + "\n```\n")
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections/TropForest/items \
	--data-urlencode "fields=-geometry,-properties,-links,-assets"
response = requests.get(URL)
data = json.loads(response.text)
jstr = json.dumps(data["features"][0], indent=3)
md("```json\n" + jstr + "\n```\n")
{
   "stac_version": "1.0.0",
   "bbox": [
      107.92515479,
      13.91788998,
      108.08990996,
      14.07910052
   ],
   "id": "KO2_OTPF_KO2_MSC_2F_20091110T025507_20091110T025507_017541_E108_N014",
   "collection": "TropForest",
   "type": "Feature",
   "stac_extensions": [
      "https://stac-extensions.github.io/eo/v2.0.0/schema.json",
      "https://stac-extensions.github.io/projection/v2.0.0/schema.json",
      "https://stac-extensions.github.io/processing/v1.2.0/schema.json",
      "https://cs-si.github.io/eopf-stac-extension/v1.2.0/schema.json",
      "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
      "https://stac-extensions.github.io/view/v1.0.0/schema.json",
      "https://stac-extensions.github.io/product/v1.0.0/schema.json",
      "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json"
   ]
}

Example: 11.2

Excluding nested fields at /items endpoint (GET).

fields = '-properties.title,-properties.updated'
URL = URL_LANDING_PAGE + "collections/TropForest/items" + "?fields=" + fields
curl_str = curl_command(URL)
md("```shell\n" + curl_str + "\n```\n")
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections/TropForest/items \
	--data-urlencode "fields=-properties.title,-properties.updated"
response = requests.get(URL)
data = json.loads(response.text)
jstr = json.dumps(data["features"][0]["properties"], indent=3)
md("```json\n" + jstr + "\n```\n")
{
   "proj:code": "EPSG:4326",
   "start_datetime": "2009-11-10T02:55:07Z",
   "end_datetime": "2009-11-10T02:55:07Z",
   "processing:facility": "Astrium Services",
   "view:sun_azimuth": 0,
   "product:type": "KO2_MSC_2F",
   "platform": "KOMPSAT-2",
   "view:sun_elevation": 0,
   "datetime": "2009-11-10T02:55:07Z",
   "instruments": [
      "MSC"
   ],
   "constellation": "KOMPSAT",
   "sat:orbit_state": "descending",
   "eo:cloud_cover": 1,
   "processing:datetime": "2011-08-04T00:00:00Z",
   "eopf:instrument_mode": "MS",
   "sat:absolute_orbit": 17541,
   "product:acquisition_type": "nominal"
}

Example: 11.3

Excluding fields at /search endpoint (GET).

results = api.search(
    method = 'GET',         
    max_items = 10,
    collections=['TropForest'],
    # fields = ['bbox','id','type','properties', 'geometry']
    fields = ['-geometry','-properties','-links','-assets']
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/search \
	--data-urlencode "collections=TropForest" \
	--data-urlencode "fields=-geometry,-properties,-links,-assets"
stac_json = results.item_collection_as_dict()
stac_json['features'][0]
{'stac_version': '1.0.0',
 'bbox': [107.92515479, 13.91788998, 108.08990996, 14.07910052],
 'id': 'KO2_OTPF_KO2_MSC_2F_20091110T025507_20091110T025507_017541_E108_N014',
 'collection': 'TropForest',
 'type': 'Feature',
 'stac_extensions': ['https://stac-extensions.github.io/eo/v2.0.0/schema.json',
  'https://stac-extensions.github.io/projection/v2.0.0/schema.json',
  'https://stac-extensions.github.io/processing/v1.2.0/schema.json',
  'https://cs-si.github.io/eopf-stac-extension/v1.2.0/schema.json',
  'https://stac-extensions.github.io/sat/v1.0.0/schema.json',
  'https://stac-extensions.github.io/view/v1.0.0/schema.json',
  'https://stac-extensions.github.io/product/v1.0.0/schema.json',
  'https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json']}

Example: 11.4

Excluding fields at /search endpoint (POST).

results = api.search(
    method = 'POST',         
    max_items = 10,
    collections=['TropForest'],
    # fields = ['bbox','id','type','properties', 'geometry']
    # Specification requires "include" and "exclude".  Not present in pystac_client.
    fields = ['-geometry','-properties','-links','-assets']
)
curl -X POST https://catalog.maap.eo.esa.int/catalogue/search \
	--header 'Content-Type: application/json' \
	--data-raw '{
		"collections": ["TropForest"],
		"fields": "-geometry,-properties,-links,-assets"
	}'
stac_json = results.item_collection_as_dict()
stac_json['features'][0]
{'stac_version': '1.0.0',
 'bbox': [107.92515479, 13.91788998, 108.08990996, 14.07910052],
 'id': 'KO2_OTPF_KO2_MSC_2F_20091110T025507_20091110T025507_017541_E108_N014',
 'collection': 'TropForest',
 'type': 'Feature',
 'stac_extensions': ['https://stac-extensions.github.io/eo/v2.0.0/schema.json',
  'https://stac-extensions.github.io/projection/v2.0.0/schema.json',
  'https://stac-extensions.github.io/processing/v1.2.0/schema.json',
  'https://cs-si.github.io/eopf-stac-extension/v1.2.0/schema.json',
  'https://stac-extensions.github.io/sat/v1.0.0/schema.json',
  'https://stac-extensions.github.io/view/v1.0.0/schema.json',
  'https://stac-extensions.github.io/product/v1.0.0/schema.json',
  'https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json']}

Example: 11.5

Including fields at /items endpoint (GET).

fields = 'bbox,id,type'
URL = URL_LANDING_PAGE + "collections/TropForest/items" + "?fields=" + fields
curl_str = curl_command(URL)
md("```shell\n" + curl_str + "\n```\n")
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections/TropForest/items \
	--data-urlencode "fields=bbox,id,type"
response = requests.get(URL)
data = json.loads(response.text)
# show remaining content of first item
jstr = json.dumps(data["features"][0], indent=3)
md("```json\n" + jstr + "\n```\n")
{
   "bbox": [
      107.92515479,
      13.91788998,
      108.08990996,
      14.07910052
   ],
   "id": "KO2_OTPF_KO2_MSC_2F_20091110T025507_20091110T025507_017541_E108_N014",
   "type": "Feature"
}

Example: 11.6

Including fields at /search endpoint (GET).

results = api.search(
    method = 'GET',         
    max_items = 10,
    collections=['TropForest'],
    # fields = ['bbox','id','type','properties', 'geometry']
    fields = ['id','bbox']
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/search \
	--data-urlencode "collections=TropForest" \
	--data-urlencode "fields=+id,+bbox"
stac_json = results.item_collection_as_dict()
stac_json['features'][0]
{'bbox': [107.92515479, 13.91788998, 108.08990996, 14.07910052],
 'id': 'KO2_OTPF_KO2_MSC_2F_20091110T025507_20091110T025507_017541_E108_N014'}

Example: 11.7

Including fields at /search endpoint (POST).

results = api.search(
    method = 'POST',      
    max_items = 10,
    collections=['TropForest'],
    # fields = ['bbox','id','type','properties', 'geometry']
    fields = ['id', 'bbox']
)
curl -X POST https://catalog.maap.eo.esa.int/catalogue/search \
	--header 'Content-Type: application/json' \
	--data-raw '{
		"collections": ["TropForest"],
		"fields": "+id,+bbox"
	}'
stac_json = results.item_collection_as_dict()
stac_json['features'][0]
{'bbox': [107.92515479, 13.91788998, 108.08990996, 14.07910052],
 'id': 'KO2_OTPF_KO2_MSC_2F_20091110T025507_20091110T025507_017541_E108_N014'}

Example: 11.8

Including fields at /collections endpoint (GET).

results = api.collection_search(        
    max_collections = 10,
    # fields = ['bbox','id','type','properties', 'geometry']
    fields = ['id','license']
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/collections \
	--data-urlencode "fields=+id,+license"
data = results.collection_list_as_dict()
data['collections'][0]
{'license': 'various', 'id': 'Spire.live.and.historical.data'}

Further Reading#