Guide API Observatoire — construire un front

Documentation destinée aux développeurs front qui consomment l'API de l'Observatoire EPTB Sèvre Nantaise pour construire de nouvelles interfaces (carte, graphique, légende, tableaux).

Environnements : les URLs d'exemple ci-dessous sont relatives — préfixez-les par l'hôte de l'environnement consulté : https://obs21-bdt.sevre-nantaise.com (base de test pour la banque des territoires), https://obs21.sevre-nantaise.com (production). Dans la doc HTML (/api-doc/), le bouton « copier » reconstruit l'URL absolue du site consulté ; les exemples JSON sont régénérés automatiquement (contre la base locale de dev) aux balises GENERATED:id du template via php doc/api/generate.php.


1. Concepts

Concept Description Exemple
dataset jeu de données observatoire qualite_eaux_surf_support_eau
id_territoire territoire interrogé 1 = EPTB Sèvre Nantaise
processing type de traitement des données (« représentation ») respect-objectif, datas, classes… (liste en annexe)
ids_parametres identifiants de paramètres (nitrates, pesticides…) 1340 = Nitrates
ids_objectifs identifiants d'objectifs de qualité associés aux paramètres 6190
ids_objets_geo stations / points de mesure 04145000
id_filtre_territoire filtre de territoire : restreint les stations à un sous-ensemble (département, EPCI…) t1|qualite_eaux_surf_support_eau|epci|200067635
id_carte carte configurée (centre, zoom, couches de fond) 1
date_debut / date_fin bornes de dates des données 2025-01-01 / 2025-12-31
output_options enrichissements de la réponse (labels, géométrie, légende…) with_labels,with_geometry_geojson_for_map

Remarques :

1.1 Vue d'ensemble des données

flowchart LR
    T["v_conf_territories<br/>territoire (id_territoire)"]
    TOD["v_conf_territory_obs_datasets<br/>datasets du territoire"]
    DS["dataset<br/>ex. qualite_eaux_surf_support_eau"]
    P["paramètres<br/>ids_parametres (1340 = Nitrates)"]
    O["objectifs / indicateurs<br/>ids_objectifs (6190)"]
    F["v_conf_territory_filters<br/>filtres (id_filtre_territoire)"]
    S["obs_searches<br/>découverte : id_parametre + id_conf_objectif"]
    D["obs_datasets<br/>processing × output_options"]

    T --> TOD
    TOD --> DS
    DS --> P
    P --> O
    T --> F
    S -.->|"renvoie"| P
    S -.->|"renvoie"| O
    S -.->|"renvoie"| D
    F -.->|"restreint les stations"| D
    T --> D
    DS --> D

1.2 L'entrée obsSearch

GET /api/v2/obs_searches.json?id_territoire=1&search_entry_parameter_string_part=phosph&ids_datasets=qualite_eaux_surf_support_eau&search_limit=10

Recherche les paramètres dont le nom contient le fragment « phosph » pour le dataset : source des listes de choix paramètre/objectif du front.

