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/'
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/eo:platform',
   'type': 'application/json',
   'title': 'Collections by platform'},
  {'rel': 'child',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/concepts/earthtopics',
   'type': 'application/json',
   'title': 'Earth Topics'},
  {'rel': 'child',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/concepts/instruments',
   'type': 'application/json',
   'title': 'ESA Instruments'},
  {'rel': 'child',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/concepts/platforms',
   'type': 'application/json',
   'title': 'ESA Platforms'},
  {'rel': 'child',
   'href': 'https://catalog.maap.eo.esa.int/catalogue/series/eo:organisationName',
   'type': 'application/json',
   'title': 'Collections by organisation'},
  {'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',
  'https://api.stacspec.org/v1.0.0/item-search#sort',
  'https://api.stacspec.org/v1.0.0/ogcapi-features#sort',
  'http://www.opengis.net/spec/cql2/1.0/conf/cql2-text',
  'http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2'],
 '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/series/items/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?parentIdentifier=EOP%3AESA%3AMAAP&httpAccept=application/ld%2Bjson",
         "type": "application/ld+json",
         "title": "JSON-LD metadata"
      },
      {
         "rel": "alternate",
         "href": "https://catalog.maap.eo.esa.int/catalogue/collections/BiomassLevel1a?parentIdentifier=EOP%3AESA%3AMAAP&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?parentIdentifier=EOP%3AESA%3AMAAP&httpAccept=application/ld%2Bjson;profile=http://data.europa.eu/930/",
         "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"
   ],
   "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"
      ],
      "instruments": [
         "P-SAR"
      ],
      "platform": [
         "Biomass"
      ]
   }
}
# 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 0x0000029FCAF860C0>
temporal extent	: <pystac.collection.TemporalExtent object at 0x0000029FB1D6E150>

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",
   "https://api.stacspec.org/v1.0.0/item-search#sort",
   "https://api.stacspec.org/v1.0.0/ogcapi-features#sort",
   "http://www.opengis.net/spec/cql2/1.0/conf/cql2-text",
   "http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2"
]

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
13 classifiedAs string uri
3 collection string -
2 description string -
10 id string -
7 instruments string -
9 offering string -
5 otherConstraint string -
6 platform string -
0 processing:level string -
12 providers string -
1 sci:doi string -
4 title string -
11 updated string date-time
8 useLimitation string -
{
   "$schema": "https://json-schema.org/draft/2020-12/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"
         ]
      },
      "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-02d6cbf",
            "10.5270/esa-1rtogy6",
            "10.5270/esa-2d07033",
            "10.5270/esa-2eb13ab",
            "10.5270/esa-4427c33",
            "10.5270/esa-5c8sffb",
            "10.5270/esa-6615b19",
            "10.5270/esa-6mxo3sr",
            "10.5270/esa-6riial9",
            "10.5270/esa-79a176b",
            "10.5270/esa-7c37033",
            "10.5270/esa-7nc8pjp",
            "10.5270/esa-852456e",
            "10.5270/esa-86e26dc",
            "10.5270/esa-8sfucze",
            "10.5270/esa-8xb8scs",
            "10.5270/esa-a36265c",
            "10.5270/esa-a681fe7",
            "10.5270/esa-c26d993",
            "10.5270/esa-d69ulft",
            "10.5270/esa-e3e68ff",
            "10.5270/esa-f2h3ory",
            "10.5270/esa-ht6sxz7",
            "10.5270/esa-i73gc4g",
            "10.5270/esa-iboli84",
            "10.5270/esa-iwr5ohr",
            "10.5270/esa-j340roh",
            "10.5270/esa-jfhe2um",
            "10.5270/esa-l8g67jw",
            "10.5270/esa-otce9j2",
            "10.5270/esa-qoe849q",
            "10.5270/esa-xh7orts",
            "10.5270/esa-xxpt0lc",
            "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.5285/bf535053562141c6bb7ad831f5998d77",
            "10.57780/al1-36b29e9",
            "10.57780/al1-5f3877f",
            "10.57780/eca-224d95c",
            "10.57780/eca-5828141",
            "10.57780/en1-2d5de29",
            "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/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-857c3d7",
            "10.57780/sm1-fbf89e0"
         ]
      },
      "description": {
         "description": "Free text search term",
         "title": "Query",
         "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:DATASPACE",
            "EOP:NASA:CMR",
            "TC_GET_160"
         ]
      },
      "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",
            "COSMO-SkyMed Second Generation",
            "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-1",
            "Landsat-2",
            "Landsat-3",
            "Landsat-4",
            "Landsat-5",
            "Landsat-7",
            "Landsat-8",
            "Landsat-9",
            "MOS-1",
            "MOS-1B",
            "Metop",
            "NOAA POES",
            "NigeriaSat-1",
            "ODIN",
            "OceanSat-2",
            "OrbView-2",
            "PAZ",
            "PROBA-1",
            "PROBA-V",
            "PlanetScope",
            "Pleiades",
            "Pleiades Neo",
            "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-1",
            "Sentinel-2",
            "SkySat",
            "Spire",
            "Swarm",
            "TERRA",
            "TanDEM-X",
            "TanSat",
            "TerraSAR-X",
            "UK-DMC-1",
            "Vision-1",
            "WorldView Legion",
            "WorldView-1",
            "WorldView-2",
            "WorldView-3",
            "WorldView-4"
         ]
      },
      "instruments": {
         "description": "The instrument (e.g. MERIS, AATSR, ASAR, HRVIR. SAR)",
         "title": "Instrument",
         "type": "string",
         "enum": [
            "AATSR",
            "ACC",
            "ACE-FTS",
            "ACGS",
            "AIRSAFE",
            "ALADIN",
            "ALS",
            "AMI/SAR",
            "AMI/Scatterometer",
            "ASAR",
            "ASM",
            "ATLID",
            "ATSR-1",
            "ATSR-2",
            "AVHRR",
            "AVNIR-2",
            "Active Remote Sensing",
            "AwiFS",
            "BBR",
            "BGI",
            "C-SAR",
            "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",
            "OLI",
            "OLI-2",
            "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",
            "SMR",
            "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",
            "TIRS-2",
            "TM",
            "TSX-1",
            "VFM",
            "VGT",
            "VTIR",
            "WAF-P",
            "WV110",
            "WV60",
            "WorldView Legion Camera",
            "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 available on eo cat",
            "data service request",
            "eo sign in authentication",
            "eo sign in authentication (open)",
            "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",
            "external data",
            "fast registration with approval",
            "fast registration with approval (restrained)",
            "fast registration with immediate access",
            "open access",
            "open data",
            "products are distributed under a cc-by-4.0 license unless specified otherwise (see license conditions of individual datasets). https://spdx.org/licenses/cc-by-4.0",
            "products are distributed under a cc-by-4.0 license. https://spdx.org/licenses/cc-by-4.0",
            "project proposal",
            "project proposal (restrained)",
            "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",
            "utilisation of this data is subject to esa's earth observation terms and conditions https://earth.esa.int/eogateway/documents/20142/1560778/esa-third-party-missions-terms-and-conditions.pdf",
            "world wide"
         ]
      },
      "offering": {
         "description": "Related service offering",
         "title": "Offering",
         "type": "string",
         "enum": [
            "describecoverage",
            "getcapabilities",
            "getcoverage",
            "getmap",
            "gettile",
            "wcs",
            "wfs",
            "wms",
            "wmts"
         ]
      },
      "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",
            "ESA/ESRIN",
            "NASA NSIDC DAAC",
            "Spacebel",
            "University of Bristol"
         ]
      },
      "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
