{"id":"68aa3074-0d89-41f8-9cdf-151c578dd112","type":"API","name":"Hub d'Indicateurs Territoriaux de Transition Ecologique","slug":"hub-dindicateurs-territoriaux-de-transition-ecologique","description":"L’API permet d’accéder à des indicateurs clés de la transition écologique, disponibles à différentes échelles géographiques. Ces indicateurs territoriaux constituent des outils essentiels d’analyse et de suivi. Ils permettent d’évaluer les dynamiques locales, de mesurer l’impact des politiques pub…","free_access_class":"FREE_NO_AUTH","auth_type":"NONE","homepage_url":"https://www.data.gouv.fr/dataservices/hub-dindicateurs-territoriaux-de-transition-ecologique","docs_url":"https://www.data.gouv.fr/dataservices/hub-dindicateurs-territoriaux-de-transition-ecologique","repo_url":null,"status":"ACTIVE","verification_state":"UNVERIFIED","tags":["environment","geospatial"],"logo_url":"https://www.google.com/s2/favicons?sz=64&domain=data.gouv.fr","primary_source_url":"https://www.data.gouv.fr/dataservices/hub-dindicateurs-territoriaux-de-transition-ecologique","extraction_confidence":"0.40","created_at":"2026-06-07T22:08:45.601Z","updated_at":"2026-09-25T20:03:16.560Z","last_verified_at":"2026-09-05T04:49:23.031Z","deprecated_at":null,"ranking_score":39,"last_ranked_at":"2026-09-24T23:02:13.424Z","last_seen_at":null,"last_validated_at":null,"last_uptime_at":"2026-09-25T20:03:16.560Z","search_vector":"'a':157B,166B 'acceder':156B 'access':62B,112B,199B 'accessible':249B 'accéder':19B 'across':123B,134B,260B,271B 'administr':124B 'administrative':261B 'allow':89B 'allowing':226B 'analys':41B 'analyse':178B 'analysi':86B 'analysis':223B 'and':224B,231B,242B,252B,263B 'api':16B,60B,109B,153B,197B,246B 'as':219B 'at':207B 'authent':114B 'authentication':251B 'avail':69B 'available':206B 'ces':33B,170B 'cles':160B 'clés':23B 'comparison':122B,259B 'constitu':36B 'constituent':173B 'd':2A,18B,40B,47B,139A,155B,177B,184B 'de':5A,24B,43B,52B,142A,161B,180B,189B 'des':21B,37B,56B,158B,174B,193B 'design':117B 'designed':254B 'diagnost':121B 'diagnostics':258B 'differentes':167B 'différent':30B 'dispon':28B 'disponibles':165B 'dynam':93B 'dynamics':230B 'dynamiqu':50B 'dynamiques':187B 'echelles':168B 'ecolog':13A,67B,131B 'ecological':150A,204B,268B 'ecologiqu':7A 'ecologique':144A,164B 'effort':133B 'efforts':270B 'energi':106B 'energy':243B 'environ':136C 'environment':104B 'environmental':241B 'essenti':83B 'essential':220B 'essentiel':39B 'essentiels':176B 'et':42B,179B 'evalu':90B 'evaluation':227B 'evaluer':185B 'follow':128B,265B 'follow-up':127B,264B 'for':149A,222B 'franc':135B 'france':272B 'freeli':111B 'freely':248B 'french':76B,213B 'from':211B 'geograph':72B 'geographic':209B 'geographiques':169B 'geospati':137C 'govern':77B 'government':214B 'géographiqu':32B 'hub':1A,8A,138A,145A 'il':45B 'ils':182B 'impact':55B,98B,192B,235B 'indic':11A,65B,80B 'indicateur':3A,22B,34B 'indicateurs':140A,159B,171B 'indicators':148A,202B,217B 'is':247B,253B 'key':64B,201B 'l':15B,54B,152B,191B 'la':25B,162B 'les':49B,186B 'level':125B 'levels':262B 'local':51B,92B,229B 'locales':188B 'measur':95B 'measurement':232B 'mesur':53B 'mesurer':190B 'monitor':88B 'monitoring':225B 'of':146A,203B,228B,233B,236B,267B 'outil':38B 'outils':175B 'permet':17B,154B 'permett':46B 'permettent':183B 'polici':101B 'policies':238B 'politiqu':57B 'politiques':194B 'provid':61B 'provides':198B 'pub':58B,195B 'public':100B,237B 'relat':102B 'related':239B 'scale':73B 'scales':210B 'serv':81B 'serve':218B 'suivi':44B,181B 'support':119B,256B 'territori':10A,79B,120B 'territorial':147A,216B,257B 'territoriaux':4A,35B,141A,172B 'the':212B,234B,245B 'these':215B 'this':196B 'to':200B,240B,255B 'tool':84B 'tools':221B 'transit':6A,14A,26B,68B,107B,132B 'transition':143A,151A,163B,205B,244B,269B 'up':266B 'various':71B,208B 'without':113B,250B 'à':20B,29B 'échell':31B 'écologiqu':27B 'évaluer':48B","popularity_score":"0.0000","maintenance_score":"0.6000","institution_id":"5b86827e-a848-4295-b242-91ac4e71dc2b","institution_type":"GOVERNMENT","country_code":"FR","official_confidence":40,"proof_summary":"official domain (data.gouv.fr) (catalog: api_gouv_fr)","source_seed_url":null,"is_public_sector":true,"published_at":"2026-06-07T22:08:45.601Z","geographic_scope":"NATIONAL","name_en":"Hub of Territorial Indicators for Ecological Transition","description_en":"This API provides access to key indicators of ecological transition, available at various geographic scales, from the French Government. These territorial indicators serve as essential tools for analysis and monitoring, allowing evaluation of local dynamics and measurement of the impact of public policies related to environmental and energy transition. The API is freely accessible without authentication and is designed to support territorial diagnostics, comparison across administrative levels, and follow-up of ecological transition efforts across France.","native_lang":"fr","access_level":"documented","formats":[],"capability_tier":"sample","trust_score":48.25,"merged_into_entry_id":null,"identity_key":"API|https://www.data.gouv.fr/dataservices/hub-dindicateurs-territoriaux-de-transition-ecologique|hub d'indicateurs territoriaux de transition ecologique","upstream_ref":null,"access":{"level":"documented","primary":{"kind":"query","label":"Run verified request","method":"GET","url":"https://api.indicateurs.ecologie.gouv.fr","source":"probe","runnable":true},"actions":[{"kind":"query","label":"Run verified request","method":"GET","url":"https://api.indicateurs.ecologie.gouv.fr","source":"probe","runnable":true},{"kind":"spec","label":"OpenAPI spec","method":"GET","url":"https://swagger-storage.s3.fr-par.scw.cloud/swagger.yaml","source":"openapi","runnable":false},{"kind":"landing","label":"Read the docs","method":"GET","url":"https://www.data.gouv.fr/dataservices/hub-dindicateurs-territoriaux-de-transition-ecologique","source":"docs","runnable":false}],"formats":[]},"maturity":{"entry_id":"68aa3074-0d89-41f8-9cdf-151c578dd112","granularity":"entry","granularity_label":"One unit = one catalog entry. A PROXY for the SCOPE.md §4 ladder, which governs source families, not entries: a family with 400 entries moves this reading 400 times as much as a family with one. Never compare or combine with the source_family reading.","level":"discovered","level_index":1,"level_label":"Discovered","meaning":"Source and metadata recorded","counts_as_coverage":false,"blocked_by":"verified","rungs":[{"level":"discovered","level_index":1,"label":"Discovered","meaning":"Source and metadata recorded","evidence":"membership of the named population the ladder is taken over","counts_as_coverage":false,"met":true,"reached":true,"criterion":"TRUE"},{"level":"verified","level_index":2,"label":"Verified","meaning":"Access tested successfully","evidence":"entries.verification_state = 'VERIFIED'","counts_as_coverage":false,"met":false,"reached":false,"criterion":"entries.verification_state = 'VERIFIED'"},{"level":"profiled","level_index":3,"label":"Profiled","meaning":"Schema, dimensions and licence understood","evidence":"a data profile with at least one field (entry_data_profiles.field_count > 0)","counts_as_coverage":false,"met":true,"reached":false,"criterion":"EXISTS (SELECT 1 FROM entry_data_profiles p WHERE p.entry_id = entries.id AND COALESCE(p.field_count, 0) > 0)"},{"level":"executable","level_index":4,"label":"Executable","meaning":"Queries run through Commodity","evidence":"entries.capability_tier = 'live' — today's proxy for \"queryable through us\"","counts_as_coverage":true,"met":false,"reached":false,"criterion":"entries.capability_tier = 'live'"},{"level":"joinable","level_index":5,"label":"Joinable","meaning":"Canonical identifiers and concepts mapped","evidence":"a field link to a canonical identifier whose sampled VALUES match its format","counts_as_coverage":true,"met":false,"reached":false,"criterion":"EXISTS (SELECT 1 FROM entry_field_links efl WHERE efl.entry_id = entries.id AND efl.identifier_id IS NOT NULL AND efl.value_status = 'match')"},{"level":"reproducible","level_index":6,"label":"Reproducible","meaning":"Snapshots and transformation evidence retained","evidence":"at least one retained evidence manifest (migration 078)","counts_as_coverage":true,"met":false,"reached":false,"criterion":"EXISTS (SELECT 1 FROM evidence_manifests em WHERE em.entry_id = entries.id)"},{"level":"guaranteed","level_index":7,"label":"Guaranteed","meaning":"Monitored against an operational reliability target","evidence":"an active reliability target with a named monitor (migration 096)","counts_as_coverage":true,"met":false,"reached":false,"criterion":"EXISTS (SELECT 1 FROM entry_reliability_targets rt WHERE rt.entry_id = entries.id AND rt.is_active = true)"}],"officialness":{"basis":"catalog_inherited","label":"Inherited from the upstream catalog: this item came from a trusted official government catalog, and that provenance — not per-item proof — is the warrant. Its own proof score is below 80 or it matched no registered institution (apps/worker/src/connectors/catalog/qualify-store.ts).","proof_confidence":40,"proven_threshold":80,"institution_id":"5b86827e-a848-4295-b242-91ac4e71dc2b","definition":"CASE WHEN COALESCE(entries.is_public_sector, false) IS NOT TRUE THEN 'not_official' WHEN COALESCE(entries.official_confidence, 0) >= 80 AND entries.institution_id IS NOT NULL THEN 'per_item_proven' ELSE 'catalog_inherited' END"},"source_family":{"key":"www.data.gouv.fr","label":"One unit = one source family, approximated by the serving host of the entry's primary source URL (e.g. bdl.stat.gov.pl). A COMPUTED stand-in for the curated families of SCOPE.md §5, which no table holds yet. A family sits at the highest level any of its entries has reached, because a family is integrated to the depth of its deepest working integration. Never compare or combine with the entry reading."},"generated_at":"2026-10-01T15:34:19.492Z"},"api_details":{"id":"d72c7251-26d5-4cb4-ba7f-7e6c68c5dd03","entry_id":"68aa3074-0d89-41f8-9cdf-151c578dd112","base_url":"https://api.indicateurs.ecologie.gouv.fr","openapi_url":"https://swagger-storage.s3.fr-par.scw.cloud/swagger.yaml","graphql_url":null,"api_version":null,"spec_format":"openapi","endpoints_count":null,"endpoints":[],"rate_limit_info":null,"free_tier_limits":null,"ping_url":"https://api.indicateurs.ecologie.gouv.fr","created_at":"2026-06-07T22:08:45.621Z","updated_at":"2026-06-07T22:08:45.621Z"},"dataset_details":null,"license":null,"reuse":{"license_id":null,"license_name":null,"license_url":null,"commercial_use":{"status":"unknown","value":null},"redistribution":{"status":"unknown","value":null},"attribution_required":{"status":"unknown","value":null},"share_alike":{"status":"unknown","value":null},"personal_data_warning":{"status":"unknown","value":null},"cache_and_mirror":{"status":"unknown","value":null},"undetermined":["commercial_use","redistribution","attribution_required","share_alike","personal_data_warning","cache_and_mirror"],"basis":"unverified","confidence":0.1,"confidence_tier":"low","source_text":null,"source_url":null,"reviewed_at":null},"license_raw":null,"latest_check":{"id":"df87ce56-00ae-4e4d-bc7d-ccfc3b681213","entry_id":"68aa3074-0d89-41f8-9cdf-151c578dd112","status":"UNVERIFIED","last_checked_at":"2026-09-28T09:59:50.250Z","p50_latency_ms":1981,"p95_latency_ms":null,"last_error":"Source URL is HTML, not a machine-readable API — possible mis-classification","consecutive_failures":0,"created_at":"2026-06-08T12:43:11.383Z","updated_at":"2026-09-28T09:59:50.250Z","consecutive_successes":15,"probe_url":"https://api.indicateurs.ecologie.gouv.fr","probe_method":"GET","probe_http_status":200,"probe_content_type":"text/html; charset=utf-8","probe_succeeded_at":"2026-09-05T04:49:22.723Z"},"data_profile":{"id":"df67f527-96ae-4ee9-8b08-bccd8876ed37","entry_id":"68aa3074-0d89-41f8-9cdf-151c578dd112","profile_source":"openapi","profile_kind":"dataset","dataset_id":null,"fields":[{"name":"measures","type":"array<string>","label":"query","description":"An array of the names of the indicators to query.","description_en":"Names of the indicators to include in the query."},{"name":"filters","type":"array<object>","label":"query","description":"The filters to do a more specific query. Learn about [filters format](https://cube.dev/docs/product/apis-integrations/rest-api/query-format#filters-format).","description_en":"Conditions used to filter the query results."},{"name":"timezone","type":"string","label":"query","description":"A [time zone](https://cube.dev/docs/product/apis-integrations/queries#time-zone) for your query. You can set the desired time zone in the [TZ Database Name](https://en.wikipedia.org/wiki/Tz_database) format.","description_en":"Time zone applied to the query, in TZ Database format."},{"name":"dimensions","type":"array<string>","label":"query","description":"The dimensions over which to group the data.","description_en":"Fields used to group the returned data."},{"name":"timeDimensions","type":"array<object>","label":"query","description":"A convenient way to specify a time dimension with a filter. It is an array of objects in [timeDimension format](https://cube.dev/docs/product/apis-integrations/rest-api/query-format#time-dimensions-format).","description_en":"Time-based dimension with an associated date filter."},{"name":"segments","type":"array<string>","label":"query","description":"An array of segments. A segment is a named filter, created in the data model.","description_en":"Named pre-defined filters to apply to the query."},{"name":"limit","type":"integer","label":"query","description":"A [row limit](https://cube.dev/docs/product/apis-integrations/queries#row-limit) for your query.","description_en":"Maximum number of rows to return."},{"name":"total","type":"boolean","label":"query","description":"If set to `true`, Cube will run a [total query](https://cube.dev/docs/product/apis-integrations/queries#total-query) and return the total number of rows as if no row limit or offset are set in the query.","description_en":"If true, returns the total row count ignoring limit and offset."},{"name":"offset","type":"integer","label":"query","description":"The number of initial rows to be skipped for your query.","description_en":"Number of initial rows to skip in the result."},{"name":"order","type":"object","label":"query","description":"An object, where the keys are measures or dimensions to order by and their corresponding values are either `asc` or `desc`. The order of the fields to order on is based on the order of the keys in the object. If not provided, [default ordering](https://cube.dev/docs/product/apis-integrations/queries","description_en":"Sort order for specified measures or dimensions."},{"name":"renewQuery","type":"boolean","label":"query","description":"If `renewQuery` is set to `true`, Cube will renew all [refreshKey](https://cube.dev/docs/reference/data-model/pre-aggregations#refresh_key) for queries and query results in the foreground. However, if the [refreshKey](https://cube.dev/docs/reference/data-model/pre-aggregations#refresh_key) (or [refr","description_en":"If true, forces refresh of cached query results."},{"name":"ungrouped","type":"boolean","label":"query","description":"If set to `true`, Cube will run an [ungrouped query](https://cube.dev/docs/product/apis-integrations/queries#ungrouped-query).","description_en":"If true, returns raw ungrouped query results."},{"name":"health","type":"string","label":"health","description":null,"description_en":"Health status of the API service."}],"field_count":13,"sample_records":null,"record_count":null,"data_size_bytes":null,"dataset_count":null,"query_examples":[{"url":"https://swagger-storage.s3.fr-par.scw.cloud/swagger.yaml","curl":"curl -s 'https://swagger-storage.s3.fr-par.scw.cloud/swagger.yaml' -H 'Accept: application/json'","label":"OpenAPI spec","method":"GET","description":"Machine-readable API description (use it to generate clients)."}],"status":"partial","error_message":null,"profiled_at":"2026-09-29T00:10:48.455Z","run_id":"9b1803e8-e1a9-4b22-999f-67df9e6270f0","created_at":"2026-06-12T19:01:48.779Z","updated_at":"2026-09-29T00:10:48.455Z","license_raw":null,"license_id":null,"consecutive_failure_count":0,"last_error_at":null,"last_error_message":null,"previewable":false,"personal_data":{"status":"none","basis":"no_person_column_cited","grain":"none","allowed":true,"columns":{"direct_identifiers":[],"family_names":[],"given_names":[],"attributes":[],"unresolved_names":[],"measures":["total"],"entity_identifiers":[]},"publication":null,"publication_evidence":null,"notice":"personal data: no cited column names a natural person (the cited columns are all this reads)"}},"datasets":[],"limits":[],"manifest":{"answer_sha256":"1c9dbd850568e014bf3ac0a36e5735456243e85f28f81c462676682123a877ec","answer_sha256_rule":"sha256 (hex, UTF-8) of JSON.stringify(this body) after deleting the keys listed in manifest.stamped_keys from manifest, and deleting manifest itself if it is then empty. The hash was computed before the stamp existed, so no field of the stamp is inside it.","stamped_keys":["answer_sha256","answer_sha256_rule","stamped_keys","row_count","row_count_basis","live","live_basis","created_at","created_at_basis","durable_citation"],"row_count":24,"row_count_basis":"Objects that are elements of a JSON array anywhere in this body, excluding manifest. Not a claim about which collection is the answer. Largest single collection: data_profile.fields[] (13 rows).","live":true,"live_basis":"This body was produced by executing the request.","created_at":"2026-10-01T15:34:19.653Z","created_at_basis":"When this response body was assembled, deliberately OUTSIDE the hashed bytes so the same answer hashes identically on every request. Not the upstream read time — that is provenance[].retrieved_at. A zone-cached replay carries the assembly time, not your receipt time.","durable_citation":"This manifest is produced at response time and is NOT stored. A durable, replayable citation is persisted only on an explicit cite: GET /api/v1/entries/{id-or-slug}/evidence, or the MCP cite_query tool. Both are entry-scoped, because evidence_manifests is entry-shaped; a domain answer spanning several sources has no single entry and cannot be persisted through that path."}}