[
    {
        "id_parametre": 1238,
        "parametre": "Phosphamidon",
        "unite": "µg/L",
        "dataset": "qualite_eaux_surf_support_eau",
        "obsDatasetMetadata": {
            "title": "Qualité des eaux superficielles (support eau brute) - Hub'eau (Naïades)",
            "history": {
                "lastUpdate": "2026-09-10"
            },
            "sources": [
                {
                    "producers": [
                        {
                            "producer_url": "",
                            "producer_logo": "",
                            "producer_name": "AE"
                        }
                    ],
                    "source_url": "https://hubeau.eaufrance.fr/page/api-qualite-cours-deau",
                    "source_logo": "/images/icones/hubeau-api-quality.svg",
                    "source_name": "hubeau, Qualité des cours d'eau"
                }
            ],
            "descripteur": "AR",
            "description": "osur pc paramètre seulement sur le support eau brute"
        },
        "ids_objectifs": [
            {
                "id_conf_objectif": "11498",
                "value": "0.1",
                "inf_sup": "<=",
                "reference": "SAGE SN 2015",
                "objectiveCompliancyFunction": "100PourcentDuTemps",
                "default_args": [],
                "processing": "respect-objectif"
            }
        ]
    },
    {
        "id_parametre": 7834,
        "parametre": "Gomphosphaeria",
        "unite": null,
        "dataset": "qualite_eaux_surf_support_eau",
        "obsDatasetMetadata": {
            "title": "Qualité des eaux superficielles (support eau brute) - Hub'eau (Naïades)",
            "history": {
                "lastUpdate": "2026-09-10"
            },
            "sources": [
                {
                    "producers": [
                        {
                            "producer_url": "",
                            "producer_logo": "",
                            "producer_name": "AE"
                        }
                    ],
                    "source_url": "https://hubeau.eaufrance.fr/page/api-qualite-cours-deau",
                    "source_logo": "/images/icones/hubeau-api-quality.svg",
                    "source_name": "hubeau, Qualité des cours d'eau"
                }
            ],
            "descripteur": "AR",
            "description": "osur pc paramètre seulement sur le support eau brute"
        },
        "ids_objectifs": []
    },
    {
        "id_parametre": 1349,
        "parametre": "Polyphos
  … (réponse tronquée)

GET /api/v2/obs_searches.json?id_territoire=1&ids_datasets=qualite_eaux_surf_support_eau&search_limit=10

Sans fragment de recherche : premiers paramètres du dataset (search_limit) — source des listes de choix paramètre/objectif du front.

[
    {
        "id_parametre": 7597,
        "parametre": "10,11-dihydro-10,11-dihydroxy-carbamazépine",
        "unite": "µg/L",
        "dataset": "qualite_eaux_surf_support_eau",
        "obsDatasetMetadata": {
            "title": "Qualité des eaux superficielles (support eau brute) - Hub'eau (Naïades)",
            "history": {
                "lastUpdate": "2026-09-10"
            },
            "sources": [
                {
                    "producers": [
                        {
                            "producer_url": "",
                            "producer_logo": "",
                            "producer_name": "AE"
                        }
                    ],
                    "source_url": "https://hubeau.eaufrance.fr/page/api-qualite-cours-deau",
                    "source_logo": "/images/icones/hubeau-api-quality.svg",
                    "source_name": "hubeau, Qualité des cours d'eau"
                }
            ],
            "descripteur": "AR",
            "description": "osur pc paramètre seulement sur le support eau brute"
        },
        "ids_objectifs": []
    },
    {
        "id_parametre": 7947,
        "parametre": "10:2 FTCA",
        "unite": "µg/L",
        "dataset": "qualite_eaux_surf_support_eau",
        "obsDatasetMetadata": {
            "title": "Qualité des eaux superficielles (support eau brute) - Hub'eau (Naïades)",
            "history": {
                "lastUpdate": "2026-09-10"
            },
            "sources": [
                {
                    "producers": [
                        {
                            "producer_url": "",
                            "producer_logo": "",
                            "producer_name": "AE"
                        }
                    ],
                    "source_url": "https://hubeau.eaufrance.fr/page/api-qualite-cours-deau",
                    "source_logo": "/images/icones/hubeau-api-quality.svg",
                    "source_name": "hubeau, Qualité des cours d'eau"
                }
            ],
            "descripteur": "AR",
            "description": "osur pc paramètre seulement sur le support eau brute"
        },
        "ids_objectifs": [
            {
                "id_conf_objectif": "9974",
                "value": "0.007",
                "inf_sup": "<=",
                "reference": "PFAS TEST 0.007",
                "objectiveCompliancyFunction": "100PourcentDuTemps",
                "default_args": [],
                "processing": "respect-objectif"
            }
        ]
    },
    {
        "id_parametre": 8003
  … (réponse tronquée)

1.3 concept de dataset : tables geo, données, paramètres et objectifs

Un dataset est composé de trois tables de configuration imbriquées — conf_table_data (données), conf_table_parameter (paramètres) et conf_table_geo (objets géo) — et porte ses conf_objectifs. Les tables geo ne sont pas toutes rattachées à un dataset et peuvent être partagées entre plusieurs datasets :

flowchart LR
    subgraph DS1["dataset — obs_datasets<br/>ex. qualite_eaux_surf_support_eau"]
        direction TB
        D["conf_table_data<br/>table de données (mesures, dates)"]
        P["conf_table_parameter<br/>table de paramètres (ids_parametres)"]
        O["conf_objectifs<br/>objectifs : seuil, référence,<br/>fonction de conformité, couleurs"]
    end
    subgraph DS2["autre dataset — obs_datasets<br/>ex. sdage_2028_edl_2025_esu"]
        direction TB
        D2["conf_table_data<br/>table de données"]
        P2["conf_table_parameter<br/>table de paramètres"]
        O2["conf_objectifs<br/>objectifs"]
    end
    GS["conf_table_geo<br/>table geo partagée entre datasets<br/>(ex. stations qualité des eaux)"]
    GO["conf_table_geo<br/>table geo non rattachée à un dataset<br/>(ex. couche libre / fond de carte)"]
    DS1 -->|"table geo"| GS
    DS2 -->|"table geo (partagée)"| GS

Cardinalités (modèle de données) :

2. L'enveloppe v2 (obs_datasets)

L'endpoint /api/v2/obs_datasets (données observatoires) renvoie une enveloppe contrat v2 en camelCase, sans valeurs null :

{
  "meta": { "dataset": "…", "processing": "…", "idTerritoire": "1", "count": 202 },
  "data": [ …lignes de résultats… ],
  "…": "clés complémentaires selon le processing (légende, classes…)"
}

⚠️ Les autres endpoints v2 (obs_searches, conf_objectifs, …) conservent temporairement le contrat historique v1 (tableaux plats snake_case).

3. Étape 1 — les territoires

v_conf_territories renvoie les territoires disponibles : idObjetgeo est la valeur à passer en id_territoire dans toutes les autres requêtes ; idSysCarte identifie la carte par défaut du territoire et les champs linkLogoStructure / linkWebSiteStructure alimentent l'habillage.

GET /api/v2/v_conf_territories.json

idObjetgeo est la valeur à passer en id_territoire ; idSysCarte identifie la carte par défaut, les champs link… alimentent l'habillage.

[
    {
        "idObjetgeo": 11,
        "objetgeo": "Observatoire régional de l'Eau (TEO Pays de la Loire)",
        "idSysCarte": 21,
        "linkLogoStructure": "../images/icones/mutualisation/Logo_11_teo.png",
        "linkWebSiteStructure": "https://teo-paysdelaloire.fr/",
        "structureSigle": "TEO",
        "linkWebSiteObsStructure": "https://teo-paysdelaloire.fr/",
        "geom": "01060000206A08000003000000010300000001000000024E000026B5139656071E41AD6B28161CA959418AC015C657081E4149820B29FFA859410422DBCBEB081E41E3B282A3F5A85941AFB4AEBBBB091E41E5556A2EE1A85941E421AAC70A0A1E4147823C07D2A859417EB20A38DE091E416CB85F1CC3A859413B299F60050A1E419A62A3F7BDA859412EBAC771030A1E414E0051FBA4A8594125CB3316390A1E413289741D6EA85941E19F2FB2060A1E410EB458B02FA859412CF78F9EDB091E416653F08628A85941D4D0570150091E41D71444B310A859415E5AEA0337091E41CC5F83F5F9A759417B249C1886091E412CC44610EBA75941C49E4BA783091E41FFA53011DCA7594189B9015CE3081E4169E2DF9ACAA75941A4EA4D7CDD081E4169C67424A5A759410CB062AB3E091E41B002ED2B91A75941602ABC34A1091E412EF593E18AA7594112269E92DB091E41762FC21782A75941E23C1BFDA10A1E4112F5AFD171A759416D179D27C90A1E41CF2D9BBB6CA759417C7AEB2D640A1E41FA11320E64A75941505B85474D0A1E418F25932F56A7594176C7463A920A1E41BAABDE8C35A75941E220B280D20A1E41D0CE2FAA17A759417C4EC953A0091E41731A4E8AE8A65941B6BCC62711091E41D66A1B97CAA659410307B9BCBF081E4130D93D5DC4A65941C14C7A7007081E4151B4D7FDADA659418D8ACE28A2071E41A2B5FB2B95A65941928D139DDA061E41961BFB8692A659419080765B70051E4130A82F4D8BA659411CBAE6CA5C051E411829FDCA88A659411002B184430A1E41C6AABA4F13A6594117621F46C10A1E41442149A007A659417F52AC25D30A1E4151CEEA0DECA55941F2D6FD29E30A1E41D210D322DEA55941DEC43CA0CD0A1E41217277B7CCA559412E1FF0C1930A1E412C73136ECBA55941ACA9DFEED7071E4157BC435BD8A559418C858DA44D071E410F0FE85ED8A5594120BBF2FFDE051E4101FDBE13A9A55941D673E39B65051E4104F964D7A1A5594154E5E43F34031E41A8E0A66494A55941269278886C021E41D96A5FFF8CA5594154368A792E021E4106347D4584A5594135D64EEADD011E41F46906277AA55941766462A4D7001
  … (réponse tronquée)

4. Étape 2 — filtres de territoire et carte

4.1 Filtres de territoire

Chaque territoire peut proposer des filtres restreignant les stations à un sous-ensemble (département, EPCI, SAGE…). Ils sont listés par v_conf_territory_filters (paramètres id_territoire et dataset) :

GET /api/v2/v_conf_territory_filters.json?id_territoire=1&dataset=qualite_eaux_surf_support_eau

confTerritoryFilterId est la valeur à passer en id_filtre_territoire (format code|dataset|type|id_objet).

[
    {
        "confTerritoryFilterId": "t1|qualite_eaux_surf_support_eau|departement|79",
        "confTerritoryFilter": "DEUX-SEVRES",
        "territoryId": 1,
        "obsDataset": "qualite_eaux_surf_support_eau",
        "filterCategoryId": "departement",
        "filterCategoryObjectId": "79",
        "filterCategory": "Département",
        "useFor": null,
        "filterType": "geom_intersects",
        "filterGeom": "01060000206A0800000100000001030000000100000098080000CDCCCCCC202E19419A999939EF58594167666666E22C1941000000A0FA58594167666666562C194134333373F95859416766666606271941000000802059594167666666402419419A9999793B59594100000000A2231941CDCCCC8C45595941000000002C2319419A99999954595941CDCCCCCC902119410000004093595941343333334D1F1941CDCCCC2C2D5A59419A999999EB1E19419A9999393C5A594167666666C41E1941000000C0435A5941CDCCCCCC6E17194134333353E35A59419A9999991F17194100000020E75A5941000000002017194100000020EC5A5941676666667616194167666666385B59419A99999927161941CDCCCC2C415B594100000000BC0F1941CDCCCCECB45B594167666666A00B1941CDCCCCACED5B59419A999999A9061941676666062E5C594134333333B3021941343333B3C65C59413433333351FF1841676666864F5D5941343333332DF21841CDCCCC6CB65D594134333333A7EB1841000000A0EE5D5941CDCCCCCC56EB184167666686F45D59419A9999991FEC1841CDCCCCACFA5D59410000000050F11841CDCCCCAC435E594100000000F2F1184134333393525E59410000000060F318419A9999D9815E59416766666628FB184100000
  … (réponse tronquée)

Variante liste légère : le paramètre fields (filtre CommaSeparatedFieldsFilter) limite les champs retournés — pratique pour peupler un menu sans charger les géométries et métadonnées :

GET /api/v2/v_conf_territory_filters.json?id_territoire=1&dataset=qualite_eaux_surf_support_eau&fields=filterCategory,filterCategoryId,confTerritoryFilter,confTerritoryFilterId

Utiliser fields=filterCategory,filterCategoryId,confTerritoryFilter,confTerritoryFilterId pour récupérer une liste légère. confTerritoryFilterId est la valeur à passer en id_filtre_territoire (format code|dataset|type|id_objet).

[
    {
        "confTerritoryFilterId": "t1|qualite_eaux_surf_support_eau|departement|79",
        "confTerritoryFilter": "DEUX-SEVRES",
        "filterCategoryId": "departement",
        "filterCategory": "Département"
    },
    {
        "confTerritoryFilterId": "t1|qualite_eaux_surf_support_eau|departement|44",
        "confTerritoryFilter": "LOIRE-ATLANTIQUE",
        "filterCategoryId": "departement",
        "filterCategory": "Département"
    },
    {
        "confTerritoryFilterId": "t1|qualite_eaux_surf_support_eau|departement|49",
        "confTerritoryFilter": "MAINE-ET-LOIRE",
        "filterCategoryId": "departement",
        "filterCategory": "Département"
    },
    {
        "confTerritoryFilterId": "t1|qualite_eaux_surf_support_eau|departement|85",
        "confTerritoryFilter": "VENDEE",
        "filterCategoryId": "departement",
        "filterCategory": "Département"
    },
    {
        "confTerritoryFilterId": "t1|qualite_eaux_surf_support_eau|epci|200071678",
        "confTerritoryFilter": "CA Cholet Agglomération",
        "filterCategoryId": "epci",
        "filterCategory": "EPCI"
    },
    {
        "confTerritoryFilterId": "t1|qualite_eaux_surf_support_eau|epci|200067635",
        "confTerritoryFilter": "CA Clisson Sèvre et Maine Agglo",
        "filterCategoryId": "epci",
        "filterCategory": "EPCI"
    },
    {
        "confTerritoryFilterI
  … (réponse tronquée)

Lecture : confTerritoryFilterId est la valeur à passer en id_filtre_territoire — au format code|dataset|type|id_objet (ex. t1|qualite_eaux_surf_support_eau|epci|200067635 = filtre « t1 » du territoire 1 sur ce dataset, restreint à l'EPCI n° 200067635). Le champ filterType indique le mécanisme (geom_intersects = intersection avec la géométrie du filtre, geo_objects_ids_list = liste d'objets géo) et filterCategory/filterCategoryObjectId décrivent la catégorie (Département, EPCI…).

Effet sur une requête obs_datasets — même requête sur un json avec et sans filtre : count 202 → 15 (seules les stations de l'EPCI sont retournées) :

GET /api/v2/obs_datasets.json?processing=respect-objectif&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_objectifs=6190&ids_parametres=1340&date_debut=2025-01-01&date_fin=2025-12-31&output_options=with_labels&id_filtre_territoire=t1|qualite_eaux_surf_support_eau|epci|200067635&id_carte=1

Requete avec le filtre EPCI 200067635 : le count passe de 202 à 15 — seules les stations de l'EPCI sont retournées.

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "respect-objectif",
        "idTerritoire": "1",
        "count": 15
    },
    "data": [
        {
            "year": 2025,
            "nbTotal": 5,
            "nbCompliant": 5,
            "aggValuesList": [
                {
                    "dateDonnee": "2025-02-13 10:19:00+01",
                    "valeur": 21
                },
                {
                    "dateDonnee": "2025-04-08 10:01:00+02",
                    "valeur": 15
                },
                {
                    "dateDonnee": "2025-06-18 11:43:00+02",
                    "valeur": 8.1
                },
                {
                    "dateDonnee": "2025-08-21 11:44:00+02",
                    "valeur": 1.6
                },
                {
                    "dateDonnee": "2025-10-16 10:56:00+02",
                    "valeur": 1.9
                }
            ],
            "idObjetgeo": "04143200",
            "objetgeo": "SEVRE NANTAISE à MONNIERES",
            "idParametre": "1340",
            "parametre": "Nitrates",
            "unite": "mg(NO3)/L",
            "objectiveCompliancyFunction": "specialNitrates",
            "idConfObjectif": "6190",
            "seuilObjectif": 25,
            "nbNotCompliant": 0,
            "percentageCompliant": 100,
            "percentageNotCompliant": 0,
            "overallCompliancy": "yes",
            "percentageAverageWrtObjective": 38.08,
            "couleurPubli": "vert1",
            "classe": {
                "debug": {
                    "type": "getStdClassePourcentageRespectObjectif4c",
                    "colorCode": "green"
                },
                "radius": 8,
                "weight": 1,
                "opacity": 0.9,
                "color": "#000000",
                "fillColor": "#B3CC00",
                "fillOpacity": 0.45,
                "strokeWidth": 1.5,
                "classe": "V",
                "libel": "Respect (moins de 10% de dépassements)",
                "comment": "",
                "debugIndicateur": {
                    "indicateur": "specialNitrates",
                    "note": 100
                }
            }
        },
        {
            "year": 2025,
            "nbTotal": 5,
            "nbCompliant": 5,
            "aggValuesList": [
                {
                    "dateDonnee": "2025-02-13 09:55:00+01",
                    "valeur": 20
      
  … (réponse tronquée)

5. Étape 3 — les datasets du territoire

v_conf_territory_obs_datasets liste les datasets configurés pour un territoire — c'est la source du sélecteur de dataset du front :

GET /api/v2/v_conf_territory_obs_datasets.json?id_territoire=1

23 datasets configurés pour le territoire 1 : nom (obsDataset), métadonnées et paramétrage — la liste à proposer dans le sélecteur de dataset.

[
    {
        "territoryId": 1,
        "obsDataset": "ades_mesures_qualite",
        "obsDatasetMetadata": "{\"title\": \"Qualité des nappes d'eau souterraine - Hub'eau (ADES)\", \"history\": {\"lastUpdate\": \"2026-06-26\"}, \"sources\": [{\"producers\": [{\"producer_url\": \"\", \"producer_logo\": \"\", \"producer_name\": \"AE\"}], \"source_url\": \"https://hubeau.eaufrance.fr/page/api-qualite-nappes\", \"source_logo\": \"/images/icones/hubeau-api-quality-nappes.svg\", \"source_name\": \"Qualité des nappes d'eau souterraine\"}], \"descripteur\": \"AR\", \"description\": \"L'API Qualité des nappes d'eau souterraine permet d'accéder aux données de qualité physico-chimique des nappes d'eau souterraine françaises, issues de la banque nationale d’Accès aux Données sur les Eaux Souterraines-  ADES.\"}"
    },
    {
        "territoryId": 1,
        "obsDataset": "ecoulements_fusion_onde",
        "obsDatasetMetadata": "{\"title\": \"Ecoulements ONDE et suivis locaux\", \"history\": {\"lastUpdate\": \"2025-06-10\", \"updateMethode\": \"continue\"}, \"sources\": [{\"producers\": [{\"producer_url\": \"\", \"producer_logo\": \"\", \"producer_name\": \"OFB,FVPPMA, EPTB Sèvre Nantaise\"}], \"source_url\": \"\", \"source_logo\": \"\", \"source_name\": \"Ecoulement suivi divers sources (Ondes et suivis locaux)\"}], \"descripteur\": \"AR\", \"description\": \"Ecoulement suivi divers sources (Ondes et suivis locaux)\"}"
    },
    {
        "territoryId": 1,
        "obsDataset": "ecoulements_sysma_eptbsn",
        "obsDatasetMetadata": "{\"title\": \"Ecoulements EPTBSN Sysma (suivis 
  … (réponse tronquée)

6. Étape 4 — représentations disponibles (paramètres et objectifs)

obs_searches renvoie les paramètres disponibles pour un (ou plusieurs) datasets, filtrés par un fragment de nom, avec leurs objectifs de qualité et les représentations (processing) qui leur sont associées. C'est le point d'entrée pour alimenter les listes de choix.

Paramètres utiles : id_territoire, ids_datasets, search_entry_parameter_string_part (fragment du nom du paramètre), search_limit (nombre max de résultats).

Sans fragment, la recherche renvoie les premiers paramètres du dataset :

GET /api/v2/obs_searches.json?id_territoire=1&ids_datasets=qualite_eaux_surf_support_eau&search_limit=10

Sans fragment de recherche : premiers paramètres du dataset (search_limit) — source des listes de choix paramètre/objectif du front.

[
    {
        "id_parametre": 7597,
        "parametre": "10,11-dihydro-10,11-dihydroxy-carbamazépine",
        "unite": "µg/L",
        "dataset": "qualite_eaux_surf_support_eau",
        "obsDatasetMetadata": {
            "title": "Qualité des eaux superficielles (support eau brute) - Hub'eau (Naïades)",
            "history": {
                "lastUpdate": "2026-09-10"
            },
            "sources": [
                {
                    "producers": [
                        {
                            "producer_url": "",
                            "producer_logo": "",
                            "producer_name": "AE"
                        }
                    ],
                    "source_url": "https://hubeau.eaufrance.fr/page/api-qualite-cours-deau",
                    "source_logo": "/images/icones/hubeau-api-quality.svg",
                    "source_name": "hubeau, Qualité des cours d'eau"
                }
            ],
            "descripteur": "AR",
            "description": "osur pc paramètre seulement sur le support eau brute"
        },
        "ids_objectifs": []
    },
    {
        "id_parametre": 7947,
        "parametre": "10:2 FTCA",
        "unite": "µg/L",
        "dataset": "qualite_eaux_surf_support_eau",
        "obsDatasetMetadata": {
            "title": "Qualité des eaux superficielles (support eau brute) - Hub'eau (Naïades)",
            "history": {
                "lastUpdate": "2026-09-10"
            },
            "sources": [
                {
                    "producers": [
                        {
                            "producer_url": "",
                            "producer_logo": "",
                            "producer_name": "AE"
                        }
                    ],
                    "source_url": "https://hubeau.eaufrance.fr/page/api-qualite-cours-deau",
                    "source_logo": "/images/icones/hubeau-api-quality.svg",
                    "source_name": "hubeau, Qualité des cours d'eau"
                }
            ],
            "descripteur": "AR",
            "description": "osur pc paramètre seulement sur le support eau brute"
        },
        "ids_objectifs": [
            {
                "id_conf_objectif": "9974",
                "value": "0.007",
                "inf_sup": "<=",
                "reference": "PFAS TEST 0.007",
                "objectiveCompliancyFunction": "100PourcentDuTemps",
                "default_args": [],
                "processing": "respect-objectif"
            }
        ]
    },
    {
        "id_parametre": 8003
  … (réponse tronquée)

Avec un fragment (« phosph ») :

GET /api/v2/obs_searches.json?id_territoire=1&search_entry_parameter_string_part=phosph&ids_datasets=qualite_eaux_surf_support_eau&search_limit=10

Recherche les paramètres dont le nom contient le fragment « phosph » pour le dataset : source des listes de choix paramètre/objectif du front.

[
    {
        "id_parametre": 1238,
        "parametre": "Phosphamidon",
        "unite": "µg/L",
        "dataset": "qualite_eaux_surf_support_eau",
        "obsDatasetMetadata": {
            "title": "Qualité des eaux superficielles (support eau brute) - Hub'eau (Naïades)",
            "history": {
                "lastUpdate": "2026-09-10"
            },
            "sources": [
                {
                    "producers": [
                        {
                            "producer_url": "",
                            "producer_logo": "",
                            "producer_name": "AE"
                        }
                    ],
                    "source_url": "https://hubeau.eaufrance.fr/page/api-qualite-cours-deau",
                    "source_logo": "/images/icones/hubeau-api-quality.svg",
                    "source_name": "hubeau, Qualité des cours d'eau"
                }
            ],
            "descripteur": "AR",
            "description": "osur pc paramètre seulement sur le support eau brute"
        },
        "ids_objectifs": [
            {
                "id_conf_objectif": "11498",
                "value": "0.1",
                "inf_sup": "<=",
                "reference": "SAGE SN 2015",
                "objectiveCompliancyFunction": "100PourcentDuTemps",
                "default_args": [],
                "processing": "respect-objectif"
            }
        ]
    },
    {
        "id_parametre": 7834,
        "parametre": "Gomphosphaeria",
        "unite": null,
        "dataset": "qualite_eaux_surf_support_eau",
        "obsDatasetMetadata": {
            "title": "Qualité des eaux superficielles (support eau brute) - Hub'eau (Naïades)",
            "history": {
                "lastUpdate": "2026-09-10"
            },
            "sources": [
                {
                    "producers": [
                        {
                            "producer_url": "",
                            "producer_logo": "",
                            "producer_name": "AE"
                        }
                    ],
                    "source_url": "https://hubeau.eaufrance.fr/page/api-qualite-cours-deau",
                    "source_logo": "/images/icones/hubeau-api-quality.svg",
                    "source_name": "hubeau, Qualité des cours d'eau"
                }
            ],
            "descripteur": "AR",
            "description": "osur pc paramètre seulement sur le support eau brute"
        },
        "ids_objectifs": []
    },
    {
        "id_parametre": 1349,
        "parametre": "Polyphos
  … (réponse tronquée)

Lecture de la réponse : id_parametre (à passer à obs_datasets via ids_parametres), unite, métadonnées du dataset (obsDatasetMetadata : titre, sources, producteurs) et ids_objectifs — chaque objectif porte sa objectiveCompliancyFunction, son seuil (value, inf_sup) et sa reference ; id_conf_objectif s'utilise via ids_objectifs.

7. Étape 5 — appeler les représentations (obs_datasets)

Chaque combinaison dataset × paramètre × objectif × processing se requiert via obs_datasets. Les sous-sections suivantes illustrent les processings courants. Variantes de format : .json, .csv (exports), .geojson (carte).

7.1 parameters — configuration des paramètres

GET /api/v2/obs_datasets.json?processing=parameters&dataset=qualite_eaux_surf_support_eau&ids_parametres=1340

Information sur le parametre donné

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "parameters",
        "idTerritoire": "1",
        "count": 1
    },
    "data": [
        {
            "idParametre": 1340,
            "parametre": "Nitrates",
            "unite": "mg(NO3)/L",
            "lbunite": "milligramme de nitrate par litre",
            "natparametre": "2",
            "typeparametre": "2",
            "lbcourtparametre": "NO3-",
            "cdunite": "173",
            "forceConvToTargetUnitForEauxSurfSupportEau": true
        }
    ]
}

7.2 datas — données brutes horodatées

GET /api/v2/obs_datasets.json?processing=datas&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_parametres=1340&date_debut=2025-01-01&date_fin=2025-12-31

Valeurs brutes par station (idObjetgeo, valeur, dateDonnee) — la matière première de vos graphiques et tableaux.

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "datas",
        "idTerritoire": "1",
        "count": 423
    },
    "data": [
        {
            "idObjetgeo": "04137695",
            "idParametre": "1340",
            "valeur": 11.5,
            "dateDonnee": "2025-03-05 08:30:00+01"
        },
        {
            "idObjetgeo": "04137695",
            "idParametre": "1340",
            "valeur": 14.1,
            "dateDonnee": "2025-05-21 08:52:00+02"
        },
        {
            "idObjetgeo": "04137695",
            "idParametre": "1340",
            "valeur": 14.7,
            "dateDonnee": "2025-07-09 08:30:00+02"
        },
        {
            "idObjetgeo": "04137695",
            "idParametre": "1340",
            "valeur": 13.4,
            "dateDonnee": "2025-08-01 08:00:00+02"
        },
        {
            "idObjetgeo": "04137695",
            "idParametre": "1340",
            "valeur": 14.9,
            "dateDonnee": "2025-09-17 08:25:00+02"
        },
        {
            "idObjetgeo": "04137695",
            "idParametre": "1340",
            "valeur": 14.3,
            "dateDonnee": "2025-12-17 08:30:00+01"
        },
        {
            "idObjetgeo": "04137900",
            "idParametre": "1340",
            "valeur": 13.7,
            "dateDonnee": "2025-03-12 13:45:00+01"
        },
        {
         
  … (réponse tronquée)

7.3 datas-stats — statistiques descriptives

GET /api/v2/obs_datasets.json?processing=datas-stats&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_parametres=1340&date_debut=2025-01-01&date_fin=2025-12-31

Statistiques par station ; le retour de cet appel peut évoluer. il de suit pas le formaliser data[].

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "datas-stats",
        "idTerritoire": "1",
        "count": 0
    },
    "data": [],
    "globals": {
        "all": {
            "count": 423,
            "sum": 6301.59,
            "mean": 14.897375886524824,
            "median": 13,
            "min": 0.1,
            "max": 80,
            "quartile1": 4.5,
            "quartile2": 13,
            "quartile3": 21,
            "quantile001": 0.31,
            "quantile005": 0.5,
            "quantile010": 1.2,
            "quantile090": 30,
            "quantile095": 36,
            "quantile099": 59,
            "variance": 159.42066143554135,
            "standardDeviation": 12.626189505767025,
            "firstDate": "2025-01-13T13:37:00+01:00",
            "lastDate": "2025-12-23T10:38:00+01:00",
            "yearCumulativeSum": 6301.59,
            "yearCumulativeCount": 423,
            "yearCumulativeMean": 14.897375886524824,
            "yearCumulativeMin": 0.1,
            "yearCumulativeMax": 80
        },
        "metadata": {
            "searchStartDate": "2025-01-01T00:00:00+00:00",
            "searchEndDate": "2025-12-
  … (réponse tronquée)

7.4 presence-de-donnees-brutes — disponibilité des mesures

GET /api/v2/obs_datasets.json?processing=presence-de-donnees-brutes&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_parametres=1340&date_debut=2025-01-01&date_fin=2025-12-31&output_options=with_labels

Liste les stations ayant des données brutes sur la période (53 stations en 2025 pour les nitrates) — utile pour les compteurs et cartes de disponibilité.

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "presence-de-donnees-brutes",
        "idTerritoire": "1",
        "count": 53
    },
    "data": [
        {
            "idObjetgeo": "04137695",
            "idParametre": "1340",
            "objetgeo": "SEVRE NANTAISE à VERNOUX-EN-GATINE",
            "parametre": "Nitrates",
            "unite": "mg(NO3)/L",
            "isRawData": 1,
            "classe": {
                "debug": {
                    "type": "getStdClasseDefaultProcessingLegend",
                    "colorCode": "D"
                },
                "radius": 8,
                "weight": 1,
                "opacity": 0.9,
                "color": "#000000",
                "fillColor": "#9F9F9F",
                "fillOpacity": 0.9,
                "strokeWidth": 1.5,
                "classe": "D",
                "libel": "Station ayant des données",
                "comment": "",
                "debugIndicateur": {
                    "indicateur": "IsRawData",
                    "note": 1
                }
            }
        },
        {
            "idObjetgeo": "04137900",
            "idParametre": "1340",
            "objetgeo": "SEVRE NANTAISE à SAINT-JOUIN-DE-MILLY",
            "parametre": "Nitrates",
            "unite": "mg(NO3)/L",
            "isRawData": 1,
            "classe": {
          
  … (réponse tronquée)

7.5 classes — classification des valeurs d'une station

GET /api/v2/obs_datasets.json?processing=classes&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_objets_geo=04146150&ids_parametres=1340&date_debut=2015-01-01&date_fin=2026-12-31&output_options=with_labels,with_ObsDataset_conf,with_data_source_obs_extract_json

Classes de qualité calculées pour une station, avec la configuration du dataset et la source des données (with_data_source_obs_extract_json).

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "classes",
        "idTerritoire": "1",
        "count": 57
    },
    "ObsDataset": {
        "obsDataset": "qualite_eaux_surf_support_eau",
        "confTableData": {
            "confTableData": "qualite_eaux_surf_support_eau",
            "dataTablePath": "r030_qualite_eaux_surf.v_qt_eaux_support_eau_with_obs_extract_and_cumul",
            "geoObjectIdFieldNameIntoDataTable": "id_objetgeo",
            "parameterIdFieldNameIntoDataTable": "id_parametre",
            "valueFieldNameIntoDataTable": "valeur",
            "dateFieldNameIntoDataTable": "date_donnee",
            "metadata": "{\"title\": \"Qualité des eaux superficielles (support eau brute)\", \"history\": {\"lastUpdate\": \"2026-09-10\"}, \"sources\": [{\"producers\": [{\"producer_url\": \"\", \"producer_logo\": \"\", \"producer_name\": \"AE\"}], \"source_url\": \"https://hubeau.eaufrance.fr/page/api-qualite-cours-deau\", \"source_logo\": \"/images/icones/hubeau1.png\", \"source_name\": \"hubeau, Qualité des cours d'eau\"}], \"descripteur\": \"AR\", \"description\": \"osur pc paramètre seulement sur le support eau brute\"}",
            "createdAt": "2025-06-26T22:20:22+00:00",
            "updatedAt": "2023-09-07T16:29:30+00:00"
        },
        "confTableParameter": {
            "confTableParameter": "qualite_eaux_sur
  … (réponse tronquée)

7.6 respect-objectif — conformité à un objectif

Données agrégées (JSON) :

GET /api/v2/obs_datasets.json?processing=respect-objectif&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_objectifs=6190&ids_parametres=1340&date_debut=2025-01-01&date_fin=2025-12-31&output_options=with_labels

Agrégats de conformité par station (nbTotal, percentageCompliant…) avec les valeurs mesurées (aggValuesList) et la classe de style calculée.

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "respect-objectif",
        "idTerritoire": "1",
        "count": 202
    },
    "data": [
        {
            "year": 2025,
            "nbTotal": 6,
            "nbCompliant": 6,
            "aggValuesList": [
                {
                    "dateDonnee": "2025-03-05 08:30:00+01",
                    "valeur": 11.5
                },
                {
                    "dateDonnee": "2025-05-21 08:52:00+02",
                    "valeur": 14.1
                },
                {
                    "dateDonnee": "2025-07-09 08:30:00+02",
                    "valeur": 14.7
                },
                {
                    "dateDonnee": "2025-08-01 08:00:00+02",
                    "valeur": 13.4
                },
                {
                    "dateDonnee": "2025-09-17 08:25:00+02",
                    "valeur": 14.9
                },
                {
                    "dateDonnee": "2025-12-17 08:30:00+01",
                    "valeur": 14.3
                }
            ],
            "idObjetgeo": "04137695",
            "objetgeo": "SEVRE NANTAISE à VERNOUX-EN-GATINE",
            "idParametre": "1340",
            "parametre": "Nitrates",
            "unite": "mg(NO3)/L",
            "objectiveCompliancyFunction": "specialNitrates",
            "idConfObjectif": "6190",
            "seuilObjectif": 25,
            "nbNotCompliant": 0,
            "percentageCompliant": 100,
            "percentageNotCompliant": 0,
            "overallCompliancy": "yes",
            "percentageAverageWrtObjective": 55.27,
            "couleurPubli": "vert1",
            "classe": {
                "debug": {
                    "type": "getStdClassePourcentageRespectObjectif4c",
                    "colorCode": "green"
                },
                "radius": 8,
                "weight": 1,
                "opacity": 0.9,
                "color": "#000000",
                "fillColor": "#B3CC00",
                "fillOpacity": 0.45,
                "strokeWidth": 1.5,
                "classe": "V",
                "libel": "Respect (moins de 10% de dépa
  … (réponse tronquée)

Variante carte — format .geojson + with_geometry_geojson_for_map : chaque feature embarque sa géométrie (EPSG:4326), son style et la cible de popup (popupButtonOnClickTarget) — directement consommable par Leaflet.

GET /api/v2/obs_datasets.geojson?processing=respect-objectif&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_objectifs=6190&ids_parametres=1340&date_debut=2025-01-01&date_fin=2025-12-31&output_options=with_labels,with_geometry_geojson_for_map

Requête en format .geojson : chaque feature embarque sa géométrie (EPSG:4326), son style de rendu et la cible de popup.

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "style": {
                "radius": 8,
                "fillColor": "#9F9F9F",
                "color": "#000000",
                "strokeWidth": 1.5,
                "weight": 1,
                "opacity": 0.3,
                "fillOpacity": 0.05
            },
            "properties": {
                "year": 2025,
                "idParametre": "1340",
                "parametre": "Nitrates",
                "nbTotal": 0,
                "asHistoricalDatas": true,
                "percentageAverageWrtObjective": -1,
                "name": "SEVRE NANTAISE à VERNOUX-EN-GATINE",
                "id": "04137700",
                "debug": {
                    "niveau1": {
                        "type": "getStdClassePourcentageRespectObjectif4c",
                        "colorCode": "noData"
                    },
                    "niveau2": {
                        "indicateur": "specialNitrates"
                    }
                },
                "popupButtonOnClickTarget": "https://obs21.sevre-nantaise.com/stationSheet?processing=respect-objectif&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_parametres=1340&ids_objectifs=6190&date_debut=2015-01-01&date_fin=2026-12-31&ids_objets_geo=04137700&parent_date_debut=2025-01-01&parent_date_fin=2025-12-31"
            },
            "geometry": {
                "type": "Point",
                "crs": {
                    "type": "name",
                    "properties": {
                        "name": "EPSG:4326"
                    }
                },
                "coordinates": [
                    -0.517176648,
                    46.634337184
                ]
            }
        },
        {
            "type": "Feature",
            "style": {
                "radius": 8,
                "fillColor": "#9F9F9F",
                "color": "#000000",
                "strokeWidth": 1.5,
                "weight": 1,
                "opacity": 0.3,
                "fillOpacity": 0.05
            },
            "properties": {
                "year": 2025,
                "idParametre": "1340",
                "parametre": "Nitrates",
                "nbTotal": 0,
                "asHistoricalDatas": true,
                "percentageAverageWrtObjective": -1,
                "nam
  … (réponse tronquée)

Variante légendeoutput_options=for_legend : classes de légende calculées (couleurs, libellés, effectifs, icônes SVG) sans recalcul côté front.

GET /api/v2/obs_datasets.json?processing=respect-objectif&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_objectifs=6190&ids_parametres=1340&date_debut=2025-01-01&date_fin=2025-12-31&output_options=for_legend

output_options=for_legend ajoute les classes de légende calculées : couleurs, libellés, effectifs et icônes — sans recalcul côté front.

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "respect-objectif",
        "idTerritoire": "1",
        "count": 0
    },
    "classeType": "classeDeRespectObjectif",
    "data": [],
    "dataProcessingClasseType": "specialNitrates",
    "effectifs": {
        "totalAvecValeur": 53,
        "total": 202
    },
    "name": "specialNitrates",
    "shape": "circle",
    "values": [
        {
            "debug": {
                "type": "getStdClassePourcentageRespectObjectif4c",
                "colorCode": "green"
            },
            "radius": 8,
            "weight": 1,
            "opacity": 0.9,
            "color": "#000000",
            "fillColor": "#B3CC00",
            "fillOpacity": 0.9,
            "strokeWidth": 1.5,
            "classe": "V",
            "libel": "Respect (moins de 10% de dépassements)",
            "comment": "",
            "debugIndicateur": {
                "indicateur": "specialNitrates",
                "note": 100
            },
            "effectif": 29,
            "percentEffectif": 54.72
        },
        {
            "debug": {
                "type": "getStdClassePourcentageRespectObjectif4c",
                "colorCode": "yellow"
            },
            "radius": 8,
            "weight": 1,
            "opacity": 0.9,
            "color": "#000000",
            "fillColor": "#FFB000",
            "fillOpacity": 0.9,
            "strokeWidth": 1.5,
            "classe": "J",
            "libel": "Non respect (de 10% à 40% de dépassements)",
            "comment": "",
            "debugIndicateur": {
                "indicateur": "specialNitrates",
                "note": 61
            },
            "effectif": 16,
            "percentEffectif": 30.19
        },
        {
            "debug": {
                "type": "getStdClassePourcentageRespectObjectif4c",
                "colorCode": "orange"
            },
            "radius": 8,
            "weight": 1,
     
  … (réponse tronquée)

Variante graphique « fiche station » — restreinte à une station (ids_objets_geo) sur plusieurs années : aggValuesList (série date/valeur)

GET /api/v2/obs_datasets.json?processing=respect-objectif&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_objectifs=6190&ids_parametres=1340&ids_objets_geo=04145000&date_debut=2024-01-01&date_fin=2025-12-31&output_options=with_labels

Restreinte à une station (ids_objets_geo) sur 2 ans : une ligne par année avec la série aggValuesList (date/valeur) et les agrégats de conformité.

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "respect-objectif",
        "idTerritoire": "1",
        "count": 2
    },
    "data": [
        {
            "year": 2024,
            "nbTotal": 11,
            "nbCompliant": 9,
            "aggValuesList": [
                {
                    "dateDonnee": "2024-06-20 13:23:00+02",
                    "valeur": 7.6
                },
                {
                    "dateDonnee": "2024-12-19 13:05:00+01",
                    "valeur": 28
                },
                {
                    "dateDonnee": "2024-01-22 14:00:00+01",
                    "valeur": 25
                },
                {
                    "dateDonnee": "2024-03-28 09:45:00+01",
                    "valeur": 20
                },
                {
                    "dateDonnee": "2024-04-19 12:19:00+02",
                    "valeur": 18
                },
                {
                    "dateDonnee": "2024-05-29 14:15:00+02",
                    "valeur": 18
                },
                {
                    "dateDonnee": "2024-07-25 14:13:00+02",
                    "valeur": 4.7
                },
                {
                    "dateDonnee": "2024-08-22 15:10:00+02",
                    "valeur": 1.2
                },
                {
                    "dateDonnee": "2024-09-16 12:26:00+02",
                    "valeur": 2.5
                },
                {
                    "dateDonnee": "2024-10-18 14:09:00+02",
                    "valeur": 27
                },
                {
                    "dateDonnee": "2024-11-18 09:36:00+01",
                    "valeur": 22
                }
            ],
            "idObjetgeo": "04145000",
            "objetgeo": "MAINE à CHATEAU-THEBAUD",
            "idParametre": "1340",
            "parametre": "Nitrates",
            "unite": "mg(NO3)/L",
            "objectiveCompliancyFunction": "specialNitrates",
            "idConfObjectif": "6190",
            "seuilObjectif": 25,
            "nbNotCompliant": 2,
            "percentageCompliant": 81.82,
            "percentageNotCompliant": 18.180000000000007,
            "overallCompliancy": "no",
            "percentageAverageWrtObjective": 63.27,
            "couleurPubli": "jaune",
            "classe": {
                "debug": {
                    "type": "getStdClassePourcentageRespectObjectif4c",
                    "colorCode": "yellow"
                },
                "radius": 8,
                "weight": 1,
                "o
  … (réponse tronquée)

7.7 respect-multi-objectifs — plusieurs objectifs en une requête

GET /api/v2/obs_datasets.json?processing=respect-multi-objectifs&dataset=qualite_eaux_surf_support_eau&id_territoire=1&ids_objectifs=9957&ids_parametres=9900020&ids_objets_geo=04145000&date_debut=2025-01-01&date_fin=2025-12-31&output_options=with_labels

Conformité évaluée contre plusieurs objectifs cumulés (ici paramètre 9900020, objectif 9957) sur une station — une ligne par résultat.

{
    "meta": {
        "dataset": "qualite_eaux_surf_support_eau",
        "processing": "respect-multi-objectifs",
        "idTerritoire": "1",
        "count": 1
    },
    "data": {
        "2025": {
            "04145000": {
                "5347": {
                    "nbTotal": 4,
                    "nbCompliant": 4,
                    "aggValuesList": [
                        {
                            "dateDonnee": "2025-12-23 11:22:00+01",
                            "valeur": 0.001
                        },
                        {
                            "dateDonnee": "2025-09-16 11:25:00+02",
                            "valeur": 0.005
                        },
                        {
                            "dateDonnee": "2025-05-14 13:37:00+02",
                            "valeur": 0.001
                        },
                        {
                            "dateDonnee": "2025-03-11 10:59:00+01",
                            "valeur": 0.0016
                        }
                    ],
                    "idObjetgeo": "04145000",
                    "objetgeo": "MAINE à CHATEAU-THEBAUD",
                    "idParametre": "5347",
                    "parametre": "Acide perfluoro-octanoïque (PFOA / formes linéaires et ramifiées)",
                    "unite": "µg/L",
                    "objectiveCompliancyFunction": "100Pourcent
  … (réponse tronquée)

7.8 indicateur — valeur et style pré-calculés

GET /api/v2/obs_datasets.json?processing=indicateur&dataset=sdage_2028_edl_2025_esu&id_territoire=50&ids_objectifs=10254&ids_parametres=e_pc_acid&date_debut=2025-01-01&date_fin=2025-12-31&output_options=with_labels

Indicateurs prêts à l'affichage : la classe et son style Leaflet sont fournis. S'applique aux datasets à indicateurs (état des masses d'eau Sdage).

{
    "meta": {
        "dataset": "sdage_2028_edl_2025_esu",
        "processing": "indicateur",
        "idTerritoire": "50",
        "count": 13
    },
    "data": [
        {
            "idObjetgeo": "FRGR0539B",
            "idParametre": "e_pc_acid",
            "valeur": "2",
            "dateDonnee": "2025-07-01",
            "categorieMe": "Cours d'eau",
            "objetgeo": "L'ERDRE DEPUIS LE PLAN D'EAU DE L'ERDRE JUSQU'A L'ESTUAIRE DE LA LOIRE",
            "parametre": "Etat Acidification ",
            "unite": "",
            "classe": {
                "debug": {
                    "type": "getStdClasseMauvais2TresBon",
                    "colorCode": "green"
                },
                "radius": 8,
                "weight": 1,
                "opacity": 0.9,
                "color": "#000000",
                "fillColor": "#66E680",
                "fillOpacity": 0.7200000000000001,
                "strokeWidth": 1.5,
                "classe": "V",
                "libel": "Bon",
                "comment": "",
                "numericAttribution": 2,
                "shape": "square",
                "debugIndicateur": {
                    "indicateur": "classeEDL6Classes",
                    "note": "2"
                }
            }
        },
        {
            "idObjetgeo": "FRGR0542",
            "idParametre": "e_pc_acid",
            "v
  … (réponse tronquée)

8. Étape 6 — information sur les objectifs (v_conf_objectifs)

v_conf_objectifs détaille les objectifs de qualité d'un paramètre pour un territoire : seuil, référence, fonction de conformité, couleurs publiées — la source des fiches « objectif » et des contrôles de cohérence front :

GET /api/v2/v_conf_objectifs.json?id_territoire=1&dataset=qualite_eaux_surf_support_eau&ids_parametres=1340

Pour le paramètre 1340 (nitrates) : 8 objectifs avec seuil (value/inf_sup), référence (SAGE, PNEC…), fonction de conformité et couleurs publiées.

[
    {
        "confObjectiveId": "10195",
        "confObjective": null,
        "parameterId": "1340",
        "obsDataset": "/api/v1/obs_datasets/qualite_eaux_surf_support_eau",
        "value": "18",
        "inf_sup": "<=",
        "colorObjectiveAchieved": "green",
        "colorObjectiveNotAchieved": "red",
        "reference": "Directive Nitrates seuil 18",
        "objectiveCompliancyFunction": "inferieur90PourcentDuTemps",
        "defaultArgs": [],
        "comment": null,
        "createdAt": "2025-01-16T10:12:16+00:00",
        "updatedAt": null,
        "categorie": "DIRECTIVE-NITRATES",
        "infSup": "<="
    },
    {
        "confObjectiveId": "6190",
        "confObjective": null,
        "parameterId": "1340",
        "obsDataset": "/api/v1/obs_datasets/qualite_eaux_surf_support_eau",
        "value": "25",
        "inf_sup": "<=",
        "colorObjectiveAchieved": "green",
        "colorObjectiveNotAchieved": "yellow",
        "reference": "SAGE Sèvre Nantaise",
        "objectiveCompliancyFunction": "specialNitrates",
        "defaultArgs": [],
        "comment": "Concentration en Nitrates <= 25 mg/l 90% du temps en 2021",
        "createdAt": null,
        "updatedAt": null,
        "categorie": "SAGE-SN2015-CE-ET-PE-NO3",
        "infSup": "<="
    },
    {
        "confObjectiveId": "10196",
        "confObjective": null,
        "parameterId": "1340",
        "obsDataset": "/api/v1/obs_datasets/qualite_eaux_surf_support_eau",
        "value": "40",
        "inf_sup": "<=",
        "colorObjectiveAchieved": "green",
        "colorObjectiveNotAchi
  … (réponse tronquée)

9. Annexe

9.1 Processing disponibles (processing)

Liste alignée sur ObsDataset::PROCESSING_TYPE_ENUM (source de vérité du Swagger) :

datas (données brutes), geoms (géométries), parameters (configuration des paramètres), presence-de-donnees-brutes, somme-presence-de-donnees-brutes, datas-stats (statistiques pré-calculées), tendance, derniere-valeur, dernieres-valeurs, respect-objectif, respect-multi-objectifs, classes, indicateur, respect-multi-objectifs_WIP_FOR_TABLE, objetsgeo-les-plus-proches, taux-quantification-all-v02, compte-points-suivi-respect-objectif, compte-mesures-respect-objectif, compte-points-suivi, PesticidesCumul_triPire, molecules-au-dessus-n-ug-par-l, NQE-au-dessus-de-leur-objectif, conf_table_data_content, conf_table_geom_content, conf_table_parameter_content

Chaque code porte un libellé et une description français dans le Swagger UI (section processing du endpoint obs_datasets).

9.2 output_options

Code Effet
with_labels libellés humains (paramètre, objet géo…) dans la réponse
with_geometry_geojson géométries GeoJSON brutes
with_geometry_geojson_for_map géométries + styles + cibles de popup (carte)
with_geometry_WKB / with_geometry_WKT géométries binaires/texte PostGIS
for_legend / for_legendCSV classes et effectifs de légende
for_table format adapté aux tableaux
with_ObsDataset_conf configuration du dataset (champs, tables)
with_data_source_obs_extract_json source des données (producteur, support…)

9.3 Noms canoniques v2 et alias acceptés

Pour un nouveau front, utilisez les noms canoniques ci-dessous (cohérents entre endpoints). En v2, les noms historiques restent acceptés tels quels, et une requête envoyant un nom canonique est éventuellement redirigée (302) vers l'URL historique que lit l'API — suivez la redirection (curl -L, fetch suit automatiquement). La v1 n'est pas concernée.

Endpoint v2 Nom canonique recommandé Nom historique accepté
obs_datasets, conf_objectifs, v_conf_objectifs, v_conf_territory_filters dataset — (déjà canonique)
v_conf_territory_obs_datasets dataset obs_dataset
conf_parameter_extensions ids_parametres, id_conf_table_parameter parameter_id, conf_table_parameter
v_conf_territory_filters, v_conf_territory_filter_generics filtre_territoire_categorie_objet_id filter_categorie_object_id
obs_searches search_entry_string_part_limit, search_entry_ids_parametres string_part_search_limit, search_entry_ids_parameters
v_conf_territories id_objetgeo ids_objetgeo

Exemple de redirection :

GET /api/v2/v_conf_territory_obs_datasets.json?id_territoire=1&dataset=qualite_eaux_surf_support_eau
→ 302 Location: …/v_conf_territory_obs_datasets.json?id_territoire=1&obs_dataset=qualite_eaux_surf_support_eau
→ 200 […]

Incohérences de nommage connues, à ne pas reproduire dans de nouveaux usages (documentées pour lecture du code) : parameter_id/conf_table_parameter (conf_parameter_extensions), filter_categorie_object_id (v_conf_territory_filters), string_part_search_limit et search_entry_ids_parameters (obs_searches). Deux notions de filtre géo coexistent : geom_filter (obs_geoprocessings) et id_filtre_territoire (obs_datasets).

9.4 Erreurs

Les erreurs sont renvoyées en JSON structuré :

{ "title": "An error occurred", "detail": "…", "status": 404, "instance": null }

10. Cartes et couches géo de contextualisation

flowchart LR
    T["v_conf_territories<br/>idSysCarte (carte par défaut)"]
    CM["ConfMap — id_carte<br/>centre, zoom, libellé"]
    L["conf_table_geo_link_conf_maps<br/>layerOrder, visible, layerOptions.style"]
    TG["ConfTableGeo<br/>couche géo"]
 

    T -.-> CM
    CM -->|"1..n"| L
    L -->|"confTableGeo"| TG

10.1 La carte (id_carte)

Une « carte » est un objet de configuration référencé par id_carte :

Info sur le territorie

GET /api/v2/v_conf_territories/1.json

idObjetgeo est la valeur à passer en id_territoire ; idSysCarte identifie la carte par défaut, les champs link… alimentent l'habillage.

{
    "idObjetgeo": 1,
    "objetgeo": "EPTB SEVRE NANTAISE",
    "idSysCarte": 1,
    "linkLogoStructure": "../images/logo_eptbsn_240.png",
    "linkWebSiteStructure": "https://www.sevre-nantaise.com/",
    "structureSigle": "EPTBSN",
    "linkWebSiteObsStructure": "https://obs21.sevre-nantaise.com/territoire/eptbsn",
    "geom": "01060000206A08000001000000010300000001000000020800000D24FDCB3E691A418C4FFFBF163E5941F711D7FFCF681A41EF1EF71F173E5941B1DB149ADB681A41FC4710A0123E5941D46667CDC8661A41BBC6FA7FFA3D5941C3D2D50060651A41819B0920F33D594168A87DCDFC631A41FB06FD5FF53D594158839000C6621A41F8A7F37FFC3D59412739EE3313621A411658F75F063E5941A5EE989A63611A415F4CEFDF243E594135BB216752611A4143680AE05A3E5941D5123534E9601A4119AFF25F6E3E5941EAFE54CD2A601A417CE9F07F783E59413C1D9898275F1A413EA9EE9F7D3E5941267F1E67C25D1A41599B0E40903E5941EFE81F330D5C1A4178D6EE3FC23E5941E2FD3034AF591A41ECC41180EA3E5941BF5352993B571A4102C2F6FF273F594143AD9732BF561A41EC660E60433F59417196A466D8571A41CAED00A0883F5941FB9384328F571A41809011A09D3F5941F22F31FFF7551A41EE13FF9FC13F59417562DFCDBA541A41CDA40E00D53F594142F3C7656E521A414E0FF9BFEB3F59413E0C789A49501A41CA8FFD7FE13F594194D35D33514E1A413A880E60DD3F5941820BB7CC224B1A410271F67FE33F594112EC3734BD481A41276BF2BFF23F59418B2DF3FFC3401A417BB4058036405941FA1D65993B401A4175EAF5DF33405941334AAC984B391A411A5B0840654059415F1FCE3221331A410E73020087405941655AAD9935301A41066AEE5FA44059415A2701670E2D1A41513E1080A440594125CB0001322A1A415EC603609E4059410B5160FF8F271A41CAA903C0A6405941C7803BCD0C261A41CF340F60C9405941660A8732A7231A4156FE0200D9405941AD202C99811F1A4153E9F17FE5405941D58836343F1E1A412CE61020EE4059411547FDCC981D1A414A16FDBFFA4059411513E832D31B1A415E3E0DC00A4159417D8B5EFFAF1A1A4175DA08A00C415941270AA99957181A416987FC9F24415941B26D26997F161A41B5BAF81F23415941963AB23313151A41DC5EFF1F1C4159417364343307131A41313BFDDF18415941F51AC03293101A41BF3907E0344159410369DECB0C0E1A413AB0EE7F5C41594180F882FF2F0C1A417C10F63F70415941457B340056081A41314800807B4159416714969ADB061A
  … (réponse tronquée)

configuration de la carte par défaut du territoire

GET /api/v2/conf_maps/1.json

Centre (defaultCenterX/Y) et niveaux de zoom par défaut/min/max : de quoi initialiser la vue de la carte.

{
    "confMapId": 1,
    "mapLabel": "Carte des cours d'eau Sèvre Nantaise",
    "defaultCenterX": "-1",
    "defaultCenterY": "46.92",
    "defaultZoom": 10,
    "minZoom": 0,
    "maxZoom": 15,
    "comment": null,
    "createdAt": "2022-11-14T16:46:22+00:00",
    "updatedAt": null
}

Liste des couches vectorielles de fond à ajouter (yc nom des confTableGeo, ordre des couche et styles)

GET /api/v2/conf_table_geo_link_conf_maps.json?id_carte=1

Couches géo attachées à la carte : ordre d'affichage (layerOrder), visibilité et style Leaflet (layerOptions.style).

[
    {
        "confMapId": 1,
        "confTableGeo": "carthage_sousbv_selec",
        "layerOrder": 2,
        "visible": 1,
        "layerOptions": {
            "style": {
                "fill": false,
                "color": "#000000",
                "weight": 1
            }
        },
        "createdAt": "2022-11-14T17:08:26+00:00",
        "updatedAt": null
    },
    {
        "confMapId": 1,
        "confTableGeo": "carthage_cours_eau",
        "layerOrder": 1,
        "visible": 1,
        "layerOptions": {
            "style": {
                "color": "#5CAEFF",
                "weight": 1
            }
        },
        "createdAt": "2022-11-14T17:08:26+00:00",
        "updatedAt": null
    }
]

Obtention des couches

Une première couche GET /api/v2/conf_table_geos/carthage_sousbv_selec/geoms

Geometries pour Leaflet avec style configuré

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "properties": {
                "id_objetgeo": "5",
                "objetgeo": "Bassin de la Sanguèze",
                "geo_table_label": "Sous-bassins de la Sèvre Nantaise"
            },
            "geometry": {
                "type": "MultiPolygon",
                "crs": {
                    "type": "name",
                    "properties": {
                        "name": "EPSG:4326"
                    }
                },
                "coordinates": [
                    [
                        [
                            [
                                -1.073859876,
                                47.132076911
                            ],
                            [
                                -1.074523489,
                                47.131891248
                            ],
                            [
                                -1.075525794,
                                47.131589982
                            ],
                            [
                                -1.076227871,
                                47.131371411
                            ],
                            [
                                -1.076961293,
                                47.131043545
                            ],
                            [
                                -1.077645487,
                                47.130
  … (réponse tronquée)

Une seconde couche GET /api/v2/conf_table_geos/carthage_cours_eau/geoms

Geometries pour Leaflet avec style configuré

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "properties": {
                "id_objetgeo": "M7415300",
                "objetgeo": "la Lignée",
                "geo_table_label": "Cours d&#039;eau, BD Carthage"
            },
            "geometry": {
                "type": "MultiLineString",
                "crs": {
                    "type": "name",
                    "properties": {
                        "name": "EPSG:4326"
                    }
                },
                "coordinates": [
                    [
                        [
                            -1.096893672,
                            46.936101593
                        ],
                        [
                            -1.097868651,
                            46.93594069
                        ],
                        [
                            -1.099092709,
                            46.93554101
                        ],
                        [
                            -1.099806092,
                            46.935384894
                        ],
                        [
                            -1.100264562,
                            46.935373079
                        ],
                        [
                            -1.101537397,
                            46.935737979
                        ],
                        [
                            -1.102393094,
                        
  … (réponse tronquée)

Document généré depuis doc/api/guide-front.template.md par php doc/api/generate.php (exemples : doc/api/doc-scenarios.php) — éditez le template, pas ce fichier.