11 completionTimeFromAscendingNode number -
16 created string date-time
2 eofeos:global_coverage_id string -
5 eofeos:major_cycle_id string -
25 eofeos:mission_phase string -
22 eofeos:orbit_drift_flag boolean -
0 eofeos:repeat_cycle_id string -
10 eopf:datatake_id string -
24 eopf:instrument_mode string -
30 frame string -
12 id string -
6 instruments string -
4 platform string -
17 polarisationChannels string -
23 processing:datetime string date-time
1 processing:facility string -
15 processing:level string -
13 processing:software string -
26 processingMode string -
29 product:acquisition_type string -
3 product:type string -
8 productionStatus string -
20 sar:observation_direction string -
21 sar:polarizations string -
27 sat:absolute_orbit integer -
7 sat:orbit_state string -
9 startTimeFromAscendingNode number -
18 swathIdentifier string -
14 track string -
28 updated string date-time
19 version string -
{
   "$schema": "https://json-schema.org/draft/2020-12/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.  e.g. BIOMASS uses \"1\" to \"8\" during TOM phase, \"1\" to \"3\" during INT phase, \"DR\" during orbit drift, \"NA\" when not applicable (e.g. during COM phase).",
         "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. E.g. BIOMASS uses \"1\" to \"6\". \"1\" for the Tomographic Phase (TOM), \"1\" to \"6\" for the Interferometric Phase (INT), \"NA\" when not applicable (e.g. during COM phase).",
         "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. E.g. BIOMASS uses \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\" during TOM and INT phases.",
         "title": "Major cycle id",
         "type": "string",
         "enum": [
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7"
         ]
      },
      "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. Examples: for S1, datatake_id = 12032; for S2, datatake_id = GS2A_20231215T103431_044292_N05.10",
         "title": "Data take id",
         "type": "string"
      },
      "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"
         ]
      },
      "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"
         ]
      },
      "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. Example: false.",
         "title": "Orbit drift flag",
         "type": "boolean",
         "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, e.g. BIOMASS uses \"COMMISSIONING\", \"TOMOGRAPHIC\" and \"INTERFEROMETRIC\".",
         "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"
}

