Credentials#

Most of the catalog is open: 42 of 48 products have at least one route that needs no account. The rest need one of the providers below.

Credentials are checked before the first network request, so a missing account raises CredentialError naming the provider, the setup steps and any credential-free alternative for that product — it never surfaces as a 403 halfway through a download.

import easysnowdata as esd

esd.auth.status()          # which providers are configured, and how
esd.auth.login()           # interactive setup for what is missing
esd.auth.login("earthengine", project="my-gcp-project")

provider

required?

environment variables

files it reads

products

NASA Earthdata

yes, for those products

EARTHDATA_TOKEN, EARTHDATA_USERNAME, EARTHDATA_PASSWORD

~/.netrc

8

Earth Engine

yes, for those products

EARTHENGINE_TOKEN, GOOGLE_APPLICATION_CREDENTIALS, EE_PROJECT_ID, EARTHENGINE_PROJECT

~/.config/earthengine/credentials

14

Planetary Computer

optional

PC_SDK_SUBSCRIPTION_KEY

~/.planetarycomputer/settings.env

0

Planet

yes, for those products

PL_API_KEY, PL_AUTH_API_KEY, PL_AUTH_CLIENT_ID, PL_AUTH_CLIENT_SECRET, PL_AUTH_PROFILE

~/.planet.json, ~/.planet/

1

NVE HydAPI

yes, for those products

NVE_API_KEY

—

1

RIHMI АИСОРИ-М

yes, for those products

AISORI_USERNAME, AISORI_PASSWORD

—

0

Nothing here is written to a configuration file of ours: every provider is set up the way that service documents, and read from the environment or from the file that service already uses (decision Q10).

NASA Earthdata#

NASA Earthdata Login setup (once):

    import earthaccess
    earthaccess.login(persist=True)   # prompts; saves to ~/.netrc

or, in scripts and CI, set one of:
  - EARTHDATA_USERNAME + EARTHDATA_PASSWORD  (recommended for CI: earthaccess mints and
                                              renews its own token from these, so nothing
                                              expires)
  - EARTHDATA_TOKEN                          (generate at urs.earthdata.nasa.gov; user tokens
                                              expire after ~60 days, and an expired one is
                                              ignored in favour of the credentials above
                                              when they are also set)

A token alone does not reach NSIDC's on-premises archive (the RGI glacier
outlines): it answers with the login page. Those files are fetched with the
username and password (or the netrc), which may be set alongside a token.

Register for a free account at https://urs.earthdata.nasa.gov

Sign up: https://urs.earthdata.nasa.gov

Products with a route that needs it:

product

route

credential-free alternative

Harmonized Landsat Sentinel-2 (HLS) v2.0

lpcloud-cmr-stac

planetary-computer

MODIS snow cover (MOD10A1, MOD10A2, MOD10A1F)

nsidc

planetary-computer

Randolph Glacier Inventory (RGI 7.0 and 6.0)

nsidc

oggm-mirror

Sentinel-1 local incidence angle and layover/shadow mask

opera-static

dem

Sentinel-1 radiometrically terrain-corrected backscatter

opera-rtc-s1

planetary-computer

Sturm & Liston seasonal snow classification

nsidc

hosted-cog

UCLA snow reanalysis (Western US and High Mountain Asia)

nsidc, nsidc-hma

— none, this provider is the only way in

VIIRS snow cover (VJ110A1F, VNP10A1F)

nsidc

— none, this provider is the only way in

Earth Engine#

Google Earth Engine setup (once, in a terminal or notebook):

    import ee
    ee.Authenticate()                    # opens a browser; writes ~/.config/earthengine/credentials
    earthengine set_project <project>    # or set EE_PROJECT_ID; Earth Engine requires a Cloud project

In scripts and CI set EARTHENGINE_TOKEN to a service-account key JSON (raw or
base64), or point GOOGLE_APPLICATION_CREDENTIALS at one, and set EE_PROJECT_ID
when the key does not carry a project.

Sign up at https://earthengine.google.com

Sign up: https://earthengine.google.com

Products with a route that needs it:

product

route

credential-free alternative

