{"id":"a3af0757-f2ec-41c9-be0f-6f636ac7de5c","type":"API","name":"API CROUStillant","slug":"api-croustillant","description":"### 📝 • Introduction CROUStillant est un projet open-source et gratuit qui a pour but de fournir des informations sur les menus des restaurants universitaires CROUS en France et en Outre-Mer. Cette API alimente aussi le site internet de CROUStillant qui est disponible ici : [croustillant.menu/fr…","free_access_class":"FREE_NO_AUTH","auth_type":"NONE","homepage_url":"https://www.data.gouv.fr/dataservices/api-croustillant","docs_url":"https://api.croustillant.menu/openapi.json","repo_url":null,"status":"ACTIVE","verification_state":"STALE","tags":["education"],"logo_url":"https://udata-avatars.s3.rbx.io.cloud.ovh.net/ba/5b9ea32f2b4fd993897c0665756b42-500.png","primary_source_url":"https://www.data.gouv.fr/dataservices/api-croustillant","extraction_confidence":"0.40","created_at":"2026-06-07T22:08:45.788Z","updated_at":"2026-08-12T02:10:41.978Z","last_verified_at":"2026-08-08T23:05:46.662Z","deprecated_at":null,"ranking_score":60,"last_ranked_at":"2026-08-03T15:30:21.890Z","last_seen_at":null,"last_validated_at":null,"last_uptime_at":"2026-08-06T02:41:53.589Z","search_vector":"'/fr':50B '/fr...':195B 'a':159B,198B,278B 'access':81B,135B,226B 'accessible':280B 'across':68B,213B 'aggreg':124B 'aggregating':269B 'aliment':37B 'alimente':182B 'and':215B,244B,254B,270B 'api':1A,36B,75B,146A,181B,220B 'applic':142B 'applications':287B 'at':209B,262B 'aussi':38B,183B 'avail':128B 'available':273B 'but':161B 'by':236B 'cett':35B 'cette':180B 'check':114B,259B 'crous':27B,65B,93B,129B,172B,210B,238B,274B 'croustil':2A,4B,43B,51B,78B 'croustillant':147A,149B,188B,196B,223B 'croustillant.menu':49B,194B 'croustillant.menu/fr':48B 'croustillant.menu/fr...':193B 'daili':83B 'daily':228B 'data':85B,105B,230B,250B 'de':17B,42B,162B,187B 'des':19B,24B,164B,169B 'develop':108B 'developers':253B 'dine':88B 'dining':233B 'dispon':46B 'disponible':191B 'educ':145C 'en':28B,31B,173B,176B 'est':5B,45B,150B,190B 'et':11B,30B,156B,175B 'focus':122B 'focuses':267B 'for':231B,252B,283B 'format':137B,282B 'fournir':18B,163B 'franc':29B,69B 'france':174B,214B 'free':54B,199B 'give':80B 'giving':225B 'gratuit':12B,157B 'hall':89B 'halls':234B 'ici':47B,192B 'in':277B,285B 'independ':98B 'independently':243B 'inform':20B,60B,131B 'information':205B,276B 'informations':165B 'intend':106B 'intended':251B 'internet':41B,186B 'introduct':3B 'introduction':148B 'is':197B,241B 'it':240B 'its':216B 'le':39B,184B 'les':22B,167B 'machin':103B 'machine':248B 'machine-read':102B 'machine-readable':247B 'maintain':97B 'maintained':242B 'manag':90B 'managed':235B 'meal':115B,260B 'menu':84B,130B,229B,275B 'menus':23B,62B,168B,207B 'mer':34B,179B 'more':279B 'network':94B,239B 'offer':100B,116B 'offerings':261B 'offers':245B 'on':206B,268B 'open':9B,56B,154B,201B 'open-sourc':8B,55B 'open-source':153B,200B 'or':288B 'other':286B 'outr':33B 'outre':178B 'outre-m':32B 'outre-mer':177B 'oversea':72B 'overseas':217B 'pour':15B,160B 'power':76B 'powers':221B 'programmat':136B 'programmatic':281B 'project':58B,121B,203B,266B 'projet':7B,152B 'provid':59B 'providing':204B 'public':127B 'publicly':272B 'qui':13B,44B,158B,189B 'readabl':104B 'readable':249B 'republish':126B 'republishing':271B 'restaur':25B,67B,119B 'restaurants':170B,212B,264B 'reus':139B 'reuse':284B 'serv':63B 'served':208B 'site':40B,185B 'sourc':10B,57B 'source':155B,202B 'structur':101B 'structured':246B 'student':87B,110B,232B 'students':255B 'sur':21B,166B 'territori':73B 'territories':218B 'the':219B,222B,237B,265B 'to':227B,258B 'un':6B,151B 'univers':66B,118B 'universitair':26B 'universitaires':171B 'university':211B,263B 'want':112B,257B 'websit':79B,144B 'website':224B 'websites':289B 'who':256B","popularity_score":"0.0000","maintenance_score":"0.7000","institution_id":"7abf1844-58f2-4b35-a86e-1e4a6b7652f7","institution_type":"AGENCY","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.788Z","geographic_scope":"NATIONAL","name_en":null,"description_en":"CROUStillant is a free, open-source project providing information on menus served at CROUS university restaurants across France and its overseas territories. The API powers the CROUStillant website, giving access to daily menu data for student dining halls managed by the CROUS network. It is maintained independently and offers structured, machine-readable data intended for developers and students who want to check meal offerings at university restaurants. The project focuses on aggregating and republishing publicly available CROUS menu information in a more accessible, programmatic format for reuse in other applications or websites.","native_lang":"fr","access_level":"documented","formats":[],"capability_tier":"sample","trust_score":63.25,"access":{"level":"documented","primary":{"kind":"query","label":"Run verified request","method":"GET","url":"https://api.croustillant.menu","source":"probe","runnable":true},"actions":[{"kind":"query","label":"Run verified request","method":"GET","url":"https://api.croustillant.menu","source":"probe","runnable":true},{"kind":"spec","label":"OpenAPI spec","method":"GET","url":"https://api.croustillant.menu/openapi.json","source":"openapi","runnable":false},{"kind":"landing","label":"Visit homepage","method":"GET","url":"https://www.data.gouv.fr/dataservices/api-croustillant","source":"homepage","runnable":false}],"formats":[]},"maturity":{"entry_id":"a3af0757-f2ec-41c9-be0f-6f636ac7de5c","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":"7abf1844-58f2-4b35-a86e-1e4a6b7652f7","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-08-16T13:48:45.413Z"},"api_details":{"id":"14b56e2c-71ee-45c0-b733-c55918c1d093","entry_id":"a3af0757-f2ec-41c9-be0f-6f636ac7de5c","base_url":"https://api.croustillant.menu","openapi_url":"https://api.croustillant.menu/openapi.json","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.croustillant.menu","created_at":"2026-06-07T22:08:45.809Z","updated_at":"2026-06-07T22:08:45.809Z"},"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":"34d8b6ae-89f2-45cf-8964-4ba27f7cb9f3","entry_id":"a3af0757-f2ec-41c9-be0f-6f636ac7de5c","status":"VERIFIED","last_checked_at":"2026-08-08T23:05:46.506Z","p50_latency_ms":961,"p95_latency_ms":null,"last_error":null,"consecutive_failures":0,"created_at":"2026-06-08T12:43:14.787Z","updated_at":"2026-08-08T23:05:46.506Z","consecutive_successes":27,"probe_url":"https://api.croustillant.menu","probe_method":"GET","probe_http_status":200,"probe_content_type":"text/html; charset=utf-8","probe_succeeded_at":"2026-08-08T23:05:46.506Z"},"data_profile":{"id":"153e7865-2bad-440e-adfe-6e53274ebcdd","entry_id":"a3af0757-f2ec-41c9-be0f-6f636ac7de5c","profile_source":"openapi","profile_kind":"dataset","dataset_id":null,"fields":[{"name":"ouvert","role":"parameter","type":"boolean","label":null,"param_in":"query","container":"/v1/restaurants/status","filterable":true,"description":"Filtre les restaurants par statut d'ouverture","description_en":"Filters restaurants by open status."},{"name":"zone","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants","filterable":true,"description":"Filtre les restaurants par zone (insensible à la casse)","description_en":"Filters restaurants by zone (case-insensitive)."},{"name":"ispmr","role":"parameter","type":"boolean","label":null,"param_in":"query","container":"/v1/restaurants","filterable":true,"description":"Filtre les restaurants accessibles aux PMR","description_en":"Filters restaurants accessible to people with reduced mobility."},{"name":"type","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"query","container":"/v1/restaurants","filterable":true,"description":"Filtre les restaurants par code de type","description_en":"Filters restaurants by type code."},{"name":"region","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"query","container":"/v1/restaurants","filterable":true,"description":"Filtre les restaurants par code de région","description_en":"Filters restaurants by region code."},{"name":"actif","role":"parameter","type":"boolean","label":null,"param_in":"query","container":"/v1/restaurants","filterable":true,"description":"Renvoie uniquement les restaurants actifs","description_en":"Returns only active restaurants."},{"name":"offset","role":"parameter","type":"boolean","label":null,"param_in":"query","container":"/v1/taches","filterable":true,"description":"Décalage pour la pagination","description_en":"Offset used for pagination."},{"name":"code","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"path","required":true,"container":"/v1/regions/{code}/restaurants","filterable":true,"description":"ID de la région","description_en":"ID of the region."},{"name":"theme","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/menu/{date}/iframe","filterable":true,"description":"Thème du widget (light, dark)","description_en":"Widget theme (light or dark)."},{"name":"date","role":"parameter","type":"string","label":null,"param_in":"path","required":true,"container":"/v1/restaurants/{code}/menu/{date}/iframe","filterable":true,"description":"Date du menu","description_en":"Date of the menu."},{"name":"limit","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"query","container":"/v1/restaurants/{code}/activity","filterable":true,"description":"Nombre de dernières tâches d'ingestion à retourner (1-100, défaut 20)","description_en":"Number of latest ingestion tasks to return (1-100, default 20)."},{"name":"lang","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/iframe/custom","filterable":true,"description":"Langue (fr, en)","description_en":"Language code (fr, en)."},{"name":"height","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"query","container":"/v1/restaurants/{code}/iframe/custom","filterable":true,"description":"Hauteur fixe du widget en px (200-1200, défaut: 600)","description_en":"Fixed widget height in pixels (200-1200, default 600)."},{"name":"font","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/iframe/custom","filterable":true,"description":"Police (Inter, Roboto, Outfit, Nunito, system)","description_en":"Font used by the widget (Inter, Roboto, Outfit, Nunito, system)."},{"name":"color","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/iframe/custom","filterable":true,"description":"Couleur d'accent hexadécimale sans # (ex: ef4444)","description_en":"Hexadecimal accent color without the # sign."},{"name":"meals","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/iframe/custom","filterable":true,"description":"Repas à afficher dans le bloc menu (matin,midi,soir)","description_en":"Meals to display in the menu block (morning, midday, evening)."},{"name":"blocks","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/iframe/custom","filterable":true,"description":"Blocs à afficher, dans l'ordre souhaité (header,header_text,region,status,address,menu,hours,contact,payment,access,link)","description_en":"Blocks to display, in the desired order."},{"name":"color_infos","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/menu/{date}/image","filterable":true,"description":"Couleur personnalisée pour les informations (format: #RRGGBB ou #RGB)","description_en":"Custom color for information text (hex format)."},{"name":"color_title","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/menu/{date}/image","filterable":true,"description":"Couleur personnalisée pour les titres (format: #RRGGBB ou #RGB)","description_en":"Custom color for titles (hex format)."},{"name":"color_content","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/menu/{date}/image","filterable":true,"description":"Couleur personnalisée pour le contenu (format: #RRGGBB ou #RGB)","description_en":"Custom color for content (hex format)."},{"name":"color_header","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/menu/{date}/image","filterable":true,"description":"Couleur personnalisée pour l'en-tête (format: #RRGGBB ou #RGB)","description_en":"Custom color for the header (hex format)."},{"name":"repas","role":"parameter","type":"string","label":null,"param_in":"query","container":"/v1/restaurants/{code}/menu/{date}/image","filterable":true,"description":"Repas du menu","description_en":"Meal of the menu."},{"name":"libelle","type":"string","label":"Region","description":"Libellé de la région","description_en":"Label of the region."},{"name":"jour","type":"string","label":"Jours","description":"Jours de la semaine","description_en":"Day of the week."},{"name":"ouverture","type":"object","label":"Jours","description":null,"description_en":"Opening details for a given day."},{"name":"acces","type":"string","label":"Restaurant","description":"Informations sur l'accès au restaurant","description_en":"Access information for the restaurant."},{"name":"adresse","type":"string","label":"Restaurant","description":"Adresse du restaurant","description_en":"Address of the restaurant."},{"name":"email","type":"string","label":"Restaurant","description":"Adresse email du restaurant","description_en":"Email address of the restaurant."},{"name":"horaires","type":"array<string>","label":"Restaurant","description":"Horaires d'ouverture du restaurant","description_en":"Opening hours of the restaurant."},{"name":"image_url","type":"string","label":"Restaurant","description":"URL de l'image du restaurant","description_en":"URL of the restaurant's image."},{"name":"jours_ouvert","type":"array<object>","label":"Restaurant","description":"Jours d'ouverture du restaurant","description_en":"Days the restaurant is open."},{"name":"latitude","type":"number (float)","label":"Restaurant","format":"float","description":"Latitude du restaurant","description_en":"Latitude of the restaurant."},{"name":"longitude","type":"number (float)","label":"Restaurant","format":"float","description":"Longitude du restaurant","description_en":"Longitude of the restaurant."},{"name":"nom","type":"string","label":"Restaurant","description":"Nom du restaurant","description_en":"Name of the restaurant."},{"name":"paiement","type":"array<string>","label":"Restaurant","description":"Moyens de paiement acceptés par le restaurant","description_en":"Payment methods accepted by the restaurant."},{"name":"telephone","type":"string","label":"Restaurant","description":"Numéro de téléphone du restaurant","description_en":"Phone number of the restaurant."},{"name":"type_restaurant","type":"object","label":"Restaurant","description":null,"description_en":"Type of restaurant."},{"name":"ordre","type":"integer (int32)","label":"PlatTrie","format":"int32","description":"Ordre du plat dans le menu","description_en":"Order of the dish within the menu."},{"name":"plats","type":"array<object>","label":"Categorie","description":"Liste des plats de la catégorie","description_en":"List of dishes in the category."},{"name":"categories","type":"array<object>","label":"Repas","description":"Liste des catégories du repas","description_en":"List of categories for the meal."},{"name":"debut","type":"string","label":"Tache","description":"Date de début de la tâche","description_en":"Start date of the task."},{"name":"debut_categories","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de catégories récupérées au début de la tâche","description_en":"Number of categories retrieved at the start of the task."},{"name":"debut_compositions","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de compositions récupérées au début de la tâche","description_en":"Number of compositions retrieved at the start of the task."},{"name":"debut_menus","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de menus récupérés au début de la tâche","description_en":"Number of menus retrieved at the start of the task."},{"name":"debut_plats","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de plats récupérés au début de la tâche","description_en":"Number of dishes retrieved at the start of the task."},{"name":"debut_regions","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de régions récupérées au début de la tâche","description_en":"Number of regions retrieved at the start of the task."},{"name":"debut_repas","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de repas récupérés au début de la tâche","description_en":"Number of meals retrieved at the start of the task."},{"name":"debut_restaurants","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de restaurants récupérés au début de la tâche","description_en":"Number of restaurants retrieved at the start of the task."},{"name":"debut_types_restaurants","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de types de restaurants récupérés au début de la tâche","description_en":"Number of restaurant types retrieved at the start of the task."},{"name":"fin","type":"string","label":"Tache","description":"Date de fin de la tâche","description_en":"End date of the task."},{"name":"fin_categories","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de catégories récupérées à la fin de la tâche","description_en":"Number of categories retrieved at the end of the task."},{"name":"fin_compositions","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de compositions récupérées à la fin de la tâche","description_en":"Number of compositions retrieved at the end of the task."},{"name":"fin_menus","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de menus récupérés à la fin de la tâche","description_en":"Number of menus retrieved at the end of the task."},{"name":"fin_plats","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de plats récupérés à la fin de la tâche","description_en":"Number of dishes retrieved at the end of the task."},{"name":"fin_regions","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de régions récupérées à la fin de la tâche","description_en":"Number of regions retrieved at the end of the task."},{"name":"fin_repas","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de repas récupérés à la fin de la tâche","description_en":"Number of meals retrieved at the end of the task."},{"name":"fin_restaurants","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de restaurants récupérés à la fin de la tâche","description_en":"Number of restaurants retrieved at the end of the task."},{"name":"fin_types_restaurants","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de types de restaurants récupérés à la fin de la tâche","description_en":"Number of restaurant types retrieved at the end of the task."},{"name":"id","type":"string","label":"Tache","description":"Identifiant de la tâche","description_en":"Identifier of the task."},{"name":"requetes","type":"integer (int32)","label":"Tache","format":"int32","description":"Nombre de requêtes effectuées","description_en":"Number of requests performed."},{"name":"CROUStillant","type":"array<object>","label":"ChangeLog","description":"Changelog des services de CROUStillant","description_en":"Changelog of the CROUStillant services."}],"field_count":61,"sample_records":null,"record_count":null,"data_size_bytes":null,"dataset_count":null,"query_examples":[{"url":"https://api.croustillant.menu/openapi.json","curl":"curl -s 'https://api.croustillant.menu/openapi.json' -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-07-21T23:56:44.009Z","run_id":"7a09a0ec-552b-4600-99dd-da6e98424142","created_at":"2026-06-12T19:31:01.620Z","updated_at":"2026-08-05T06:18:20.309Z","license_raw":null,"license_id":null,"consecutive_failure_count":0,"last_error_at":null,"last_error_message":null,"previewable":false},"datasets":[],"limits":[]}