CQL filter expressions#

The STAC interface supports the filter parameter and filter expressions in cql-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', 'title']]
id title
0 MER.RR__2P Envisat MERIS Reduced Resolution Geophysical P...
1 ENVISAT.MIP.NL__2P Envisat MIPAS L2 - Temperature, pressure and a...
2 MER_FRS_2P Envisat MERIS Full Resolution - Level 2 [MER_F...
3 ENVISAT.MIP.NL__1P Envisat MIPAS L1 - Geo-located and calibrated ...
4 MER_FRS_1P Envisat MERIS Full Resolution - Level 1 [MER_F...
5 MER.RR__1P Envisat MERIS Reduced Resolution - Level 1 [ME...

Example: 8.2

CQL filter for granule search with comparison operators. Search granules with cloudCover 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 = "cloudCover >= 10 and cloudCover < 15"   
)
curl -X GET -G https://catalog.maap.eo.esa.int/catalogue/search \
	--data-urlencode "collections=IKONOS.ESA.archive" \
	--data-urlencode "filter=cloudCover >= 10 and cloudCover < 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/e2cee8074d96efdc8a7e2339b8ac3ad0cc024042e85c9ac9071f96f3f4ee982c.png

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: 9.1

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

verify_ssl = True
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, verify=bool(verify_ssl))
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 alos.prism.l1c.european.coverage.cloud.free ALOS PRISM L1C European Coverage Cloud Free [ALOS-1] [PRISM]
1 ALOS_PRISM_L1B Alos PRISM L1B [ALOS-1] [PRISM]
2 alos-prism-l1c ALOS PRISM L1C [ALOS-1] [PRISM]
3 ALOS.PALSAR.FBS.FBD.PLR.products ALOS PALSAR products [ALOS-1] [PALSAR]
4 ALOSIPY ALOS PALSAR International Polar Year Antarctica [ALOS-1] [PALSAR]
5 ALOS Alos African Coverage ESA archive [ALOS-1] [PRISM]
6 ALOS.AVNIR-2.L1C ALOS AVNIR-2 L1C [ALOS-1] [AVNIR-2]
7 TropForest TropForest- ALOS, GEOSAT-1 & KOMPSAT-2 optical... [ALOS-1, GEOSAT-1, KOMPSAT-2] [AVNIR-2, SLIM6, MSC]
8 ADAM.Surface.Reflectance.Database ADAM Surface Reflectance Database v4.0 [TERRA, AQUA, QuikSCAT, OrbView-2] [MODIS, MODIS, SeaWinds, SeaWiFS]
9 NASA_OMI Aura OMI complete NASA dataset [Aura] [OMI]

Example: 9.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, verify=bool(verify_ssl))
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 SCIAMACHYLevel2LimbOzone [Envisat] [SCIAMACHY]
1 SCIAMACHYLevel1 [Envisat] [SCIAMACHY]
2 SCIAMACHYLevel2 [Envisat] [SCIAMACHY]
3 FDRforRadiometry [ERS-1, ERS-2, Envisat] [MWR, MWR, MWR]
4 TDPforLandice [ERS-1, ERS-2, Envisat] [MWR, MWR, MWR]
5 TDPforInlandWater [ERS-1, ERS-2, Envisat] [MWR, MWR, MWR]
6 TDPforOceanWaves [ERS-1, ERS-2, Envisat] [MWR, MWR, MWR]
7 FDRforAltimetry [ERS-1, ERS-2, Envisat] [MWR, MWR, MWR]
8 TDPforOceanCoastalTopography [ERS-1, ERS-2, Envisat] [MWR, MWR, MWR]
9 TDPforAtmosphere [ERS-1, ERS-2, Envisat] [MWR, MWR, MWR]
10 TDPforSeaice [Envisat, ERS-1, ERS-2] [MWR, MWR, MWR]
11 ENVISAT.MIP.NL__2P [Envisat] [MIPAS]
12 ENVISAT.MIP.NL__1P [Envisat] [MIPAS]
13 MER.RR__2P [Envisat] [MERIS]
14 MER_FRS_2P [Envisat] [MERIS]
15 MER_FRS_1P [Envisat] [MERIS]
16 MER.RR__1P [Envisat] [MERIS]
17 ENVISAT.GOM.NL__2P [Envisat] [GOMOS]
18 NetCDF.GOMOS_UFP [Envisat] [GOMOS]
19 ENVISAT.GOM.TRA_1P [Envisat] [GOMOS]
20 ENVISAT.GOM.LIM_1P [Envisat] [GOMOS]
21 NetCDF.GOMOS_UFP_Gridded [Envisat] [GOMOS]
22 ENVISAT.GOM_EXT_2P [Envisat] [GOMOS]
23 FDRforAtmosphericCompositionATMOSL1B [Envisat, ERS-2] [SCIAMACHY, GOME]
24 ENVISAT.DOR.VOR_AX [Envisat] [DORIS]
25 ENVISAT.DOR.DOP_1P [Envisat] [DORIS]
26 ENVISAT.ASA.IM__0P [Envisat] [ASAR]
27 ENVISAT.ASA.WSS_1P [Envisat] [ASAR]
28 ENVISAT.ASA.WVS_1P [Envisat] [ASAR]
29 ENVISAT.ASA.APS_1P [Envisat] [ASAR]