USGS 3DEP seamless DEM (10 m / 30 m, United States)

gee

planetary-computer

ALOS World 3D-30m (AW3D30)

gee

planetary-computer, opentopography

CHILI (Continuous Heat-Insolation Load Index)

gee

— none, this provider is the only way in

Copernicus DEM GLO-30 / GLO-90

gee

planetary-computer, earth-search, opentopography

ERA5 / ERA5-Land reanalysis

gee

arco-era5-gcs

Forest cover fraction (CGLS-LC100)

gee

zenodo

USGS Watershed Boundary Dataset (HUC)

gee

usgs-wbd

HydroBASINS / BasinATLAS

gee

figshare-basinatlas, hydrosheds

NASADEM (SRTM reprocessed)

gee

planetary-computer, opentopography

National Land Cover Database (NLCD)

gee-annual, gee

— none, this provider is the only way in

Sentinel-1 local incidence angle and layover/shadow mask

gee

dem

Sentinel-1 radiometrically terrain-corrected backscatter

gee

planetary-computer

SNODAS snow water equivalent and snow depth

gee-climate-engine

nsidc

SRTM GL1 v3 (30 m)

gee

opentopography

Planetary Computer#

Optional

Everything works anonymously; credentials only raise the rate limits.

The Planetary Computer needs no account. To raise the anonymous rate limits,
set PC_SDK_SUBSCRIPTION_KEY (or write it to ~/.planetarycomputer/settings.env
with `planetarycomputer configure`).

Sign up: https://planetarycomputer.microsoft.com

No catalog product needs it today.

Planet#

Planet setup (needs a Planet account with data access, e.g. through the
Education & Research program):

    pip install planet          # or conda install -c conda-forge planet
    planet auth login           # OAuth2 in the browser; saves a session under ~/.planet/

or, in scripts and CI, set PL_API_KEY (legacy API key from
https://www.planet.com/account/) or PL_AUTH_CLIENT_ID + PL_AUTH_CLIENT_SECRET
(OAuth2 machine-to-machine client). Every order spends quota.

Sign up: https://www.planet.com/account/

Products with a route that needs it:

product

route

credential-free alternative

PlanetScope surface reflectance (Planet Labs)

orders-api, data-api

— none, this provider is the only way in

NVE HydAPI#

NVE HydAPI setup: request a free API key at https://hydapi.nve.no/UserDocumentation/
and set NVE_API_KEY.

Sign up: https://hydapi.nve.no/UserDocumentation/

Products with a route that needs it:

product

route

credential-free alternative

Norwegian snow pillows and snow-depth stations (NVE HydAPI)

nve

— none, this provider is the only way in

RIHMI АИСОРИ-М#

RIHMI АИСОРИ-М setup: register for a free account at
http://aisori-m.meteo.ru/waisori/registration.xhtml (no confirmation step),
then set AISORI_USERNAME and AISORI_PASSWORD.

Sign up: http://aisori-m.meteo.ru/waisori/registration.xhtml

No catalog product needs it today.

In CI#

The repository’s scheduled workflows read the same environment variables from GitHub secrets, which is why a credentialed gallery example or live test simply skips — rather than failing — when a secret is absent:

secret

used by

EARTHDATA_USERNAME + EARTHDATA_PASSWORD (EARTHDATA_TOKEN optional)

live tests, health probes, scheduled docs build

EARTHENGINE_TOKEN

live tests, health probes, scheduled docs build

PL_API_KEY

Planet live tests and the PlanetScope gallery example

NVE_API_KEY

the NVE station live test and gallery example

AISORI_USERNAME + AISORI_PASSWORD

the RIHMI АИСОРИ-М live test and gallery example

Pull-request builds get none of them, by design: they run the offline test tiers and the credential-free subset of the gallery.

Earthdata user tokens expire after about 60 days, which is how a green pipeline turns red for no reason of its own. The workflows therefore hold the username and password: earthaccess mints and renews a token from them on every run, and if an EARTHDATA_TOKEN secret is also set and Earthdata Login rejects it, the provider logs a warning and falls back to the username and password rather than failing.