{"schema_version":"1.0","audience":"automated agents and LLMs accessing this Zarr store","domain":"ecosystem","access":{"open":"xarray.open_zarr(store, group='_combined/fluxnet_dd', consolidated=True)","combined_view":"_combined/fluxnet_dd","available_views":["_combined/fluxnet_dd"],"layout":"station × time panel — dims (station, time); latitude/longitude are 1-D coords on station","station_dim":"station","time_coord":"time","lat_coord":"latitude","lon_coord":"longitude","bbox_filter":"select station whose latitude/longitude fall in range, then slice time","entity_groups":"top-level groups not starting with '_' are individual stations/sites/cruises; '_combined' holds cross-entity views","list_entities":"listing groups is a ZARR call, not an xarray one: zarr.open_group(store, mode='r').group_keys() returns the top-level group names. An xarray Dataset has no .group_keys() and no .groups — reaching for either raises AttributeError. List first, then read one with xarray.open_zarr(store, group=<id>).","entity_ids":"FLUXNET-style site code — e.g. SE-Htm, DE-Hai, AR-Bal. Multi-network (ICOS, AmeriFlux, and others), so the set is far larger than the ICOS ecosystem store's","entity_views":["<SITE>","<SITE>/fluxnet_dd","<SITE>/fluxnet_ww","<SITE>/fluxnet_mm","<SITE>/fluxnet_yy","<SITE>/era5_hh","<SITE>/era5_dd","<SITE>/era5_ww","<SITE>/era5_mm","<SITE>/era5_yy"],"open_entity":"xarray.open_zarr(store, group='SE-Htm/fluxnet_mm', consolidated=True)","aggregation_rule":"a monthly question opens fluxnet_mm, a yearly one fluxnet_yy — never open a finer group and resample, the aggregated groups carry the QC fractions and are far smaller","era5":"each site also carries ERA5 reanalysis at the same five resolutions under '<SITE>/era5_*'; era5_hh is half-hourly and large — take a coarser one unless you need it","list_entities_example":"import zarr; keys = list(zarr.open_group(store, mode='r').group_keys()); sites = [g for g in keys if not g.startswith('_')]   # 781 site codes; '_combined' holds the cross-site views. bind group_keys() with list(): it is a generator","entity_vs_combined":"for a single named entity open its own group; use the combined view only for cross-entity work. Do NOT locate a named entity by bounding box — match it by id"},"conventions":{"metadata":"CF-1.12, ACDD-1.3 with a canonical cross-store attribute vocabulary","identity_attrs":["latitude","longitude","elevation","station_id","station_name","network","country","source_doi","citation","collection_doi","license","license_url"],"quality_control":"<var>_QC is dtype-aware: in the root (hourly/half-hourly) groups it is an INTEGER flag where only 0 and 1 are good (keep <= 1); in the aggregated DD/WW/MM/YY groups it is a FLOAT fraction in [0,1] where good is > 0.3.","reading_string_arrays":"take .values before iterating: for a coord like 'cruise' or a byte-flag array, iterating the DataArray yields 0-d DataArrays, so .startswith()/.decode() fail and a boolean mask can come out silently all-False. Use arr.values (or arr[:].values) first.","carbon_flux":"reference-slice fluxes exposed flat in the combined views: NEE_VUT_REF, GPP_NT_VUT_REF, GPP_DT_VUT_REF, RECO_NT_VUT_REF, RECO_DT_VUT_REF; the full ustar_threshold × nee_variant cube remains in the per-site groups"},"discovery":{"variable_catalog":"variable_catalog.json (sibling of the store directory)","api":"ICOS zarr proxy — GET /variables, /variables/{id}, /query?id=..&station=..&cruise=..&lat_min=..&lat_max=..&lon_min=..&lon_max=..&start=..&end=..&apply_qc=true ; station/cruise ids are CASE-SENSITIVE, end is EXCLUSIVE, apply_qc DROPS rows the store flags bad; for WOCE stores it keeps flag 2 AND the -1 'no source flag' rows, whose values may be NaN — filter *_QC == 2 yourself (unknown/unusable filters answer 400 naming the problem); machine-readable contract at /openapi.json","croissant":"fluxnet-shuttle.croissant.jsonld (sibling of the store directory)","croissant_url":"ICOS zarr proxy: GET /fluxnet-shuttle.zarr/croissant — same Croissant, also linked (with @id) from the proxy-root schema.org DataCatalog when fetched with Accept: application/ld+json","collection_doi":""},"docs":["CONVENTIONS.md","CONSUMER_MIGRATION.md"]}