Example: 9.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, verify=bool(verify_ssl))
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 Oceans 2025-04-24T10:24:00Z
2 Swarm Geodesy/Gravity 2025-04-24T10:24:00Z
3 Swarm Level 2 longterm 2025-04-24T10:24:00Z
4 SciSat-1: ACE-FTS and MAESTRO 2025-04-24T10:24:01Z
5 TANSAT AGCS and CAPI products 2025-04-24T10:24:01Z
6 Odin OSIRIS data products 2025-04-24T10:24:02Z
7 ERS-2 GOME Total Column Amount of Trace Gases ... 2025-04-24T10:24:02Z
8 ERS-2 GOME Spectral Product L1 2025-04-24T10:24:02Z
9 Envisat SCIAMACHY Level 2 [SCI_____2P] 2025-04-24T10:24:02Z
10 Envisat MIPAS L2 - Temperature, pressure and a... 2025-04-24T10:24:03Z
11 Envisat GOMOS Level 1b - Limb spectra [GOM_LIM... 2025-04-24T10:24:03Z
12 GOME Total Column Water Vapour Climate product 2025-04-24T10:24:03Z
13 Vision-1 full archive and tasking 2025-04-24T10:24:04Z
14 SPOT-6 to 7 full archive and tasking 2025-04-24T10:24:04Z

Example: 9.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, verify=bool(verify_ssl))
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: 9.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, verify=bool(verify_ssl))
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: 9.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: 9.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, verify=bool(verify_ssl))
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: 9.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, verify=bool(verify_ssl))
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: 9.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, verify=bool(verify_ssl))
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_20170602T220959_20170602T221018... 3
1 BIO_S1_STA__1M_20170602T221035_20170602T221056... 3
2 BIO_S1_STA__1M_20170602T221016_20170602T221037... 3
3 BIO_S1_STA__1M_20170602T221035_20170602T221056... 3
4 BIO_S1_STA__1M_20170602T221035_20170602T221056... 3
5 BIO_S1_STA__1M_20170602T221054_20170602T221115... 3
6 BIO_S1_STA__1M_20170602T221054_20170602T221115... 3
7 BIO_S1_STA__1M_20170602T221016_20170602T221037... 3
8 BIO_S1_STA__1M_20170602T221054_20170602T221115... 3
9 BIO_S1_STA__1M_20170602T220959_20170602T221018... 3
10 BIO_S1_STA__1M_20170602T220959_20170602T221018... 3
11 BIO_S1_STA__1M_20170602T221016_20170602T221037... 3
12 BIO_S1_STA__1M_20170602T221016_20170602T221037... 3
13 BIO_S1_STA__1M_20170602T220959_20170602T221018... 3
14 BIO_S1_STA__1M_20170602T221035_20170602T221056... 3
15 BIO_S1_STA__1M_20170602T221054_20170602T221115... 3
16 BIO_S1_STA__1M_20170530T221051_20170530T221112... 2
17 BIO_S1_STA__1M_20170530T220956_20170530T221015... 2
18 BIO_S1_STA__1M_20170530T221013_20170530T221034... 2
19 BIO_S1_STA__1M_20170530T221032_20170530T221053... 2

Further Reading#