{"schema_version":"1.0","audience":"automated agents and LLMs accessing this Zarr store","domain":"ecosystem","access":{"open":"xarray.open_zarr(store, group='BE-Bra/fluxes', consolidated=True)   # the store root holds no arrays: always open one station's product group","combined_view":"","available_views":[],"layout":"one group per station, four product sub-groups (fluxes, meteo, meteosens, auxdata), each a wide half-hourly table on dim (time) with time_end beside it; there is NO cross-station panel and no station dimension","station_dim":"","time_coord":"time","lat_coord":"latitude","lon_coord":"longitude","bbox_filter":"not available: there is no cross-station panel and the station groups carry no coordinates — pick a station by its site code (the ICOS ecosystem station list, or icos-fluxnet's per-site latitude/longitude)","entity_groups":"every top-level group is an individual station (FLUXNET site code); there is no '_combined' group","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 site code — e.g. SE-Htm, DE-Hai, BE-Bra. Same string as the ICOS ecosystem station URI suffix after 'ES_' and as the station id in icos-fluxnet","entity_views":["<SITE>/fluxes","<SITE>/meteo","<SITE>/meteosens","<SITE>/auxdata"],"open_entity":"xarray.open_zarr(store, group='BE-Bra/fluxes', consolidated=True)","list_entities_example":"import zarr; sites = list(zarr.open_group(store, mode='r').group_keys())   # every top-level group is a site code; there is no '_combined'. list() binds group_keys(): it is a generator","product_rule":"open only the product a question needs — fluxes: the half-hourly eddy-covariance fluxes (NEE, FC, H, LE, ...) with the ETC processing-test flags; meteo: the half-hourly meteorology per variable with <VAR>_N sample counts and <VAR>_SD spreads; meteosens: the same meteorology per SENSOR as <VAR>_<h>_<v>_<r> with _N and _SE, up to ~1,200 columns at one station; auxdata: instrument and processing diagnostics. Which columns a station carries depends on its instruments — read the group's array names, do not assume icos-fluxnet's","entity_vs_combined":"always open the named station's own product group; there is no combined view. Do NOT locate a station by bounding box — match it by site code","time_axes":"time and time_end are int64 seconds since 1970-01-01 (xarray decodes them); each product group holds the newest ETC NRT object for that station and product and is replaced whole every night, so a series may start later than the station's release data in icos-fluxnet and always ends near today","citation_location":"near-real-time data carry no DOI and no citation: there is no collection_doi, no per-site citation and no source_doi anywhere in this store. Cite ICOS ERIC and the station; for citable data use icos-fluxnet, whose per-site groups carry citation and source_doi"},"conventions":{"metadata":"CF-1.12, ACDD-1.3 with a canonical cross-store attribute vocabulary","identity_attrs":"this store carries NONE of the cross-store identity attributes: a station group has no .zattrs at all and a product group only its arrays. The site code IS the identity; latitude/longitude/elevation/station_name for it are in icos-fluxnet's per-site groups or the ICOS station pages","quality_control":"no <VAR>_QC here. The fluxes product carries the ETC processing tests as <VAR>_<TEST>_FLAG (EddyPro's statistical tests — a non-zero flag marks a failed test) and <VAR>_<TEST>_STAT; meteo carries <VAR>_N sample counts and <VAR>_SD spreads, meteosens <VAR>_N and <VAR>_SE; every column, flags and counts included, is float32 with -9999 already NaN. apply_qc has no flag to act on in this store","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":"the fluxes product carries the ETC near-real-time eddy-covariance fluxes under their ETC names (NEE, FC, H, LE, SC, ...) with the processing-test flags beside them — there are no VUT_REF reference slices, no ustar_threshold × nee_variant cube and no gap-filled or partitioned (GPP, RECO) series here; those are icos-fluxnet's"},"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":"icos-eco-nrt.croissant.jsonld (sibling of the store directory)","croissant_url":"ICOS zarr proxy: GET /icos-eco-nrt.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"]}