Harmonized Landsat Sentinel available on Sentinel Hub

Harmonized Landsat Sentinel (HLS) is an initiative of NASA to create a Virtual Constellation of surface reflectance data (SR) from the Operational Land Imager (OLI) and the Multi-Spectral Instrument (MSI) onboard the remote sensing satellites Landsat 8-9 and Sentinel-2. The input products are Landsat 8-9 L1 and Sentinel-2 L1C top-of-atmosphere reflectance.

The data has been available globally since April 2013, has a resolution of 30 meters and a revisit time of 2-3 days. It is widely used to monitor changes in vegetation, land use and land cover over time.

For more information, see our documentation.

You can now also find the HLS collection in the EO Browser:

Explore it in the EO Browser yourself!

1 Like

2 posts were split to a new topic: How to detect roads

Hello @sdolenc,
Is it possible to access HLS data using python packages ?
I tried that, the Only DataCollection that I can reach as you can see in image…

cc @aghandour

We’ll add the collection to sentinelhub-py in the next days. In the mean time, you can have a look at the attached notebook how one can define the data collection by themselves:

from sentinelhub import DataCollection, Band, Unit, MosaickingOrder, to_utm_bbox

optical_bands = tuple(
    Band(name, (Unit.REFLECTANCE, Unit.DN), (np.int16))
    for name in ["CoastalAerosol", "Blue", "Green", "Red", "RedEdge1", "RedEdge2", 
                 "RedEdge3", "NIR_Broad", "NIR_Narrow", "SWIR1", "SWIR2", "WaterVapor", "Cirrus"]

termal_bands = tuple(
    Band(name, (Unit.BRIGHTNESS_TEMPERATURE, Unit.DN), (np.int16))
    for name in ["ThermalInfrared1", "ThermalInfrared2"]

QA_band = Band("QA", (Unit.DN), (np.uint8)),
angles = tuple(
    Band(name, (Unit.DEGREES, Unit.DN), (np.uint16))
    for name in ["VAA", "VZA", "SAA", "SZA"]

bands = optical_bands + termal_bands + QA_band + angles

hsl_collection = DataCollection.define(
    name="Harmonized LandSat Sentinel",

Afterwards, you can use it as any other data collection on Sentinel Hub:

hsl_evalscript = """
function setup() {
  return {
    input: ["Blue","Green","Red", "dataMask"],
    output: { bands: 4 }

function evaluatePixel(sample) {  
  return [sample.Blue, sample.Green, sample.Red, sample.dataMask];

request = SentinelHubRequest(

response = request.get_data()[0]

Good luck!

1 Like

Thank you! @batic, this is so helpful

Hello @batic,
I tried what you suggested with API request and it’s work, but with WCS request it’s still need a WFS ID… should I add something specific to avoid this error?

cc @aghandour

To use OGC, you will need a configuration ID, which you can find under your configuration:

  1. Go to the Configuration utility
  2. Select your configuration with HLS layers or create a new one
  3. In your configuration scroll down and select ID from the dropdown menu under Service endpoints on the left. This will give you your configuration ID.
  4. If you want to use WCS, you can select WCS from the dropdown menu instead to get the full link that you can use to import WCS layers.

2022-11-14 14_41_10-Dashboard

If you want to use WFS, you will aside from the configuration ID also need a HLS TYPENAME, which is DSS21. You can always check this using a getCapabilities request like so:


Note also that HLS is on services-uswest2 endpoint. You can always check the endpoints of collections here.

Thank you! @monja.sebela