{"openapi":"3.1.0","info":{"title":"Allez viens · API publique","version":"1.0.0","description":"API de lecture des sorties et de la vie locale. Le site et les applis d’Allez viens l’utilisent comme tout partenaire. Dates en UTC (ISO 8601) ; « ce week-end », « ce soir » et les vacances scolaires sont calculés en heure de Paris."},"servers":[{"url":"http://qzsnetpxwwexwteblhyt.supabase.co/api"}],"security":[{"apiKey":[]}],"paths":{"/v1/search":{"get":{"operationId":"search","summary":"Rechercher des sorties (Où, Quand, Qui)","description":"Un résultat par événement, avec sa prochaine séance dans la plage, le prix total pour le groupe et le nombre d’événements par valeur de filtre.","parameters":[{"name":"q","in":"query","required":false,"description":"Mot-clé libre","schema":{"type":"string","maxLength":200}},{"name":"ids","in":"query","required":false,"description":"Seulement ces événements (favoris, listes)","schema":{"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"style":"form","explode":false},{"name":"organizer","in":"query","required":false,"description":"Seulement les sorties de cet organisateur (son id, page organisateur)","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"venue","in":"query","required":false,"description":"Seulement les sorties de ce lieu (son id : salle, église, parc…), widget d’un lieu","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"town","in":"query","required":false,"description":"Slug de la commune (centre de la recherche)","schema":{"type":"string","maxLength":100}},{"name":"event","in":"query","required":false,"description":"Seulement les lieux de cet événement à plusieurs lieux (adresse de sa fiche principale : portes-ouvertes-en-graves-podensac)","schema":{"type":"string","maxLength":200,"pattern":"^[a-z0-9-]+$"}},{"name":"notEvent","in":"query","required":false,"description":"Sans les lieux de cet événement à plusieurs lieux (adresse de sa fiche principale)","schema":{"type":"string","maxLength":200,"pattern":"^[a-z0-9-]+$"}},{"name":"prefer","in":"query","required":false,"description":"Familles que la personne aime (« tes envies ») : elles montent, rien n’est exclu","schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":40,"pattern":"^[a-z_]+$"}},"style":"form","explode":false},{"name":"learned","in":"query","required":false,"description":"Familles apprises de ce que la personne regarde et enregistre (`famille:affinité`, affinité entre 0 et 1) : elles montent moins que « tes envies », rien n’est exclu","schema":{"maxItems":12,"type":"array","items":{"type":"string","maxLength":48,"pattern":"^[a-z_]{2,40}:(0(\\.\\d{1,3})?|1(\\.0{1,3})?)$"}},"style":"form","explode":false},{"name":"home","in":"query","required":false,"description":"Commune de la personne (slug) : distances et classement partent d’elle, sans limiter la recherche (spec 03)","schema":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"}},{"name":"place","in":"query","required":false,"description":"Seulement ce lieu : commune, zone ou département (sans rayon)","schema":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"radiusKm","in":"query","required":false,"description":"Rayon autour du centre, en km","schema":{"default":10,"type":"number","minimum":1,"maximum":100}},{"name":"when","in":"query","required":false,"description":"Raccourci de dates, en heure de Paris ; now : en cours ou qui commence dans les deux heures","schema":{"type":"string","enum":["today","tonight","tomorrow","weekend","week","schoolHolidays","now"]}},{"name":"from","in":"query","required":false,"description":"Début de la plage (ISO 8601)","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"to","in":"query","required":false,"description":"Fin de la plage, exclue (ISO 8601)","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"fromOn","in":"query","required":false,"description":"Premier jour de la plage, en heure de Paris","schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"toOn","in":"query","required":false,"description":"Dernier jour de la plage, inclus, en heure de Paris","schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"adults","in":"query","required":false,"schema":{"default":2,"type":"integer","minimum":0,"maximum":20}},{"name":"children","in":"query","required":false,"description":"Âge de chaque enfant","schema":{"maxItems":30,"type":"array","items":{"type":"integer","minimum":0,"maximum":17}},"style":"form","explode":false},{"name":"type","in":"query","required":false,"schema":{"default":"all","type":"string","enum":["all","events","places"]}},{"name":"categories","in":"query","required":false,"schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"families","in":"query","required":false,"schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"primaryCategories","in":"query","required":false,"description":"Catégorie principale parmi celles-ci (« Selon tes envies » : rien d’une autre famille)","schema":{"maxItems":150,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"tags","in":"query","required":false,"description":"Toutes les étiquettes demandées doivent être présentes","schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"notFamilies","in":"query","required":false,"description":"Jamais une sortie de ces familles (même en catégorie secondaire)","schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"notCategories","in":"query","required":false,"description":"Jamais une sortie de ces catégories (même secondaires)","schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"notPrimaryCategories","in":"query","required":false,"description":"Jamais une sortie dont la catégorie principale est l’une de celles-ci (« Sans les portes ouvertes au domaine ») : ce dont la sortie parle, pas ce qu’elle mentionne aussi","schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"notTags","in":"query","required":false,"description":"Jamais une sortie qui porte une de ces étiquettes (membership_required…)","schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"budgetMaxCents","in":"query","required":false,"description":"Budget total du groupe, en centimes","schema":{"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"free","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"traditions","in":"query","required":false,"description":"Rendez-vous du pays : traditions annuelles et marchés récurrents","schema":{"type":"boolean"}},{"name":"timeOfDay","in":"query","required":false,"schema":{"maxItems":30,"type":"array","items":{"type":"string","enum":["morning","afternoon","evening","night"]}},"style":"form","explode":false},{"name":"moments","in":"query","required":false,"schema":{"maxItems":30,"type":"array","items":{"type":"string","enum":["ends_before_18","weekday_evening","weekday_day"]}},"style":"form","explode":false},{"name":"setting","in":"query","required":false,"schema":{"maxItems":30,"type":"array","items":{"type":"string","enum":["indoor","outdoor","covered"]}},"style":"form","explode":false},{"name":"booking","in":"query","required":false,"schema":{"maxItems":30,"type":"array","items":{"type":"string","enum":["none","advised","required"]}},"style":"form","explode":false},{"name":"duration","in":"query","required":false,"schema":{"maxItems":30,"type":"array","items":{"type":"string","enum":["lt1h","1to3h","halfday","day","multiday"]}},"style":"form","explode":false},{"name":"audience","in":"query","required":false,"schema":{"type":"string","enum":["family","from3","from6","teens","adults"]}},{"name":"verifiedOnly","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"participate","in":"query","required":false,"description":"Pour participer : course, randonnée, atelier, tournoi","schema":{"type":"boolean"}},{"name":"distance","in":"query","required":false,"description":"Distance d’une épreuve : under_10, 10_to_20, 21_to_42, over_42 (km)","schema":{"maxItems":30,"type":"array","items":{"type":"string","enum":["under_10","10_to_20","21_to_42","over_42"]}},"style":"form","explode":false},{"name":"level","in":"query","required":false,"description":"Niveau d’une épreuve","schema":{"maxItems":30,"type":"array","items":{"type":"string","enum":["beginner","intermediate","advanced"]}},"style":"form","explode":false},{"name":"registration","in":"query","required":false,"description":"Inscriptions ouvertes (open) ou pas encore ouvertes (not_open)","schema":{"maxItems":30,"type":"array","items":{"type":"string","enum":["open","not_open"]}},"style":"form","explode":false},{"name":"noCertificate","in":"query","required":false,"description":"Une épreuve sans certificat médical (le PPS n’en est pas un)","schema":{"type":"boolean"}},{"name":"volunteers","in":"query","required":false,"description":"Cherche des bénévoles : appel ouvert, pas au complet, avant sa date limite","schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"schema":{"default":"recommended","type":"string","enum":["recommended","date","price","distance","popularity","newest"]}},{"name":"sessionsLimit","in":"query","required":false,"description":"Séances de chaque événement à renvoyer dans la plage (vue calendrier)","schema":{"default":0,"type":"integer","minimum":0,"maximum":31}},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":20}},{"name":"perPage","in":"query","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":50}},{"name":"counts","in":"query","required":false,"schema":{"default":"all","type":"string","enum":["all","main","none"]}},{"name":"suggestions","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Résultats","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/events/{slug}":{"get":{"operationId":"event","summary":"Fiche d’un événement ou d’un lieu à visiter","description":"Tout ce que montre la fiche : séances à venir, lieux avec la précision de leur adresse et le point d’arrivée, grille tarifaire et prix total pour le groupe demandé, organisateur, série. Un doublon fusionné répond 301 vers la fiche restante ; une fiche retirée ou supprimée répond 410.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"adults","in":"query","required":false,"schema":{"default":2,"type":"integer","minimum":0,"maximum":20}},{"name":"children","in":"query","required":false,"description":"Âge de chaque enfant","schema":{"maxItems":30,"type":"array","items":{"type":"integer","minimum":0,"maximum":17}},"style":"form","explode":false}],"responses":{"200":{"description":"Fiche","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDetail"}}}},"301":{"description":"Doublon fusionné : voir l’en-tête Location"},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Fiche introuvable ou non publiée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Fiche retirée ou supprimée : `gone` donne son genre, sa catégorie et sa commune pour proposer d’autres sorties, jamais son titre","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/organizers/{slug}":{"get":{"operationId":"organizer","summary":"Page publique d’un organisateur","description":"La structure (nom, commune, site, réseaux, vérifiée ou non), ses sorties à venir par date avec le prix pour le groupe demandé, et ses dernières sorties passées. Une structure fusionnée répond 301 vers celle qui reste ; une structure qui a demandé à ne plus être suivie répond 410.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"adults","in":"query","required":false,"schema":{"default":2,"type":"integer","minimum":0,"maximum":20}},{"name":"children","in":"query","required":false,"description":"Âge de chaque enfant","schema":{"maxItems":30,"type":"array","items":{"type":"integer","minimum":0,"maximum":17}},"style":"form","explode":false},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"Organisateur","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizerDetail"}}}},"301":{"description":"Structure fusionnée : voir l’en-tête Location"},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Organisateur inconnu ou sans fiche publique","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Organisateur qui ne veut plus être suivi","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/venues/{slug}":{"get":{"operationId":"venue","summary":"Page publique d’un lieu","description":"Un lieu (château, musée, salle des fêtes…) : ce qu’il y a à voir (labels, cadre), ses activités ouvertes au public avec leur état d’ouverture, ses événements à venir par date avec le prix pour le groupe demandé, qui le tient. Une ancienne adresse (lieu renommé ou fusionné) répond 301.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"adults","in":"query","required":false,"schema":{"default":2,"type":"integer","minimum":0,"maximum":20}},{"name":"children","in":"query","required":false,"description":"Âge de chaque enfant","schema":{"maxItems":30,"type":"array","items":{"type":"integer","minimum":0,"maximum":17}},"style":"form","explode":false}],"responses":{"200":{"description":"Lieu","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VenueDetail"}}}},"301":{"description":"Lieu renommé ou fusionné : voir l’en-tête Location"},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Lieu inconnu, ou rien de public ne s’y passe","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Lieu supprimé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/places":{"get":{"operationId":"places","summary":"Autocomplétion du champ Où","description":"Communes, quartiers et lieux dont le nom ressemble à la saisie, fautes et accents tolérés. Une commune hors zone est renvoyée avec isCovered à false.","parameters":[{"name":"q","in":"query","required":true,"description":"Début ou partie du nom, fautes tolérées","schema":{"type":"string","minLength":2,"maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"default":8,"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"Lieux, du plus pertinent au moins pertinent","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacesResponse"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/places/{slug}":{"get":{"operationId":"place","summary":"Une commune, une zone ou un département","description":"Ce que montre une page de lieu : rattachements (département, zone, secteurs), communes couvertes voisines, rayon de « autour de ». Un ancien nom ou le nom officiel d’une intercommunalité répond 301 vers le lieu.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lieu","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceDetail"}}}},"301":{"description":"Alias : voir l’en-tête Location"},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Lieu inconnu","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/place-pages/{slug}":{"get":{"operationId":"placePage","summary":"Tout ce que montre une page de lieu, en une requête","description":"Le lieu (comme /v1/places/{slug}, avec `indexing`), les sorties de la page (comme /v1/search), les 60 prochains jours du lieu, les nombres de sorties des pages de période et, pour une commune, « autour ». Une facette inconnue répond 404 ; un ancien nom répond 301 vers le lieu.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"facet","in":"query","required":false,"description":"Segment de la page : période (ce-week-end), famille ou catégorie par son nom (loto-et-quine), enfants, gratuit, accessible, rendez-vous-du-pays","schema":{"type":"string","minLength":1,"maxLength":80}},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":20}},{"name":"on","in":"query","required":false,"description":"Jour de la page, en heure de Paris : ignoré par l’API, il ne sert qu’aux caches","schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"towns","in":"query","required":false,"description":"Communes d’une zone (`place.towns`) : toutes (all, par défaut), ou seulement celles où la liste compte des sorties (counted, 60 au plus, celles du filtre town_slug de `results`)","schema":{"default":"all","type":"string","enum":["all","counted"]}}],"responses":{"200":{"description":"Page de lieu","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacePage"}}}},"301":{"description":"Alias : voir l’en-tête Location"},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Lieu ou facette inconnus","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/nearest-town":{"get":{"operationId":"nearestTown","summary":"La commune couverte la plus proche","description":"Pour « me localiser » : la commune couverte la plus proche, à 30 km au plus ; null au-delà.","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180}}],"responses":{"200":{"description":"Commune, ou null","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NearestTown"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/parse":{"get":{"operationId":"parse","summary":"Une phrase en filtres","description":"Recherche en langage naturel : Claude traduit la phrase en paramètres de /v1/search (lieu, dates, groupe, catégories, budget…), jamais en résultats. Sans rapport, détournée ou trop lente : understood false, chercher les mots tels quels.","parameters":[{"name":"q","in":"query","required":true,"description":"La phrase, telle que tapée ou dictée","schema":{"type":"string","minLength":1,"maxLength":300}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180}}],"responses":{"200":{"description":"Paramètres à appliquer, ou rien","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Parse"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/plan":{"get":{"operationId":"plan","summary":"Planifier un week-end (une à trois journées)","description":"Une journée qui s’enchaîne par jour demandé : matin, pause de midi, après-midi, soir, une sortie par créneau (quatre au plus), choisies parmi les meilleurs résultats de la recherche avec les mêmes filtres, par un calcul déterministe : horaires des séances, heures d’ouverture et durée de visite, âges, budget du groupe, trajets estimés (« environ », sans service d’itinéraire), fini avant 18 h avec de jeunes enfants, abri s’il pleut. Chaque étape propose d’autres idées pour son créneau ; un créneau vide dit pourquoi.","parameters":[{"name":"days","in":"query","required":true,"description":"Jours à planifier (heure de Paris), trois au plus","schema":{"maxItems":3,"type":"array","items":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"style":"form","explode":false},{"name":"town","in":"query","required":false,"description":"Commune de départ (slug), ma commune par défaut côté appli","schema":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"mode","in":"query","required":false,"description":"Moyen de transport","schema":{"default":"car","type":"string","enum":["car","bike","walk"]}},{"name":"pace","in":"query","required":false,"description":"relaxed : deux sorties par jour au plus ; full : quatre","schema":{"default":"full","type":"string","enum":["relaxed","full"]}},{"name":"radiusKm","in":"query","required":false,"description":"Rayon autour du départ (par défaut selon le moyen : 20, 8 ou 2 km)","schema":{"type":"number","minimum":1,"maximum":60}},{"name":"adults","in":"query","required":false,"schema":{"default":2,"type":"integer","minimum":0,"maximum":20}},{"name":"children","in":"query","required":false,"description":"Âge de chaque enfant ; sous 6 ans, tout finit avant 18 h","schema":{"maxItems":10,"type":"array","items":{"type":"integer","minimum":0,"maximum":17}},"style":"form","explode":false},{"name":"budgetMaxCents","in":"query","required":false,"description":"Budget total du groupe pour tout le programme, en centimes","schema":{"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"prefer","in":"query","required":false,"description":"Familles que la personne aime (« tes envies ») : elles montent","schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":40,"pattern":"^[a-z_]+$"}},"style":"form","explode":false},{"name":"pin","in":"query","required":false,"description":"Séances épinglées (ou ajoutées depuis les favoris) : id, 2026-10-10:id, ou 2026-10-10:afternoon:id pour la garder ce jour-là, dans ce créneau","schema":{"maxItems":12,"type":"array","items":{"type":"string","pattern":"^(?:\\d{4}-\\d{2}-\\d{2}:(?:(?:morning|afternoon|evening):)?)?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}},"style":"form","explode":false},{"name":"keep","in":"query","required":false,"description":"Étapes du programme affiché qui restent quand une autre change (même forme que pin) ; elles cèdent la place à une séance épinglée","schema":{"maxItems":12,"type":"array","items":{"type":"string","pattern":"^(?:\\d{4}-\\d{2}-\\d{2}:(?:(?:morning|afternoon|evening):)?)?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"}},"style":"form","explode":false},{"name":"fixed","in":"query","required":false,"description":"Programme partagé : rien d’autre que les séances de pin et keep","schema":{"type":"string","enum":["0","1","true","false"]}},{"name":"exclude","in":"query","required":false,"description":"Événements à écarter (« Autre idée »)","schema":{"maxItems":40,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"style":"form","explode":false},{"name":"fill","in":"query","required":false,"description":"Avec keep : les seuls créneaux où une nouvelle sortie peut venir (celui que « Autre idée » libère), sous la forme 2026-10-10:evening","schema":{"maxItems":9,"type":"array","items":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}:(morning|afternoon|evening)$"}},"style":"form","explode":false},{"name":"skip","in":"query","required":false,"description":"Créneaux retirés, sous la forme 2026-10-10:evening","schema":{"maxItems":9,"type":"array","items":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}:(morning|afternoon|evening)$"}},"style":"form","explode":false}],"responses":{"200":{"description":"Programme","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Plan"}}}},"400":{"description":"Paramètres invalides, ou commune de départ inconnue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/now":{"get":{"operationId":"now","summary":"En ce moment, autour d’un point ou d’une commune","description":"Les séances en cours ou qui commencent dans les deux heures (une séance sans fin est comptée deux heures) et les lieux à visiter ouverts, autour de la position (jamais gardée) ou de ma commune, dans le rayon de la zone (15 km au plus). Chaque sortie dit où elle en est (« encore 40 min », « commence dans 25 min », « ferme bientôt ») et le trajet estimé à pied et en voiture (« environ », sans service d’itinéraire). Ordre : à l’abri d’abord s’il pleut, puis les plus proches, puis par heure. Peu ou rien : la suite de la journée. La même fenêtre est le raccourci when=now de /v1/search.","parameters":[{"name":"town","in":"query","required":false,"description":"Commune (slug) : ma commune quand la position n’est pas donnée","schema":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"radiusKm","in":"query","required":false,"description":"Rayon en km ; par défaut celui de la zone, 15 km au plus","schema":{"type":"number","minimum":1,"maximum":50}},{"name":"adults","in":"query","required":false,"schema":{"default":2,"type":"integer","minimum":0,"maximum":20}},{"name":"children","in":"query","required":false,"description":"Âge de chaque enfant : le prix est celui du groupe","schema":{"maxItems":10,"type":"array","items":{"type":"integer","minimum":0,"maximum":17}},"style":"form","explode":false},{"name":"type","in":"query","required":false,"description":"events : séances ; places : lieux à visiter ouverts","schema":{"default":"all","type":"string","enum":["all","events","places"]}},{"name":"limit","in":"query","required":false,"schema":{"default":30,"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"En ce moment","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Now"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Commune inconnue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/rental-venues":{"get":{"operationId":"rentalVenues","summary":"Trouver un lieu pour un événement","description":"Les lieux qui accueillent un mariage, un anniversaire, un séminaire, une assemblée générale…, seulement ceux dont le profil de location est publié, autour d’une commune ou d’une position (jamais gardée), ou dans toute la France. Un critère écarte les lieux dont on sait qu’ils n’y répondent pas ; ceux dont la réponse est inconnue restent, après les autres, avec « unknown ». Ordre : correspondance aux critères, distance (par tranches de 5 km), complétude de la fiche, puis vie du lieu (événements publics accueillis). Aucune place payée n’entre dans cet ordre. Rien dans le rayon : « wider » dit combien de lieux un rayon plus large contient. Chaque lieu a sa page, avec son formulaire de demande.","parameters":[{"name":"town","in":"query","required":false,"description":"Commune (slug) autour de laquelle chercher","schema":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"}},{"name":"lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"radiusKm","in":"query","required":false,"description":"Rayon autour de la commune ou de la position, en km","schema":{"default":20,"type":"number","minimum":1,"maximum":100}},{"name":"occasion","in":"query","required":false,"description":"Occasion (référentiel occasions : wedding, birthday, seminar…)","schema":{"type":"string","maxLength":40,"pattern":"^[a-z_]+$"}},{"name":"guests","in":"query","required":false,"description":"Nombre d’invités : écarte les lieux trop petits, garde ceux dont la capacité est inconnue (classés après)","schema":{"type":"integer","minimum":1,"maximum":100000}},{"name":"budget","in":"query","required":false,"description":"Budget en euros : comparé au prix « dès », indicatif","schema":{"type":"integer","minimum":0,"maximum":1000000}},{"name":"caterer","in":"query","required":false,"description":"free : traiteur libre ; imposed : traiteur imposé, liste ou cuisine du lieu","schema":{"type":"string","enum":["free","imposed"]}},{"name":"residents","in":"query","required":false,"description":"open : sans les lieux réservés aux habitants d’une autre commune que celle demandée ; all : tous, chacun dit s’il est réservé","schema":{"default":"all","type":"string","enum":["all","open"]}},{"name":"resident","in":"query","required":false,"description":"La personne habite la commune demandée (town) : no écarte les lieux réservés aux habitants de cette commune ; yes, ou sans réponse, les montre. Les lieux réservés à une autre commune restent, plus bas.","schema":{"type":"string","enum":["yes","no"]}},{"name":"kind","in":"query","required":false,"description":"Types de lieu","schema":{"maxItems":12,"type":"array","items":{"type":"string","enum":["community_hall","castle_estate","farm_barn","restaurant","hotel","conference_centre","cultural","sports_hall","outdoor","association_room","coworking","other"]}},"style":"form","explode":false},{"name":"q","in":"query","required":false,"description":"Mots du nom du lieu ou de sa commune","schema":{"type":"string","maxLength":100}},{"name":"sort","in":"query","required":false,"schema":{"default":"relevance","type":"string","enum":["relevance","distance","capacity","price"]}},{"name":"page","in":"query","required":false,"schema":{"default":1,"type":"integer","minimum":1,"maximum":10}},{"name":"perPage","in":"query","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Lieux","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalVenues"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Commune inconnue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/selection":{"get":{"operationId":"selection","summary":"Le choix de la rédaction","description":"La sélection de la semaine d’une zone, faite par l’équipe : un titre, un mot, et les sorties (identifiants à passer à /v1/search?ids=). Rien tant qu’elle n’est pas publiée.","parameters":[{"name":"zone","in":"query","required":true,"description":"Slug de la zone","schema":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"}}],"responses":{"200":{"description":"La sélection, ou rien","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Selection"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ambassadors/picks":{"get":{"operationId":"ambassadorPicks","summary":"Les choix des ambassadeurs du coin","description":"Les sorties choisies cette semaine par les ambassadeurs d’une zone (habitants choisis par l’équipe), chacune avec son pourquoi et qui l’a choisie (prénom, commune). Les sorties elles-mêmes viennent de /v1/search?ids=.","parameters":[{"name":"zone","in":"query","required":true,"description":"Slug de la zone ou du secteur","schema":{"type":"string","maxLength":100,"pattern":"^[a-z0-9-]+$"}}],"responses":{"200":{"description":"Les choix de la semaine, les plus récents d’abord","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmbassadorPicks"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/ambassadors/{slug}":{"get":{"operationId":"ambassador","summary":"Profil public d’un ambassadeur","description":"Prénom, commune, quelques mots et les choix de la semaine. Seulement le profil que la personne a accepté de montrer.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ambassadeur","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ambassador"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Ambassadeur inconnu ou profil non public","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/pulse":{"get":{"operationId":"pulse","summary":"Une zone en chiffres","description":"Pour une zone ou un secteur : sorties des 30 prochains jours, communes où elles ont lieu, et celles qu’une source a confirmées ces dernières 24 heures. Agrégats seulement.","parameters":[{"name":"place","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Chiffres de la zone","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pulse"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Lieu inconnu","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/coverage":{"get":{"operationId":"coverage","summary":"La carte de France","description":"Les zones couvertes (statut, départements, centre, séances des 30 prochains jours) et le nombre de personnes en liste d’attente par département. Agrégats seulement.","responses":{"200":{"description":"Zones et liste d’attente","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Coverage"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/sitemap":{"get":{"operationId":"sitemap","summary":"Pages à lister pour les moteurs de recherche","description":"Zones couvertes et secteurs, départements, communes au-dessus du seuil d’indexation (3 sorties sur 60 jours), fiches publiées à venir avec leur dernière modification, organisateurs, et les pages publiées du centre d’aide avec leurs langues.","responses":{"200":{"description":"Entrées du plan de site","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sitemap"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/taxonomy":{"get":{"operationId":"taxonomy","summary":"Familles, catégories et étiquettes","description":"Les libellés des filtres de recherche. Change rarement : à mettre en cache une heure.","responses":{"200":{"description":"Taxonomie","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomyResponse"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/help":{"get":{"operationId":"helpHome","summary":"Accueil du centre d’aide","description":"Pour un public (`audience`, les habitants par défaut) : ses guides « Pour bien démarrer » et ses articles principaux ; puis les catégories et leurs premiers articles. Un article pas encore traduit dans la langue demandée vient en français (`locale` le dit).","parameters":[{"name":"lang","in":"query","required":false,"description":"Langue voulue (fr, en…) ; sinon Accept-Language, sinon le français","schema":{"type":"string","pattern":"^[a-z]{2}$"}},{"name":"audience","in":"query","required":false,"description":"Pour qui : habitants, organisateurs, communes et offices, partenaires","schema":{"default":"residents","type":"string","enum":["residents","organisers","territories","partners"]}}],"responses":{"200":{"description":"Accueil","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HelpHome"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/help/topics":{"get":{"operationId":"helpTopics","summary":"Tous les sujets du centre d’aide","description":"Les catégories et tous leurs articles. Avec `audience` : les articles de ce public seulement, ses catégories d’abord.","parameters":[{"name":"lang","in":"query","required":false,"description":"Langue voulue (fr, en…) ; sinon Accept-Language, sinon le français","schema":{"type":"string","pattern":"^[a-z]{2}$"}},{"name":"audience","in":"query","required":false,"description":"Sans valeur : les sujets de tout le monde","schema":{"type":"string","enum":["residents","organisers","territories","partners"]}}],"responses":{"200":{"description":"Sujets","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HelpTopics"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/help/search":{"get":{"operationId":"helpSearch","summary":"Chercher dans le centre d’aide","description":"Dès la deuxième lettre : chaque mot compte (début d’un mot du titre, du résumé ou du texte), les articles qui en contiennent le plus d’abord.","parameters":[{"name":"lang","in":"query","required":false,"description":"Langue voulue (fr, en…) ; sinon Accept-Language, sinon le français","schema":{"type":"string","pattern":"^[a-z]{2}$"}},{"name":"q","in":"query","required":true,"description":"Les mots cherchés, dès la deuxième lettre","schema":{"type":"string","minLength":2,"maxLength":120}},{"name":"limit","in":"query","required":false,"schema":{"default":8,"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"Articles trouvés","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HelpSearch"}}}},"400":{"description":"Paramètres invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/help/categories/{slug}":{"get":{"operationId":"helpCategory","summary":"Une catégorie du centre d’aide et ses articles","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Langue voulue (fr, en…) ; sinon Accept-Language, sinon le français","schema":{"type":"string","pattern":"^[a-z]{2}$"}}],"responses":{"200":{"description":"Catégorie","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HelpCategory"}}}},"301":{"description":"Ancienne adresse : voir l’en-tête Location"},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Catégorie inconnue ou sans article publié","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/help/articles/{slug}":{"get":{"operationId":"helpArticle","summary":"Un article du centre d’aide","description":"Le texte en Markdown léger, sa catégorie, ses langues publiées et jusqu’à quatre articles liés. Sans traduction dans la langue demandée : le français, avec `isFallback`.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Langue voulue (fr, en…) ; sinon Accept-Language, sinon le français","schema":{"type":"string","pattern":"^[a-z]{2}$"}}],"responses":{"200":{"description":"Article","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HelpArticle"}}}},"301":{"description":"Ancienne adresse : voir l’en-tête Location"},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Article inconnu ou non publié","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/feeds/places/{file}":{"get":{"operationId":"placeFeed","summary":"Agenda abonnable d’une commune, d’une zone ou d’un secteur (iCalendar)","description":"Les séances des trois prochains mois (et de la semaine passée), 1 500 au plus, à ajouter dans Google Agenda, Apple Calendrier ou Outlook : identifiant stable par séance, SEQUENCE et LAST-MODIFIED à chaque changement, séance annulée gardée avec STATUS:CANCELLED, à relire toutes les 6 heures. Les lieux à visiter n’y sont pas. Accepte les filtres d’une page de lieu (famille, catégorie, gratuit, en famille, accessible, rendez-vous du pays).","parameters":[{"name":"file","in":"path","required":true,"description":"Slug du lieu suivi de .ics (langon-33.ics)","schema":{"type":"string"}},{"name":"categories","in":"query","required":false,"schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"families","in":"query","required":false,"schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"tags","in":"query","required":false,"description":"Toutes les étiquettes demandées doivent être présentes","schema":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":50}},"style":"form","explode":false},{"name":"free","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"traditions","in":"query","required":false,"description":"Rendez-vous du pays : traditions annuelles et marchés récurrents","schema":{"type":"boolean"}},{"name":"audience","in":"query","required":false,"schema":{"type":"string","enum":["family","from3","from6","teens","adults"]}},{"name":"site","in":"query","required":false,"description":"Origine https du site qui sert le flux : les liens des événements y mènent (sinon le site public).","schema":{"type":"string"}}],"responses":{"200":{"description":"Agenda (RFC 5545)","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"text/calendar":{"schema":{"type":"string"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Lieu inconnu","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/feeds/organizers/{file}":{"get":{"operationId":"organizerFeed","summary":"Agenda abonnable d’un organisateur (iCalendar)","description":"Les séances des trois prochains mois (et de la semaine passée), 1 500 au plus, à ajouter dans Google Agenda, Apple Calendrier ou Outlook : identifiant stable par séance, SEQUENCE et LAST-MODIFIED à chaque changement, séance annulée gardée avec STATUS:CANCELLED, à relire toutes les 6 heures. Les lieux à visiter n’y sont pas. Une structure qui a demandé à ne plus être suivie répond 410.","parameters":[{"name":"file","in":"path","required":true,"description":"Slug de l’organisateur suivi de .ics","schema":{"type":"string"}},{"name":"site","in":"query","required":false,"description":"Origine https du site qui sert le flux : les liens des événements y mènent (sinon le site public).","schema":{"type":"string"}}],"responses":{"200":{"description":"Agenda (RFC 5545)","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"text/calendar":{"schema":{"type":"string"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Organisateur inconnu","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Organisateur qui ne veut plus être suivi","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/feeds/favorites/{file}":{"get":{"operationId":"favoritesFeed","summary":"Agenda abonnable privé d’un compte (iCalendar)","description":"Les séances des trois prochains mois (et de la semaine passée), 1 500 au plus, à ajouter dans Google Agenda, Apple Calendrier ou Outlook : identifiant stable par séance, SEQUENCE et LAST-MODIFIED à chaque changement, séance annulée gardée avec STATUS:CANCELLED, à relire toutes les 6 heures. Les lieux à visiter n’y sont pas. La clé est le jeton secret du compte (« Mon compte » → agenda) : le flux reprend ses sorties enregistrées et ses « J'y vais », n’est jamais mis en cache, et un jeton supprimé répond 410 (pour décrocher les agendas abonnés).","parameters":[{"name":"file","in":"path","required":true,"description":"Jeton privé du compte suivi de .ics","schema":{"type":"string"}},{"name":"site","in":"query","required":false,"description":"Origine https du site qui sert le flux : les liens des événements y mènent (sinon le site public).","schema":{"type":"string"}}],"responses":{"200":{"description":"Agenda (RFC 5545)","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}},"content":{"text/calendar":{"schema":{"type":"string"}}}},"401":{"description":"Clé d’API absente ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Jeton inconnu","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Jeton supprimé : se désabonner","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requêtes autorisées par minute"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes cette minute"},"X-RateLimit-Reset":{"schema":{"type":"string","format":"date-time"},"description":"Début de la minute suivante"}}}}}},"/v1/health":{"get":{"operationId":"health","summary":"L’API répond","security":[],"responses":{"200":{"description":"{ ok: true }"}}}},"/v1/health/search":{"get":{"operationId":"healthSearch","summary":"Le moteur de recherche répond (sonde sans clé, jamais en cache)","security":[],"responses":{"200":{"description":"État et temps de réponse de la recherche"}}}},"/v1/health/db":{"get":{"operationId":"healthDb","summary":"La base répond (sonde bornée, au plus une par 15 s, jamais en cache)","security":[],"responses":{"200":{"description":"État et temps de réponse de la base (`ok`, `ms`, `path`), et les compteurs de l’instance : appels `direct` et `rest` depuis son démarrage, `paused` et `pausedForMs` (chemin direct en pause), `pauses`, `breaker` (coupe-circuit ouvert)"}}}},"/v1/openapi.json":{"get":{"operationId":"openapi","summary":"Cette spécification","security":[],"responses":{"200":{"description":"Spécification OpenAPI"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-Api-Key"}},"schemas":{"SearchResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre d’événements trouvés (après le budget)"},"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"perPage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"center":{"anyOf":[{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"radiusKm":{"type":"number"}},"required":["lat","lon","radiusKm"],"additionalProperties":false},{"type":"null"}]},"range":{"type":"object","properties":{"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["start","end"],"additionalProperties":false},"results":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false}},"facets":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["value","count"],"additionalProperties":false}},"description":"Nombre d’événements par valeur de chaque filtre. Pour un filtre à choix multiples (catégories, moment, cadre, réservation, durée), le compte ignore sa propre sélection ; audience_filter compte chaque valeur du filtre audience."},"suggestions":{"type":"array","items":{"type":"object","properties":{"change":{"type":"string","enum":["dropKeyword","widenRadius","widenDates","dropFilter","dropFilters"]},"detail":{"type":"string","description":"Mot-clé, nouveau rayon (« 25 km »), « any », ou filtre retiré (clé de filtre, « tag:<id> » ou « budget »)"},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["change","detail","total"],"additionalProperties":false},"description":"Quand rien ne correspond : ce que chaque assouplissement donnerait"},"programmes":{"description":"Événements à plusieurs lieux qui ont au moins 3 lieux parmi les résultats, et celui des filtres event et notEvent : de quoi proposer « seulement » ou « sans », l’ordre ne change pas","type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Adresse de la fiche principale (paramètres event et notEvent)"},"title":{"type":"string"},"count":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Ses lieux parmi les résultats ; null quand ils sont écartés (notEvent)"},"filter":{"anyOf":[{"type":"string","enum":["event","notEvent"]},{"type":"null"}],"description":"Le filtre en cours sur cet événement, ou null : seulement proposé"}},"required":["slug","title","count","filter"],"additionalProperties":false}},"dominant":{"description":"La catégorie principale qui occupe au moins 30 % des résultats (20 résultats au moins, et jamais la totalité) : de quoi proposer « sans » ou « seulement » celle-là, par notPrimaryCategories et primaryCategories. Absente dès qu’une catégorie est demandée.","anyOf":[{"type":"object","properties":{"category":{"type":"string","description":"Identifiant de la catégorie principale (taxonomie)"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Ses sorties parmi les résultats"}},"required":["category","count"],"additionalProperties":false},{"type":"null"}]}},"required":["total","page","perPage","center","range","results","facets","suggestions"],"additionalProperties":false},"PlacesResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"places":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["town","neighborhood","venue","poi","zone","department"]},"id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"Absent pour un département (repéré par son slug)"},"slug":{"description":"Slug de la commune, du quartier, de la zone ou du département (`place=`)","type":["string","null"]},"zoneKind":{"anyOf":[{"type":"string","enum":["launch","area","theme"]},{"type":"null"}],"description":"Pour une zone : territoire ouvert, secteur ou pays"},"name":{"type":"string"},"town":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},{"type":"null"}],"description":"Commune d’un quartier, d’un lieu ou d’un point d’intérêt"},"department":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"}},"required":["code","name"],"additionalProperties":false},{"type":"null"}],"description":"Département de la commune : deux Langon en France"},"lat":{"type":"number"},"lon":{"type":"number"},"isCovered":{"type":"boolean","description":"La zone est ouverte ; sinon l’appli propose la liste d’attente"}},"required":["kind","id","slug","zoneKind","name","town","department","lat","lon","isCovered"],"additionalProperties":false}}},"required":["places"],"additionalProperties":false},"PlaceDetail":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"town"},"slug":{"type":"string"},"name":{"type":"string"},"inseeCode":{"type":"string"},"postcodes":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"population":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"lat":{"type":"number"},"lon":{"type":"number"},"isCovered":{"type":"boolean"},"department":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"}},"required":["slug","name","code"],"additionalProperties":false},{"type":"null"}]},"zone":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"inPhrase":{"type":["string","null"]},"identity":{"type":"object","properties":{"accent":{"description":"Couleur d’accent, #RRGGBB","type":["string","null"]},"motif":{"type":["string","null"]},"tagline":{"type":["string","null"]}},"required":["accent","motif","tagline"],"additionalProperties":false}},"required":["slug","name","inPhrase","identity"],"additionalProperties":false},{"type":"null"}]},"areas":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string"}},"required":["slug","name","kind"],"additionalProperties":false}},"radiusKm":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Rayon de « autour de » pour cette commune"},"nearby":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"distanceKm":{"type":"number"}},"required":["slug","name","distanceKm"],"additionalProperties":false},"description":"Communes couvertes les plus proches, à 25 km au plus"},"indexing":{"description":"Pages de ce lieu à indexer, la même règle que le plan du site","type":"object","properties":{"place":{"type":"boolean"},"facets":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["family","category","special"]},"id":{"type":"string"}},"required":["kind","id"],"additionalProperties":false}}},"required":["place","facets"],"additionalProperties":false}},"required":["kind","slug","name","inseeCode","postcodes","population","lat","lon","isCovered","department","zone","areas","radiusKm","nearby"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"zone"},"zoneKind":{"type":"string","enum":["launch","area","theme"]},"slug":{"type":"string"},"name":{"type":"string"},"inPhrase":{"description":"« en Sud Gironde », « dans le Bazadais »","type":["string","null"]},"shortDescription":{"type":["string","null"]},"isCovered":{"type":"boolean"},"parent":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},{"type":"null"}]},"branding":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"identity":{"type":"object","properties":{"accent":{"description":"Couleur d’accent, #RRGGBB","type":["string","null"]},"motif":{"type":["string","null"]},"tagline":{"type":["string","null"]}},"required":["accent","motif","tagline"],"additionalProperties":false},"areas":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"shortDescription":{"type":["string","null"]}},"required":["slug","name","shortDescription"],"additionalProperties":false}},"towns":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false}},"indexing":{"description":"Pages de ce lieu à indexer, la même règle que le plan du site","type":"object","properties":{"place":{"type":"boolean"},"facets":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["family","category","special"]},"id":{"type":"string"}},"required":["kind","id"],"additionalProperties":false}}},"required":["place","facets"],"additionalProperties":false}},"required":["kind","zoneKind","slug","name","inPhrase","shortDescription","isCovered","parent","branding","identity","areas","towns"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"department"},"slug":{"type":"string"},"name":{"type":"string"},"inPhrase":{"description":"« en Gironde », « dans les Landes »","type":["string","null"]},"code":{"type":"string"},"isCovered":{"type":"boolean"},"zones":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false}},"indexing":{"description":"Pages de ce lieu à indexer, la même règle que le plan du site","type":"object","properties":{"place":{"type":"boolean"},"facets":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["family","category","special"]},"id":{"type":"string"}},"required":["kind","id"],"additionalProperties":false}}},"required":["place","facets"],"additionalProperties":false}},"required":["kind","slug","name","inPhrase","code","isCovered","zones"],"additionalProperties":false}]},"PlacePage":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"place":{"$ref":"#/components/schemas/PlaceDetail","description":"Comme GET /v1/places/{slug}, avec `indexing`"},"facet":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"period"},"slug":{"type":"string"},"when":{"type":"string","enum":["today","tonight","tomorrow","weekend","week","schoolHolidays"]}},"required":["kind","slug","when"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"family"},"slug":{"type":"string"},"familyId":{"type":"string"}},"required":["kind","slug","familyId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"category"},"slug":{"type":"string"},"categoryId":{"type":"string"}},"required":["kind","slug","categoryId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"special"},"slug":{"type":"string","enum":["enfants","gratuit","rendez-vous-du-pays","accessible"]}},"required":["kind","slug"],"additionalProperties":false}]},{"type":"null"}],"description":"La facette lue dans `facet`"},"results":{"anyOf":[{"$ref":"#/components/schemas/SearchResponse"},{"type":"null"}],"description":"Les sorties de la page, comme GET /v1/search (place, facette, par date)"},"window":{"anyOf":[{"$ref":"#/components/schemas/SearchResponse"},{"type":"null"}],"description":"Les 60 prochains jours du lieu avec sa facette, sans sa période : total et filtres"},"periods":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"total":{"description":"Nombre de sorties : plus rendu depuis le 27 octobre 2026","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["slug"],"additionalProperties":false},"description":"Pages de période du lieu (sans facette ou sur une période)"},"around":{"anyOf":[{"$ref":"#/components/schemas/SearchResponse"},{"type":"null"}],"description":"Autour d’une commune, dans son rayon (commune comprise) ; null pour une zone"},"helping":{"description":"Coup de main : les sorties qui cherchent des bénévoles autour d’une commune ou dans la zone (première page sans facette ; null sinon)","anyOf":[{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre d’événements trouvés (après le budget)"},"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"perPage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"center":{"anyOf":[{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"radiusKm":{"type":"number"}},"required":["lat","lon","radiusKm"],"additionalProperties":false},{"type":"null"}]},"range":{"type":"object","properties":{"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["start","end"],"additionalProperties":false},"results":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false}},"facets":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["value","count"],"additionalProperties":false}},"description":"Nombre d’événements par valeur de chaque filtre. Pour un filtre à choix multiples (catégories, moment, cadre, réservation, durée), le compte ignore sa propre sélection ; audience_filter compte chaque valeur du filtre audience."},"suggestions":{"type":"array","items":{"type":"object","properties":{"change":{"type":"string","enum":["dropKeyword","widenRadius","widenDates","dropFilter","dropFilters"]},"detail":{"type":"string","description":"Mot-clé, nouveau rayon (« 25 km »), « any », ou filtre retiré (clé de filtre, « tag:<id> » ou « budget »)"},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["change","detail","total"],"additionalProperties":false},"description":"Quand rien ne correspond : ce que chaque assouplissement donnerait"},"programmes":{"description":"Événements à plusieurs lieux qui ont au moins 3 lieux parmi les résultats, et celui des filtres event et notEvent : de quoi proposer « seulement » ou « sans », l’ordre ne change pas","type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Adresse de la fiche principale (paramètres event et notEvent)"},"title":{"type":"string"},"count":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Ses lieux parmi les résultats ; null quand ils sont écartés (notEvent)"},"filter":{"anyOf":[{"type":"string","enum":["event","notEvent"]},{"type":"null"}],"description":"Le filtre en cours sur cet événement, ou null : seulement proposé"}},"required":["slug","title","count","filter"],"additionalProperties":false}},"dominant":{"description":"La catégorie principale qui occupe au moins 30 % des résultats (20 résultats au moins, et jamais la totalité) : de quoi proposer « sans » ou « seulement » celle-là, par notPrimaryCategories et primaryCategories. Absente dès qu’une catégorie est demandée.","anyOf":[{"type":"object","properties":{"category":{"type":"string","description":"Identifiant de la catégorie principale (taxonomie)"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Ses sorties parmi les résultats"}},"required":["category","count"],"additionalProperties":false},{"type":"null"}]}},"required":["total","page","perPage","center","range","results","facets","suggestions"],"additionalProperties":false},{"type":"null"}]},"opensSoon":{"default":[],"description":"« Ouvre bientôt » (spec 10) : toujours vide depuis le 27 octobre 2026 (retiré des pages de lieu), gardé pour les clients qui le lisent","type":"array","items":{"type":"object","properties":{"opensAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Ouverture des inscriptions"},"result":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false}},"required":["opensAt","result"],"additionalProperties":false}}},"required":["place","facet","results","window","periods","around","opensSoon"],"additionalProperties":false},"NearestTown":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"town":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"distanceKm":{"type":"number"},"isCovered":{"description":"Allez viens couvre cette commune ; absent : couverte (ancienne réponse)","type":"boolean"}},"required":["slug","name","distanceKm"],"additionalProperties":false},{"type":"null"}],"description":"La commune la plus proche, couverte ou non"},"covered":{"description":"La commune couverte la plus proche, à 100 km au plus","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"distanceKm":{"type":"number"}},"required":["slug","name","distanceKm"],"additionalProperties":false},{"type":"null"}]}},"required":["town"],"additionalProperties":false},"Parse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"understood":{"type":"boolean","description":"false : rien compris, chercher les mots tels quels"},"params":{"description":"Paramètres de /v1/search (et de /recherche) à appliquer, en query string","type":["string","null"]},"place":{"anyOf":[{"type":"object","properties":{"label":{"type":"string"},"covered":{"type":"boolean","description":"false : le lieu est hors des zones couvertes"}},"required":["label","covered"],"additionalProperties":false},{"type":"null"}],"description":"Le lieu compris, s’il y en a un"}},"required":["understood","params","place"],"additionalProperties":false},"Plan":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"start":{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"town":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},{"type":"null"}]}},"required":["lat","lon","town"],"additionalProperties":false},"mode":{"type":"string","enum":["car","bike","walk"]},"pace":{"type":"string","enum":["relaxed","full"]},"radiusKm":{"type":"number"},"endBy18":{"type":"boolean","description":"De jeunes enfants : tout finit avant 18 h"},"budgetMaxCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"days":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"steps":{"type":"array","items":{"type":"object","properties":{"slot":{"type":"string","enum":["morning","afternoon","evening"]},"pinned":{"type":"boolean"},"arriveAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Arrivée sur place"},"leaveAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Départ"},"flexible":{"type":"boolean","description":"Visite libre pendant les heures d’ouverture (lieu, exposition, marché)"},"endEstimated":{"type":"boolean","description":"Fin inconnue : deux heures comptées"},"travel":{"type":"object","properties":{"minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Durée estimée, arrondie à 5 minutes"},"km":{"type":"number","description":"Distance estimée par la route"},"mode":{"type":"string","enum":["car","bike","walk"],"description":"À pied pour un trajet de moins de 800 m"}},"required":["minutes","km","mode"],"additionalProperties":false,"description":"Depuis le départ ou l’étape précédente"},"result":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false,"description":"La sortie comme dans la recherche ; nextSession et weather sont ceux de la séance choisie"},"alternatives":{"type":"array","items":{"type":"object","properties":{"arriveAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Arrivée sur place"},"leaveAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Départ"},"flexible":{"type":"boolean","description":"Visite libre pendant les heures d’ouverture (lieu, exposition, marché)"},"endEstimated":{"type":"boolean","description":"Fin inconnue : deux heures comptées"},"travel":{"type":"object","properties":{"minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Durée estimée, arrondie à 5 minutes"},"km":{"type":"number","description":"Distance estimée par la route"},"mode":{"type":"string","enum":["car","bike","walk"],"description":"À pied pour un trajet de moins de 800 m"}},"required":["minutes","km","mode"],"additionalProperties":false,"description":"Depuis le départ ou l’étape précédente"},"result":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false,"description":"La sortie comme dans la recherche ; nextSession et weather sont ceux de la séance choisie"}},"required":["arriveAt","leaveAt","flexible","endEstimated","travel","result"],"additionalProperties":false},"description":"Autres idées pour ce créneau, qui s’enchaînent avec les étapes autour"}},"required":["slot","pinned","arriveAt","leaveAt","flexible","endEstimated","travel","result","alternatives"],"additionalProperties":false}},"returnTravel":{"anyOf":[{"type":"object","properties":{"minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Durée estimée, arrondie à 5 minutes"},"km":{"type":"number","description":"Distance estimée par la route"},"mode":{"type":"string","enum":["car","bike","walk"],"description":"À pied pour un trajet de moins de 800 m"}},"required":["minutes","km","mode"],"additionalProperties":false,"description":"Trajet estimé, jamais un itinéraire : ligne droite multipliée par un facteur de route, à vitesse moyenne (« environ »)"},{"type":"null"}],"description":"Retour au point de départ"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total du groupe pour la journée (prix connus)"},"unknownPrices":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Étapes dont le prix est inconnu"},"emptySlots":{"type":"array","items":{"type":"object","properties":{"slot":{"type":"string","enum":["morning","afternoon","evening"]},"reason":{"type":"string","enum":["nothing","noFit","setAside","pace","youngChildren","skipped"],"description":"nothing : rien à cette heure dans le rayon ; noFit : rien qui s’enchaîne ; setAside : les idées de ce créneau ont été écartées (« Autre idée ») ; pace : journée tranquille ; youngChildren : fini avant 18 h ; skipped : retiré"}},"required":["slot","reason"],"additionalProperties":false},"description":"Créneaux sans sortie, et pourquoi"},"unplacedPins":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"description":"Séances épinglées ou gardées de ce jour qui ne tiennent pas avec les autres"},"dropped":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"description":"Titre, quand la séance est encore connue","type":["string","null"]},"reason":{"type":"string","enum":["overlap","gone"],"description":"overlap : ne tient plus avec les autres étapes ; gone : n’a plus lieu (annulée, passée ou déjà commencée)"}},"required":["id","title","reason"],"additionalProperties":false},"description":"Séances épinglées ou gardées pour ce jour qui manquent au programme, et pourquoi"}},"required":["date","steps","returnTravel","totalCents","unknownPrices","emptySlots","unplacedPins","dropped"],"additionalProperties":false}},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total du groupe pour tout le programme"},"unknownPrices":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["start","mode","pace","radiusKm","endBy18","budgetMaxCents","days","totalCents","unknownPrices"],"additionalProperties":false},"Now":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"Instant de la réponse : à redemander chaque minute"},"origin":{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"town":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},{"type":"null"}],"description":"La commune demandée, ou la commune couverte la plus proche de la position"},"fromPosition":{"type":"boolean","description":"Depuis la position donnée (lat, lon), jamais gardée"}},"required":["lat","lon","town","fromPosition"],"additionalProperties":false},"radiusKm":{"type":"number"},"rainLikely":{"type":"boolean","description":"Pluie probable pendant une des sorties : celles à l’abri passent devant"},"items":{"type":"array","items":{"type":"object","properties":{"result":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false},"live":{"type":"object","properties":{"phase":{"type":"string","enum":["inProgress","startsSoon","later"],"description":"En cours, commence dans les deux heures, ou plus tard aujourd’hui"},"minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"En cours : minutes jusqu’à la fin connue (« encore 1 h 30 »), null toute la journée ou sans fin connue ; sinon minutes avant le début"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"Fin réelle (ni une fin de remplissage à 23 h 59, ni le minuit d’une journée)"},"allDay":{"type":"boolean"},"endingSoon":{"type":"boolean","description":"En cours et finit (un lieu : ferme) dans la demi-heure"}},"required":["phase","minutes","endsAt","allDay","endingSoon"],"additionalProperties":false,"description":"Calculé à l’instant de la réponse (champ at)"},"travel":{"type":"object","properties":{"walk":{"anyOf":[{"type":"object","properties":{"minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Durée estimée, arrondie à 5 minutes"},"km":{"type":"number","description":"Distance estimée par la route"},"mode":{"type":"string","enum":["car","bike","walk"],"description":"À pied pour un trajet de moins de 800 m"}},"required":["minutes","km","mode"],"additionalProperties":false,"description":"Trajet estimé, jamais un itinéraire : ligne droite multipliée par un facteur de route, à vitesse moyenne (« environ »)"},{"type":"null"}],"description":"À pied, si c’est à une demi-heure au plus"},"car":{"type":"object","properties":{"minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Durée estimée, arrondie à 5 minutes"},"km":{"type":"number","description":"Distance estimée par la route"},"mode":{"type":"string","enum":["car","bike","walk"],"description":"À pied pour un trajet de moins de 800 m"}},"required":["minutes","km","mode"],"additionalProperties":false,"description":"Trajet estimé, jamais un itinéraire : ligne droite multipliée par un facteur de route, à vitesse moyenne (« environ »)"}},"required":["walk","car"],"additionalProperties":false}},"required":["result","live","travel"],"additionalProperties":false},"description":"En cours ou qui commencent dans les deux heures (fin estimée à 2 h quand elle manque) : à l’abri d’abord s’il pleut, puis les plus proches, puis par heure"},"later":{"type":"array","items":{"type":"object","properties":{"result":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false},"live":{"type":"object","properties":{"phase":{"type":"string","enum":["inProgress","startsSoon","later"],"description":"En cours, commence dans les deux heures, ou plus tard aujourd’hui"},"minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"En cours : minutes jusqu’à la fin connue (« encore 1 h 30 »), null toute la journée ou sans fin connue ; sinon minutes avant le début"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"Fin réelle (ni une fin de remplissage à 23 h 59, ni le minuit d’une journée)"},"allDay":{"type":"boolean"},"endingSoon":{"type":"boolean","description":"En cours et finit (un lieu : ferme) dans la demi-heure"}},"required":["phase","minutes","endsAt","allDay","endingSoon"],"additionalProperties":false,"description":"Calculé à l’instant de la réponse (champ at)"},"travel":{"type":"object","properties":{"walk":{"anyOf":[{"type":"object","properties":{"minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Durée estimée, arrondie à 5 minutes"},"km":{"type":"number","description":"Distance estimée par la route"},"mode":{"type":"string","enum":["car","bike","walk"],"description":"À pied pour un trajet de moins de 800 m"}},"required":["minutes","km","mode"],"additionalProperties":false,"description":"Trajet estimé, jamais un itinéraire : ligne droite multipliée par un facteur de route, à vitesse moyenne (« environ »)"},{"type":"null"}],"description":"À pied, si c’est à une demi-heure au plus"},"car":{"type":"object","properties":{"minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Durée estimée, arrondie à 5 minutes"},"km":{"type":"number","description":"Distance estimée par la route"},"mode":{"type":"string","enum":["car","bike","walk"],"description":"À pied pour un trajet de moins de 800 m"}},"required":["minutes","km","mode"],"additionalProperties":false,"description":"Trajet estimé, jamais un itinéraire : ligne droite multipliée par un facteur de route, à vitesse moyenne (« environ »)"}},"required":["walk","car"],"additionalProperties":false}},"required":["result","live","travel"],"additionalProperties":false},"description":"Plus tard aujourd’hui, quand il y a peu ou rien en ce moment"}},"required":["at","origin","radiusKm","rainLikely","items","later"],"additionalProperties":false},"RentalVenues":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"perPage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"origin":{"anyOf":[{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"town":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},{"type":"null"}]}},"required":["lat","lon","town"],"additionalProperties":false},{"type":"null"}],"description":"Le point cherché ; null : toute la France"},"radiusKm":{"type":["number","null"]},"results":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string","description":"Sa page : /lieu/<slug>, avec le formulaire de demande"},"name":{"type":"string"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"lat":{"type":"number"},"lon":{"type":"number"},"distanceKm":{"description":"Distance réelle, à vol d’oiseau, depuis le point cherché","type":["number","null"]},"image":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"credit":{"type":["string","null"]}},"required":["url"],"additionalProperties":false},{"type":"null"}],"description":"Sa photo, avec son crédit quand il est connu"},"kind":{"type":"string","enum":["community_hall","castle_estate","farm_barn","restaurant","hotel","conference_centre","cultural","sports_hall","outdoor","association_room","coworking","other"]},"ownerKind":{"anyOf":[{"type":"string","enum":["municipal","association","private","company"]},{"type":"null"}]},"isResidentsOnly":{"type":"boolean","description":"Réservé aux habitants de sa commune : dit tel quel"},"isManaged":{"type":"boolean","description":"Un gérant le tient sur Allez viens"},"capacityMax":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"La plus grande capacité de ses salles"},"layouts":{"type":"array","items":{"type":"object","properties":{"layout":{"type":"string","enum":["cocktail","banquet","theatre","classroom","u_shape","boardroom","cabaret"]},"capacity":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["layout","capacity"],"additionalProperties":false},"description":"Capacité par configuration ; null quand la source nomme la configuration sans le nombre"},"priceFrom":{"anyOf":[{"type":"object","properties":{"amountCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"unit":{"type":"string","enum":["hour","half_day","day","evening","weekend","person","event"]},"audience":{"type":"string","enum":["everyone","residents","non_residents","associations","companies"]},"isTaxIncluded":{"type":"boolean"}},"required":["amountCents","unit","audience","isTaxIncluded"],"additionalProperties":false},{"type":"null"}],"description":"Le prix « dès », indicatif, avec son unité et le public auquel il s’applique"},"occasions":{"type":"array","items":{"type":"string"},"description":"Occasions accueillies"},"catererPolicy":{"anyOf":[{"type":"string","enum":["free","imposed","list","none_allowed","in_house"]},{"type":"null"}]},"hasOutdoorSpace":{"type":["boolean","null"]},"allowsLateMusic":{"type":["boolean","null"]},"eventsHosted":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Événements publics accueillis sur un an, avant et après"},"hostedFamilies":{"description":"Familles des événements publics qu’il accueille, les plus fréquentes d’abord (music, markets…)","type":"array","items":{"type":"string"}},"completeness":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Complétude de la fiche, sur 100"},"unknown":{"type":"array","items":{"type":"string","enum":["occasion","capacity","price","caterer"]},"description":"Critères demandés auxquels le lieu ne répond pas encore : « à demander »"}},"required":["id","slug","name","town","lat","lon","distanceKm","image","kind","ownerKind","isResidentsOnly","isManaged","capacityMax","layouts","priceFrom","occasions","catererPolicy","hasOutdoorSpace","allowsLateMusic","eventsHosted","completeness","unknown"],"additionalProperties":false}},"facets":{"type":"object","properties":{"occasions":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["value","count"],"additionalProperties":false}},"kinds":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["value","count"],"additionalProperties":false}}},"required":["occasions","kinds"],"additionalProperties":false},"wider":{"anyOf":[{"type":"object","properties":{"radiusKm":{"type":"number"},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["radiusKm","total"],"additionalProperties":false},{"type":"null"}],"description":"Rien dans le rayon : combien de lieux dans un rayon plus large"}},"required":["total","page","perPage","origin","radiusKm","results","facets","wider"],"additionalProperties":false},"Coverage":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"zones":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["active","beta"]},"inPhrase":{"type":["string","null"]},"departments":{"type":"array","items":{"type":"string"},"description":"Codes INSEE des départements de la zone"},"center":{"anyOf":[{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"}},"required":["lat","lon"],"additionalProperties":false},{"type":"null"}]},"upcoming30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Sorties (événements) des 30 prochains jours"}},"required":["slug","name","status","inPhrase","departments","center","upcoming30d"],"additionalProperties":false}},"waiting":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"Personnes en liste d’attente, par code de département"}},"required":["zones","waiting"],"additionalProperties":false},"Pulse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"upcoming30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Sorties (événements) des 30 prochains jours"},"towns30d":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Communes où elles ont lieu"},"checked24h":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Parmi elles, celles qu’une source a confirmées ces dernières 24 heures"}},"required":["upcoming30d","towns30d","checked24h"],"additionalProperties":false},"Selection":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"selection":{"anyOf":[{"type":"object","properties":{"title":{"type":"string"},"note":{"description":"Le mot de la rédaction","type":["string","null"]},"weekStartOn":{"type":"string","description":"Lundi de la semaine"},"items":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"note":{"description":"Pourquoi celle-ci","type":["string","null"]}},"required":["eventId","note"],"additionalProperties":false}}},"required":["title","note","weekStartOn","items"],"additionalProperties":false},{"type":"null"}],"description":"Rien tant que la sélection de la semaine n’est pas publiée"}},"required":["selection"],"additionalProperties":false},"AmbassadorPicks":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"picks":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"À passer à /v1/search?ids="},"note":{"type":["string","null"]},"ambassador":{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl"],"additionalProperties":false}},"required":["eventId","note","ambassador"],"additionalProperties":false}}},"required":["picks"],"additionalProperties":false},"Ambassador":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"bio":{"type":["string","null"]},"zone":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},{"type":"null"}]},"since":{"description":"Ambassadeur depuis (date)","type":["string","null"]},"weekStartOn":{"type":"string","description":"Lundi de la semaine"},"weeks":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Semaines de choix publiées"},"picks":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"note":{"type":["string","null"]}},"required":["eventId","note"],"additionalProperties":false}}},"required":["slug","firstName","titleForm","town","photoUrl","bio","zone","since","weekStartOn","weeks","picks"],"additionalProperties":false},"Sitemap":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"zones":{"type":"array","items":{"type":"string"},"description":"Zones indexées : ouvertes, ou au-dessus du seuil (3 sorties sur 60 jours)"},"zoneDetails":{"default":[],"description":"Les mêmes zones avec leur nom, ouvertes d’abord","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"inPhrase":{"description":"« en Sud Gironde »","type":["string","null"]},"kind":{"type":"string","description":"launch (zone de lancement), area (secteur) ou theme (pays)"},"isCovered":{"type":"boolean"}},"required":["slug","name","inPhrase","kind","isCovered"],"additionalProperties":false}},"departments":{"type":"array","items":{"type":"string"}},"towns":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"updatedAt":{"type":["string","null"]}},"required":["slug","updatedAt"],"additionalProperties":false},"description":"Communes au-dessus du seuil : 3 sorties sur 60 jours"},"facets":{"type":"array","items":{"type":"object","properties":{"place":{"type":"string"},"kind":{"type":"string","enum":["category","family","special"],"description":"special : gratuit, enfants, rendez-vous-du-pays, accessible (id = le segment)"},"id":{"type":"string"},"events":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"updatedAt":{"type":["string","null"]}},"required":["place","kind","id","events","updatedAt"],"additionalProperties":false},"description":"Catégories, familles et pages spéciales au-dessus du seuil dans un lieu : 3 sorties sur 60 jours"},"events":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"type":{"description":"attraction : une activité, à son adresse /activite/<slug>","type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["slug","updatedAt"],"additionalProperties":false}},"organizers":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"updatedAt":{"type":["string","null"]}},"required":["slug","updatedAt"],"additionalProperties":false},"description":"Organisateurs avec des sorties à venir (/acteur/<slug>)"},"venues":{"default":[],"description":"Lieux dont la page est indexée (/lieu/<slug>, spec 09)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"}},"required":["slug"],"additionalProperties":false}},"help":{"type":"object","properties":{"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["live","beta","hidden"],"description":"live : ouverte et indexée ; beta : pour l’équipe ; hidden : pas encore ouverte"}},"required":["code","status"],"additionalProperties":false}},"categories":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"updatedAt":{"type":["string","null"]},"locales":{"type":"array","items":{"type":"string"},"description":"Langues où la page de la catégorie existe"}},"required":["slug","updatedAt","locales"],"additionalProperties":false}},"articles":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"categorySlug":{"type":"string"},"updatedAt":{"type":"string"},"locales":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string"},"updatedAt":{"type":"string"}},"required":["locale","updatedAt"],"additionalProperties":false}}},"required":["slug","categorySlug","updatedAt","locales"],"additionalProperties":false}}},"required":["languages","categories","articles"],"additionalProperties":false,"description":"Le centre d’aide : catégories et articles publiés, par langue"}},"required":["zones","zoneDetails","departments","towns","facets","events","organizers","venues","help"],"additionalProperties":false},"EventDetail":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":["string","null"]},"summary":{"type":["string","null"]},"description":{"type":["string","null"]},"publishedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"checkedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"zone":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},{"type":"null"}]},"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"isPrimary":{"type":"boolean"}},"required":["id","isPrimary"],"additionalProperties":false}},"tags":{"type":"array","items":{"type":"string"}},"audience":{"type":"string"},"minAge":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"maxAge":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"type":["string","null"]},"durationMinutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"access":{"type":"string"},"accessNote":{"type":["string","null"]},"hasMembershipOnSite":{"type":"boolean","description":"Adhésion possible sur place (comptée dans le prix)"},"participation":{"type":"string"},"booking":{"type":["string","null"]},"bookingUrl":{"type":["string","null"]},"registration":{"anyOf":[{"type":"object","properties":{"url":{"type":["string","null"]},"status":{"description":"not_open, open, waitlist, full, closed ; les dates disent le reste","type":["string","null"]},"opensAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"closesAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["url","status","opensAt","closesAt"],"additionalProperties":false},{"type":"null"}]},"registrationSignals":{"default":null,"description":"Ce qui se dit des inscriptions (spec 10) : signalé complet par des participants (le statut reste alors ouvert), « Les places partent vite » ; jamais qui ni combien","anyOf":[{"type":"object","properties":{"reportedFull":{"type":"boolean","description":"Signalé complet par des participants, pas encore confirmé : jamais « Complet »"},"fillingFast":{"anyOf":[{"type":"string","enum":["organizer","participants"]},{"type":"null"}],"description":"« Les places partent vite », et qui l’a dit ; seulement quand c’est ouvert"}},"required":["reportedFull","fillingFast"],"additionalProperties":false},{"type":"null"}]},"sport":{"default":null,"description":"Sport auquel on participe (spec 10) : les épreuves (distance, dénivelé, départ, prix, âge minimum, niveau, certificat, complet) et ce qui vaut pour toutes","anyOf":[{"type":"object","properties":{"races":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"default":null,"anyOf":[{"type":"string","maxLength":120},{"type":"null"}]},"discipline":{"default":null,"anyOf":[{"type":"string","enum":["running","trail","walking","nordic_walking","hiking","cycling","mountain_bike","swimming","triathlon","obstacle","other"]},{"type":"null"}]},"distanceKm":{"default":null,"anyOf":[{"type":"number","exclusiveMinimum":0,"maximum":1000},{"type":"null"}]},"elevationGainM":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":20000},{"type":"null"}]},"startTime":{"default":null,"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$"},{"type":"null"}]},"priceCents":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}]},"minAge":{"default":null,"anyOf":[{"type":"integer","minimum":0,"maximum":99},{"type":"null"}]},"level":{"default":null,"anyOf":[{"type":"string","enum":["all","beginner","intermediate","advanced"]},{"type":"null"}]},"certificate":{"default":null,"anyOf":[{"type":"string","enum":["none","health_form","medical_or_licence","licence"]},{"type":"null"}]},"isFull":{"default":false,"type":"boolean"}},"required":["name","discipline","distanceKm","elevationGainM","startTime","priceCents","minAge","level","certificate","isFull"],"additionalProperties":false}},"level":{"default":null,"anyOf":[{"type":"string","enum":["all","beginner","intermediate","advanced"]},{"type":"null"}]},"certificate":{"default":null,"anyOf":[{"type":"string","enum":["none","health_form","medical_or_licence","licence"]},{"type":"null"}]}},"required":["races","level","certificate"],"additionalProperties":false},{"type":"null"}]},"volunteering":{"default":null,"description":"Appel à bénévoles ouvert (spec 14) : ce qu’il faut, les rôles, combien, jusqu’à quand ; jamais qui s’est proposé","anyOf":[{"type":"object","properties":{"description":{"type":"string","description":"Ce qu’il faut : « buvette, montage, accueil »"},"roles":{"type":"array","items":{"type":"string"},"description":"Rôles proposés, parmi lesquels choisir (peut être vide)"},"neededCount":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Nombre de bénévoles recherchés, si dit"},"deadlineOn":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}],"description":"Dernier jour pour se proposer, heure de Paris"},"isFull":{"type":"boolean","description":"Assez de bénévoles acceptés (ou tous les créneaux à venir au complet) : on ne peut plus se proposer"},"shifts":{"default":[],"description":"Créneaux à venir, par date (vide sans créneau)","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"role":{"description":"Mission du créneau, parmi les rôles de l’appel","type":["string","null"]},"startsAt":{"type":"string","description":"Début du créneau (ISO 8601)"},"endsAt":{"description":"Fin du créneau, si dite","type":["string","null"]},"neededCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Bénévoles recherchés sur ce créneau"},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Places encore libres sur ce créneau"},"isFull":{"type":"boolean","description":"Créneau au complet"},"note":{"description":"Ce qu’il faut savoir (« prévoir des gants »)","type":["string","null"]}},"required":["id","role","startsAt","endsAt","neededCount","remaining","isFull","note"],"additionalProperties":false}}},"required":["description","roles","neededCount","deadlineOn","isFull","shifts"],"additionalProperties":false},{"type":"null"}]},"views30d":{"description":"Vues de la fiche ces 30 derniers jours, seulement tant que personne ne l’a revendiquée et à partir de 20 (spec 14) ; sinon null","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"faq":{"default":{"organizerAnswers":false,"waiting":0,"entries":[]},"description":"Questions à l’organisateur (spec 13, 14) : celles qu’il a publiées avec sa réponse, si un organisateur répond, combien attendent","type":"object","properties":{"organizerAnswers":{"type":"boolean","description":"Un organisateur gère la fiche et répond aux questions ; sinon elles attendent"},"waiting":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Questions en attente de réponse (jamais leur contenu ni qui les a posées)"},"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"question":{"type":"string"},"answer":{"type":"string"},"askedBy":{"description":"Prénom de la personne qui a posé la question, ou null si elle reste anonyme","type":["string","null"]},"answeredAt":{"type":"string"}},"required":["id","question","answer","askedBy","answeredAt"],"additionalProperties":false},"description":"Questions publiées par l’organisateur avec sa réponse, les plus récentes d’abord"}},"required":["organizerAnswers","waiting","entries"],"additionalProperties":false},"image":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"credit":{"type":["string","null"]}},"required":["url","credit"],"additionalProperties":false},{"type":"null"}]},"visitMinutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"goodToKnow":{"type":["string","null"]},"prices":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"kind":{"type":["string","null"]},"ageMin":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"ageMax":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"amountCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"familyAdults":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"familyChildren":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"occurrenceId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"Tarif propre à une séance"}},"required":["label","kind","ageMin","ageMax","amountCents","familyAdults","familyChildren","occurrenceId"],"additionalProperties":false}},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}],"description":"Prix total pour le groupe demandé"},"sessions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"status":{"type":"string"},"statusNote":{"type":["string","null"]},"venueId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"weather":{"description":"Météo prévue pendant la séance, dans les 7 jours qui viennent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]}},"required":["id","startsAt","endsAt","status","statusNote","venueId"],"additionalProperties":false},"description":"Prochaines séances, 60 au plus"},"sessionsTotal":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"defaultVenueId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"venues":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"default":null,"description":"Page du lieu (/lieu/<slug>) quand quelque chose de public s’y passe, sinon null","type":["string","null"]},"address":{"type":["string","null"]},"postcode":{"type":["string","null"]},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"inseeCode":{"type":"string"}},"required":["slug","name","inseeCode"],"additionalProperties":false},"lat":{"type":"number"},"lon":{"type":"number"},"arrival":{"anyOf":[{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"note":{"type":["string","null"]}},"required":["lat","lon","note"],"additionalProperties":false},{"type":"null"}],"description":"Point d’arrivée (entrée, parking) : celui à donner au GPS"},"arrivalNote":{"default":null,"description":"« Pour y arriver » (entrée, parking), même sans point d’arrivée","type":["string","null"]},"isAddressPrecise":{"type":"boolean","description":"Faux : adresse approximative, à signaler avant d’y envoyer quelqu’un"},"addressIssue":{"default":null,"description":"Pourquoi le point n’est pas précis : number_unknown (numéro inconnu de la Base Adresse Nationale, point placé dans la rue), street_only, locality_only, town_only, missing_address, source_point ; null quand il l’est","anyOf":[{"type":"string","enum":["number_unknown","street_only","locality_only","town_only","missing_address","source_point"]},{"type":"null"}]},"tags":{"type":"array","items":{"type":"string"},"description":"Équipements du lieu"},"osmRef":{"default":null,"description":"Objet OpenStreetMap d’où vient le point (« way/685005369 ») : afficher « © OpenStreetMap »","type":["string","null"]},"isManaged":{"default":false,"description":"Une structure gère déjà ce lieu (vérifiée ou non) : pas d’invitation à le revendiquer","type":"boolean"},"manager":{"default":null,"description":"Structure vérifiée qui gère le lieu : « Lieu géré par … »","anyOf":[{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"}},"required":["name","slug"],"additionalProperties":false},{"type":"null"}]},"image":{"default":null,"description":"Photo du lieu envoyée par son gestionnaire, avec le droit de l’utiliser","anyOf":[{"type":"object","properties":{"url":{"type":"string"},"credit":{"type":["string","null"]}},"required":["url","credit"],"additionalProperties":false},{"type":"null"}]},"contact":{"default":null,"description":"Contact du lieu, donné seulement quand une structure vérifiée le gère","anyOf":[{"type":"object","properties":{"website":{"type":["string","null"]},"phone":{"type":["string","null"]},"email":{"type":["string","null"]}},"required":["website","phone","email"],"additionalProperties":false},{"type":"null"}]}},"required":["id","name","slug","address","postcode","town","lat","lon","arrival","arrivalNote","isAddressPrecise","addressIssue","tags","osmRef","isManaged","manager","image","contact"],"additionalProperties":false}},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"},"website":{"type":["string","null"]},"isVerified":{"type":"boolean"},"isClaimed":{"type":"boolean","description":"Un organisateur gère déjà la fiche : pas de lien de revendication"}},"required":["id","name","slug","website","isVerified","isClaimed"],"additionalProperties":false},{"type":"null"}]},"participants":{"default":[],"description":"Parties prenantes (spec 17) : co-organisateurs, artistes et intervenants, exposants, mécènes, partenaires, prestataires montrés ; dans l’ordre de la fiche","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"role":{"type":"string","enum":["co_organizer","performer","speaker","exhibitor","food_vendor","sponsor","institutional_partner","media_partner","supplier"]},"kind":{"type":"string","enum":["organization","person"]},"name":{"type":"string"},"organization":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"types":{"type":"array","items":{"type":"string"}},"isVerified":{"type":"boolean"}},"required":["slug","types","isVerified"],"additionalProperties":false},{"type":"null"}],"description":"Structure : sa page /acteur/{slug} ; null pour une personne"},"website":{"description":"Site donné, non vérifié tant que la structure ne l’est pas","type":["string","null"]},"occurrenceId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"Présent à une seule séance ; null pour tout l’événement"},"logoUrl":{"description":"Logo de la structure, une fois relu par l’équipe ; null pour une personne","type":["string","null"]},"tier":{"description":"Rang d’un sponsor dont l’accord est conclu ; jamais son montant","anyOf":[{"type":"object","properties":{"name":{"description":"Nom du rang choisi par l’organisateur","type":["string","null"]},"rank":{"type":"integer","minimum":1,"maximum":4,"description":"1 = partenaire principal"}},"required":["name","rank"],"additionalProperties":false},{"type":"null"}]}},"required":["id","role","kind","name","organization","website","occurrenceId"],"additionalProperties":false}},"series":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"edition":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"firstEditionYear":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"traditionType":{"type":["string","null"]}},"required":["slug","name","edition","firstEditionYear","traditionType"],"additionalProperties":false},{"type":"null"}]},"sources":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"label":{"type":["string","null"]},"url":{"type":["string","null"]}},"required":["kind","label","url"],"additionalProperties":false}},"readMore":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"site":{"type":"string"}},"required":["url","site"],"additionalProperties":false},{"type":"null"}],"description":"Page d’une source à lire (jamais un portail de données), ou null"},"schedules":{"type":"array","items":{"type":"object","properties":{"dtstartLocal":{"type":"string"},"durationMinutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"isAllDay":{"type":"boolean"},"rrule":{"type":["string","null"]}},"required":["dtstartLocal","durationMinutes","isAllDay","rrule"],"additionalProperties":false}},"foundByAgents":{"type":"boolean"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"ended":{"default":null,"anyOf":[{"type":"object","properties":{"lastSession":{"anyOf":[{"type":"object","properties":{"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"status":{"type":"string"}},"required":["startsAt","endsAt","status"],"additionalProperties":false},{"type":"null"}]},"nextEdition":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["slug","title","startsAt"],"additionalProperties":false},{"type":"null"}]}},"required":["lastSession","nextEdition"],"additionalProperties":false},{"type":"null"}]},"hostedEvents":{"default":[],"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["slug","title","startsAt"],"additionalProperties":false}},"alsoHere":{"default":[],"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"place":{"default":null,"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"going":{"default":null,"anyOf":[{"type":"object","properties":{"count":{"type":"integer","minimum":3,"maximum":9007199254740991,"description":"Comptes qui ont dit « J’y vais » à une séance à venir (jamais sous le seuil)"},"towns":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"count":{"type":"integer","minimum":3,"maximum":9007199254740991}},"required":["slug","name","count"],"additionalProperties":false},"description":"Communes de ces comptes, celles qui atteignent le seuil, 5 au plus"}},"required":["count","towns"],"additionalProperties":false,"description":"« J’y vais » en agrégé, seulement à partir de 3 personnes : jamais de noms"},{"type":"null"}]},"ambassadorPick":{"default":null,"anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"default":null,"anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}],"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous"},"parent":{"default":null,"description":"Fiche principale dont cette fiche fait partie (« Fait partie de … »), ou null","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]}},"required":["slug","title","type"],"additionalProperties":false},{"type":"null"}]},"programme":{"default":null,"description":"Le programme d’une fiche principale : ses fiches par lieu publiées, les prochaines d’abord (300 au plus, `count` dit le total), ou null","anyOf":[{"type":"object","properties":{"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de fiches du programme"},"items":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"townName":{"type":["string","null"]},"venueName":{"type":["string","null"]},"nextStartsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["slug","title","type","townName","venueName","nextStartsAt"],"additionalProperties":false}}},"required":["count","items"],"additionalProperties":false},{"type":"null"}]}},"required":["id","slug","type","kind","title","subtitle","summary","description","publishedAt","updatedAt","checkedAt","zone","categories","tags","audience","minAge","maxAge","setting","durationMinutes","access","accessNote","hasMembershipOnSite","participation","booking","bookingUrl","registration","registrationSignals","sport","volunteering","faq","image","visitMinutes","goodToKnow","prices","groupPrice","sessions","sessionsTotal","defaultVenueId","venues","organizer","participants","series","sources","readMore","schedules","foundByAgents","isMustSee","ended","hostedEvents","alsoHere","place","going","ambassadorPick","saves","parent","programme"],"additionalProperties":false},"OrganizerDetail":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"},"types":{"type":"array","items":{"type":"string","enum":["association","public_body","company","venue","artist","collective","brand","artisan","producer","media","institution","individual"]}},"description":{"type":["string","null"]},"website":{"type":["string","null"]},"logoUrl":{"description":"Logo à son adresse d’origine, jamais copié sans accord","type":["string","null"]},"coverUrl":{"default":null,"description":"Photo de couverture envoyée par ses membres, avec son droit d’usage confirmé","type":["string","null"]},"coverCredit":{"default":null,"description":"Crédit de la photo de couverture","type":["string","null"]},"actionLinks":{"default":[],"description":"Ses boutons d’action, trois au plus : le mot vient d’une liste fermée (`kind`)","type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["join","tickets","donate","shop","volunteer","contact"]},"url":{"type":"string","description":"Adresse du lien, en https:// ou http://"}},"required":["kind","url"],"additionalProperties":false}},"featuredEventId":{"default":null,"description":"La sortie que ses membres montrent en premier, une de ses fiches à venir","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"social":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Comptes publics : instagram, facebook, tiktok, youtube, linkedin"},"town":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"departmentCode":{"type":["string","null"]}},"required":["slug","name","departmentCode"],"additionalProperties":false},{"type":"null"}]},"contact":{"default":{},"description":"Adresse, téléphone et e-mail que ses membres ont choisi de montrer","type":"object","properties":{"address":{"type":"string"},"postcode":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"}},"additionalProperties":false},"isVerified":{"type":"boolean","description":"Revendiqué avec une preuve forte"},"isClaimed":{"type":"boolean","description":"Quelqu’un gère déjà cette structure : badge, pas de lien de revendication"},"upcomingEvents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Événements publiés avec une séance à venir"},"pastEvents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"recent":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"townName":{"type":["string","null"]},"lastStartsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["slug","title","townName","lastStartsAt"],"additionalProperties":false},"description":"Ses dernières sorties passées, six au plus"},"participations":{"default":[],"description":"Ses prochaines sorties chez d’autres organisateurs (artiste, partenaire…), 24 au plus","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["co_organizer","performer","speaker","exhibitor","food_vendor","sponsor","institutional_partner","media_partner","supplier"]}},"nextStartsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"townName":{"type":["string","null"]},"organizer":{"description":"Nom de l’organisateur principal","type":["string","null"]}},"required":["id","slug","title","roles","nextStartsAt","townName","organizer"],"additionalProperties":false}},"services":{"default":[],"description":"Ses prestations publiées, dans l’ordre de sa page (un prestataire)","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","description":"Métier, de la liste fixée par l’équipe (`service_kinds`)"},"kindLabels":{"default":{},"description":"Le nom du métier par langue ({\"fr\": …, \"en\": …})","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"name":{"type":["string","null"]},"description":{"type":["string","null"]},"priceFromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Prix « dès », la formule affichée la moins chère ; null : sur demande"},"priceUnit":{"anyOf":[{"type":"string","enum":["event","hour","day","person"]},{"type":"null"}]},"isTaxIncluded":{"type":"boolean"},"capacityMax":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"radiusKm":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"occasions":{"default":[],"type":"array","items":{"type":"string"}},"diets":{"default":[],"type":"array","items":{"type":"string"}},"travelNote":{"default":null,"type":["string","null"]},"leadWeeks":{"default":null,"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"town":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"additionalProperties":false},{"type":"null"}]},"formulas":{"default":[],"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"included":{"type":["string","null"]},"amountCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Absent (null) pour un prix donné sur demande"},"unit":{"anyOf":[{"type":"string","enum":["event","hour","day","person"]},{"type":"null"}]},"isShown":{"type":"boolean"}},"required":["id","name","included","amountCents","unit","isShown"],"additionalProperties":false}},"options":{"default":[],"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"included":{"type":["string","null"]},"amountCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Absent (null) pour un prix donné sur demande"},"unit":{"anyOf":[{"type":"string","enum":["event","hour","day","person"]},{"type":"null"}]},"isShown":{"type":"boolean"}},"required":["id","name","included","amountCents","unit","isShown"],"additionalProperties":false}}},"required":["id","kind","kindLabels","name","description","priceFromCents","priceUnit","isTaxIncluded","capacityMax","radiusKm","occasions","diets","travelNote","leadWeeks","town","formulas","options"],"additionalProperties":false}},"claimEventSlug":{"description":"Une de ses fiches : la revendication part d’un événement","type":["string","null"]},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"featured":{"default":null,"description":"Sa sortie mise en avant, choisie par ses membres (jamais payée), en page 1 seulement","anyOf":[{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false},{"type":"null"}]},"upcoming":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"perPage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"results":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false}}},"required":["total","page","perPage","results"],"additionalProperties":false,"description":"Ses sorties à venir, par date, comme dans /v1/search?organizer=<id>&sort=date"}},"required":["id","slug","name","types","description","website","logoUrl","coverUrl","coverCredit","actionLinks","featuredEventId","social","town","contact","isVerified","isClaimed","upcomingEvents","pastEvents","recent","participations","services","claimEventSlug","updatedAt","featured","upcoming"],"additionalProperties":false},"VenueDetail":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"},"address":{"type":["string","null"]},"postcode":{"type":["string","null"]},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"inseeCode":{"type":"string"},"department":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"}},"required":["slug","name","code"],"additionalProperties":false},{"type":"null"}]}},"required":["slug","name","inseeCode","department"],"additionalProperties":false},"lat":{"type":"number"},"lon":{"type":"number"},"arrival":{"anyOf":[{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"note":{"type":["string","null"]}},"required":["lat","lon","note"],"additionalProperties":false},{"type":"null"}],"description":"Point d’arrivée (entrée, parking) : celui à donner au GPS"},"arrivalNote":{"type":["string","null"]},"isAddressPrecise":{"type":"boolean"},"osmRef":{"description":"Point venu d’OpenStreetMap : « © OpenStreetMap »","type":["string","null"]},"tags":{"type":"array","items":{"type":"string"},"description":"Ce qu’il y a à voir (facette highlight : labels, cadre), équipements et accessibilité"},"image":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"},"credit":{"type":["string","null"]}},"required":["url","credit"],"additionalProperties":false},{"type":"null"}]},"manager":{"anyOf":[{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["name","slug","isVerified"],"additionalProperties":false},{"type":"null"}],"description":"Structure qui tient le lieu"},"contact":{"anyOf":[{"type":"object","properties":{"website":{"type":["string","null"]},"phone":{"type":["string","null"]},"email":{"type":["string","null"]}},"required":["website","phone","email"],"additionalProperties":false},{"type":"null"}],"description":"Contact du lieu, seulement quand une structure le tient"},"activities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"}},"required":["id","slug","title"],"additionalProperties":false},"description":"Ses activités ouvertes au public (lieux à visiter de type attraction)"},"eventsCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Événements datés à venir dans le lieu"},"views30d":{"description":"Vues de la page du lieu ces 30 derniers jours, seulement tant qu’aucune structure ne le gère et à partir de 20 (spec 14) ; sinon null","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"isIndexable":{"type":"boolean","description":"Deux activités, une activité et un événement, ou trois événements sur 60 jours : sinon la page n’est pas indexée"},"rental":{"description":"« Organiser un événement ici » : ce qu’on sait du lieu pour un événement privé ou professionnel, seulement une fois son profil publié ; sinon null","anyOf":[{"type":"object","properties":{"capacityMax":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"La plus grande capacité de ses salles"},"occasions":{"type":"array","items":{"type":"string"},"description":"Occasions accueillies (référentiel occasions : wedding, birthday…)"},"isResidentsOnly":{"type":"boolean","description":"Réservé aux habitants de la commune"},"kind":{"description":"Type de lieu : community_hall, castle_estate…","type":["string","null"]},"owner":{"description":"Qui le loue : municipal, association, private, company","type":["string","null"]},"description":{"type":["string","null"]},"descriptionLocale":{"description":"Langue de la description","type":"string"},"areaM2":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"privatization":{"description":"exclusive_only, possible, never","type":["string","null"]},"openMonths":{"description":"Mois d’ouverture (1 = janvier) ; null : toute l’année","anyOf":[{"type":"array","items":{"type":"integer","minimum":1,"maximum":12}},{"type":"null"}]},"catering":{"description":"free, imposed, list, none_allowed, in_house","type":["string","null"]},"corkage":{"description":"Droit de bouchon : free, fee, forbidden","type":["string","null"]},"corkageFeeCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"closingTimeLocal":{"description":"Heure de fin, « 02:00 », heure locale","type":["string","null"]},"allowsLateMusic":{"type":["boolean","null"]},"hasOutdoorSpace":{"type":["boolean","null"]},"bedsCount":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"bedroomsCount":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"parkingSpaces":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"depositCents":{"description":"Caution","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"cleaning":{"description":"Ménage : included, fee, by_renter","type":["string","null"]},"cleaningFeeCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"isInsuranceRequired":{"type":["boolean","null"]},"neighbourhood":{"description":"isolated, few_neighbours, residential","type":["string","null"]},"hasSoundLimiter":{"type":["boolean","null"]},"rulesUrl":{"description":"Règlement ou tarifs de la mairie","type":["string","null"]},"bookingUrl":{"type":["string","null"]},"isManaged":{"description":"Une structure gère le lieu sur Allez viens","type":"boolean"},"isReceivingInquiries":{"description":"Le lieu reçoit les demandes dans son espace Pro ; sinon l’équipe les garde","type":"boolean"},"checkedAt":{"description":"Relu par une personne","type":["string","null"]},"origin":{"description":"agent, organizer, editor","type":"string"},"rooms":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"areaM2":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"isOutdoor":{"type":"boolean"},"isStepFree":{"type":["boolean","null"]},"hasDaylight":{"type":["boolean","null"]},"description":{"type":["string","null"]},"musicUntilLocal":{"description":"Musique jusqu’à, « HH:MM », heure locale","type":["string","null"]},"hasNoMusicCurfew":{"description":"Musique sans limite d’heure","type":"boolean"},"maxSoundDb":{"description":"Niveau maximal, en dB","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"soundBans":{"description":"Interdits : microphones_late, brass, percussion, amplified, fireworks","type":"array","items":{"type":"string"}},"soundNote":{"description":"À savoir sur le son","type":["string","null"]},"isRainPlan":{"description":"Remplace le dehors s’il pleut","type":"boolean"},"layouts":{"type":"array","items":{"type":"object","properties":{"layout":{"type":"string","description":"cocktail, banquet, theatre, classroom, u_shape, boardroom, cabaret"},"capacity":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"minCapacity":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["layout","capacity","minCapacity"],"additionalProperties":false}}},"required":["id","name","areaM2","isOutdoor","isStepFree","hasDaylight","description","layouts"],"additionalProperties":false}},"prices":{"description":"Tarifs indicatifs ; un tarif dont la validité est passée n’est pas rendu","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"roomId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"name":{"type":["string","null"]},"isPackage":{"type":"boolean","description":"Une formule (nommée)"},"kind":{"description":"hire, whole_venue (privatisation du lieu entier), package, option","type":"string"},"nightsCount":{"description":"Nuits d’un séjour","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"audience":{"type":"string","description":"everyone, residents, non_residents, associations, companies"},"unit":{"type":"string","description":"hour, half_day, day, evening, weekend, night, stay, person, event"},"amountCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"isStartingPrice":{"type":"boolean"},"isTaxIncluded":{"type":"boolean","description":"TTC ; false : HT, à afficher tel quel"},"minGuests":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"maxGuests":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"weekdays":{"anyOf":[{"type":"array","items":{"type":"integer","minimum":1,"maximum":7}},{"type":"null"}],"description":"ISO : 1 = lundi"},"months":{"anyOf":[{"type":"array","items":{"type":"integer","minimum":1,"maximum":12}},{"type":"null"}]},"validUntilOn":{"type":["string","null"]},"description":{"type":["string","null"]},"note":{"type":["string","null"]},"sourceUrl":{"description":"Source d’un tarif relevé par un agent","type":["string","null"]},"observedOn":{"type":"string","description":"Date de la source"},"termsId":{"description":"Son jeu de conditions (terms)","anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"inclusions":{"type":"array","items":{"type":"string"},"description":"Ce que le tarif comprend"}},"required":["id","roomId","name","isPackage","audience","unit","amountCents","isStartingPrice","isTaxIncluded","minGuests","maxGuests","weekdays","months","validUntilOn","description","note","sourceUrl","observedOn","inclusions"],"additionalProperties":false}},"photos":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"credit":{"type":["string","null"]},"caption":{"type":["string","null"]},"kind":{"type":"string","description":"photo, floor_plan"},"roomId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"isLinked":{"type":"boolean","description":"Photo d’une source : liée, jamais copiée"}},"required":["url","credit","caption","kind","roomId","isLinked"],"additionalProperties":false}},"isPricingOnRequest":{"description":"Tarifs envoyés sur demande : aucune ligne de prix rendue","type":"boolean"},"minNights":{"description":"Nuits au minimum","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"checkInTimeLocal":{"description":"Arrivée, « HH:MM »","type":["string","null"]},"checkOutTimeLocal":{"description":"Départ, « HH:MM »","type":["string","null"]},"isLinenIncluded":{"description":"Linge compris","type":["boolean","null"]},"amenities":{"description":"Équipements (liste fermée)","type":"array","items":{"type":"string"}},"activities":{"description":"Activités sur place (liste fermée)","type":"array","items":{"type":"string"}},"lodgings":{"description":"Hébergement sur place, puis à proximité","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"kind":{"type":"string","description":"room, suite, apartment, cottage, dormitory, pitch, other"},"unitsCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bedsCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"isIncluded":{"description":"Compris dans la location","type":["boolean","null"]},"isStepFree":{"type":["boolean","null"]},"isOnSite":{"description":"Sur place ; sinon à proximité","type":"boolean"},"town":{"description":"Commune d’un hébergement proche","type":["string","null"]},"website":{"type":["string","null"]},"distanceM":{"description":"Distance calculée par nous ; jamais une distance déclarée","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","name","kind","unitsCount","bedsCount","isIncluded","isStepFree"],"additionalProperties":false}},"offers":{"description":"Offres du lieu en cours ; jamais de prix barré","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"priceId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"kind":{"type":"string","description":"discount, gift, extra_included"},"title":{"type":"string"},"conditions":{"type":["string","null"]},"conditionsLocale":{"type":"string"},"startsOn":{"type":"string"},"endsOn":{"type":"string","description":"Toujours datée : « Offre du lieu, jusqu’au … »"}},"required":["id","priceId","kind","title","conditions","conditionsLocale","startsOn","endsOn"],"additionalProperties":false}},"media":{"description":"Vidéos et visites virtuelles, lues seulement au clic","type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"video, virtual_tour"},"provider":{"type":"string","description":"youtube, vimeo, matterport"},"url":{"type":"string"},"title":{"type":["string","null"]},"roomId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]}},"required":["kind","provider","url","title","roomId"],"additionalProperties":false}},"questions":{"description":"Questions fréquentes écrites par le lieu","type":"array","items":{"type":"object","properties":{"question":{"type":"string"},"answer":{"type":"string"},"locale":{"type":"string"}},"required":["question","answer","locale"],"additionalProperties":false}},"houseRules":{"description":"Règlement du lieu en mots : livraisons, déchets, interdits","type":["string","null"]},"rainPlan":{"description":"S’il pleut","type":["string","null"]},"cateringNote":{"type":["string","null"]},"furnitureNote":{"type":["string","null"]},"poolNote":{"type":["string","null"]},"coordinationNote":{"type":["string","null"]},"access":{"description":"Calculé par nous : la commune de 50 000 habitants la plus proche, à vol d’oiseau","anyOf":[{"type":"object","properties":{"city":{"type":"string"},"citySlug":{"type":"string"},"km":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["city","citySlug","km"],"additionalProperties":false},{"type":"null"}]},"terms":{"description":"Conditions de réservation des tarifs affichés","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"advance":{"description":"Acompte","type":["string","null"]},"balance":{"description":"Solde","type":["string","null"]},"securityDeposit":{"description":"Caution","type":["string","null"]},"cancellation":{"description":"Annulation","type":["string","null"]}},"required":["id","name","advance","balance","securityDeposit","cancellation"],"additionalProperties":false}},"documents":{"description":"Documents rendus publics par le lieu","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"bytes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","name","bytes"],"additionalProperties":false}},"suppliers":{"description":"Prestataires conseillés par le lieu, avec leur accord","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"serviceKind":{"description":"Métier (service_kinds)","type":["string","null"]}},"required":["name","slug","serviceKind"],"additionalProperties":false}},"sources":{"description":"Où les faits de la fiche ont été lus, et quand","type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"observedOn":{"type":"string"},"parts":{"type":"array","items":{"type":"string"},"description":"Ce que la source a donné : kind, rooms, capacity…"}},"required":["url","observedOn","parts"],"additionalProperties":false}}},"required":["capacityMax","occasions","isResidentsOnly"],"additionalProperties":false},{"type":"null"}]},"reviews":{"description":"Les avis laissés par des personnes qui ont fait une demande chez nous : note moyenne, nombre, derniers avis avec la réponse du lieu ; null sans avis","anyOf":[{"type":"object","properties":{"average":{"type":"number","minimum":1,"maximum":5},"count":{"type":"integer","minimum":1,"maximum":9007199254740991},"latest":{"type":"array","items":{"type":"object","properties":{"firstName":{"type":["string","null"]},"rating":{"type":"integer","minimum":1,"maximum":5},"body":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"response":{"type":["string","null"]},"respondedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"occasion":{"type":["string","null"]}},"required":["firstName","rating","body","createdAt","response","respondedAt","occasion"],"additionalProperties":false}}},"required":["average","count","latest"],"additionalProperties":false},{"type":"null"}]},"updatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"activityResults":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"results":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false}}},"required":["total","results"],"additionalProperties":false,"description":"Ses activités comme dans /v1/search?venue=<id>&type=places : état d’ouverture et prix du groupe"},"upcoming":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"results":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["event","attraction"]},"kind":{"type":"string","enum":["session","opening","attraction"]},"primaryCategory":{"type":"string"},"categoryFamilies":{"type":"array","items":{"type":"string"}},"tags":{"type":"array","items":{"type":"string"}},"town":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false},"venue":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"slug":{"description":"Sa page /lieu/{slug}, quand l’index la connaît","type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["id","name","lat","lon"],"additionalProperties":false},"alsoHere":{"description":"Autres activités du même lieu, laissées hors de la page (« Aussi sur place »)","type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false}},"distanceKm":{"type":["number","null"]},"nextSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"status":{"description":"scheduled, sold_out, postponed, rescheduled, moved_online (les annulées sont écartées)","type":"string"}},"required":["id","startsAt","endsAt"],"additionalProperties":false},"sessions":{"description":"Les premières séances dans la plage, si sessionsLimit est demandé","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","startsAt","endsAt"],"additionalProperties":false}},"sessionsInRange":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Nombre de séances de cet événement dans la plage"},"groupPrice":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"known"},"totalCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Prix total pour le groupe, en centimes"},"isFree":{"type":"boolean"},"usesFamilyPass":{"type":"boolean"}},"required":["status","totalCents","isFree","usesFamilyPass"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"unknown"},"fromCents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Plus petit tarif connu : « à partir de »"}},"required":["status","fromCents"],"additionalProperties":false}]},"imageUrl":{"type":["string","null"]},"booking":{"type":"string","enum":["none","advised","required"],"description":"required : sur réservation ou sur rendez-vous (un lieu à visiter)"},"organizer":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"isVerified":{"type":"boolean"}},"required":["id","name","isVerified"],"additionalProperties":false},{"type":"null"}]},"isPromoted":{"type":"boolean","description":"Contenu mis en avant, toujours étiqueté"},"popularity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Comptes qui l’ont enregistrée ou y vont, sur les 30 derniers jours"},"isMustSee":{"type":"boolean","description":"Immanquable : parmi les sorties les plus enregistrées de sa zone sur 30 jours"},"minAge":{"description":"Âge minimum conseillé","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"setting":{"anyOf":[{"type":"string","enum":["indoor","outdoor","covered"]},{"type":"null"}]},"audience":{"description":"Public : all, family, kids_only, adults…","type":"string"},"publishedAt":{"description":"Mise en ligne de la fiche","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"checkedAt":{"description":"Dernière fois que sa source la listait encore (« vérifié auprès de sa source »)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"weather":{"description":"Météo prévue pendant la prochaine séance (7 jours au plus) ; s’il pleut, les sorties en intérieur ou couvertes remontent","anyOf":[{"type":"object","properties":{"icon":{"type":"string","enum":["sun","partly_cloudy","cloudy","fog","drizzle","showers","rain","snow","storm"]},"temperatureMaxC":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Température la plus haute pendant la séance"},"rainProbability":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}],"description":"Risque de pluie le plus haut pendant la séance, en %"},"rainMm":{"type":"number","description":"Pluie attendue pendant la séance, en mm"},"isRainy":{"type":"boolean","description":"Pluie probable : risque d’au moins 60 % ou 1 mm"},"forecastAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Heure de la prévision"}},"required":["icon","temperatureMaxC","rainProbability","rainMm","isRainy","forecastAt"],"additionalProperties":false,"description":"Météo prévue pendant la séance (MET Norway, CC BY 4.0 : mention « Météo : MET Norway » obligatoire) ; absente au-delà de 7 jours"},{"type":"null"}]},"ambassadorPick":{"description":"Choisie cette semaine par un ambassadeur du coin : qui, et pourquoi","anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Adresse du profil : /ambassadeur/{slug}"},"firstName":{"type":"string"},"titleForm":{"type":"string","enum":["f","m","n"],"description":"Pour dire « ambassadrice », « ambassadeur » ou « ambassadeur·rice »"},"town":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false},"photoUrl":{"description":"Photo du compte, si la personne a choisi de la montrer","type":["string","null"]},"note":{"description":"Pourquoi, en une ligne","type":["string","null"]}},"required":["slug","firstName","titleForm","town","photoUrl","note"],"additionalProperties":false},{"type":"null"}]},"saves":{"description":"Comptes qui l’ont enregistrée (listes ou favoris), à partir de 3 ; null en dessous. Lu à la requête, jamais indexé","anyOf":[{"type":"integer","minimum":3,"maximum":9007199254740991},{"type":"null"}]},"parent":{"description":"L’événement à plusieurs lieux dont c’est un des lieux (« Portes ouvertes en Graves ») : sa fiche principale","anyOf":[{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title"],"additionalProperties":false},{"type":"null"}]},"score":{"type":"number"}},"required":["eventId","slug","title","type","kind","primaryCategory","categoryFamilies","tags","town","venue","distanceKm","nextSession","sessionsInRange","groupPrice","imageUrl","booking","organizer","isPromoted","popularity","isMustSee","score"],"additionalProperties":false}}},"required":["total","results"],"additionalProperties":false,"description":"Ses événements à venir, par date, comme dans /v1/search?venue=<id>&type=events&sort=date"}},"required":["id","slug","name","address","postcode","town","lat","lon","arrival","arrivalNote","isAddressPrecise","osmRef","tags","image","manager","contact","activities","eventsCount","isIndexable","updatedAt","activityResults","upcoming"],"additionalProperties":false},"TaxonomyResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"families":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"labels":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Libellé par langue : {\"fr\": \"Musique\", \"en\": \"Music\"}"},"color":{"type":["string","null"]},"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"labels":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Libellé par langue : {\"fr\": \"Musique\", \"en\": \"Music\"}"}},"required":["id","labels"],"additionalProperties":false}}},"required":["id","labels","color","categories"],"additionalProperties":false}},"tags":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"facet":{"type":"string","enum":["format","price","accessibility","practical","label","highlight"]},"labels":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Libellé par langue : {\"fr\": \"Musique\", \"en\": \"Music\"}"}},"required":["id","facet","labels"],"additionalProperties":false}}},"required":["families","tags"],"additionalProperties":false},"HelpHome":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string","description":"Langue demandée, parmi celles du centre d’aide"},"audience":{"type":"string","enum":["residents","organisers","territories","partners"],"description":"Pour qui : habitants, organisateurs, communes et offices, partenaires"},"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["live","beta","hidden"],"description":"live : ouverte et indexée ; beta : pour l’équipe ; hidden : pas encore ouverte"}},"required":["code","status"],"additionalProperties":false}},"categories":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":["string","null"]},"locale":{"type":"string","description":"Langue du texte servi"},"articleCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"articles":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"locale":{"type":"string","description":"Langue du texte servi"}},"required":["slug","title","locale"],"additionalProperties":false},"description":"Les quatre premiers articles de la catégorie"}},"required":["slug","name","description","icon","locale","articleCount","articles"],"additionalProperties":false}},"guides":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"categorySlug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"locale":{"type":"string","description":"Langue du texte servi"},"icon":{"description":"Pictogramme de sa catégorie","type":["string","null"]},"cover":{"anyOf":[{"type":"object","properties":{"url":{"type":"string","description":"Adresse https, ou chemin du site"},"credit":{"type":"string","description":"Auteur et licence"},"creditUrl":{"description":"La page de l’image (Wikimedia Commons…)","type":["string","null"]}},"required":["url","credit","creditUrl"],"additionalProperties":false,"description":"Image du guide ; absente, le site dessine une illustration"},{"type":"null"}]}},"required":["slug","categorySlug","title","summary","locale","icon","cover"],"additionalProperties":false},"description":"« Pour bien démarrer » : les guides de ce public, dans l’ordre de l’équipe"},"popular":{"maxItems":8,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"categorySlug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"locale":{"type":"string","description":"Langue du texte servi"},"icon":{"description":"Pictogramme de sa catégorie","type":["string","null"]}},"required":["slug","categorySlug","title","summary","locale","icon"],"additionalProperties":false},"description":"Articles principaux de ce public : choisis par l’équipe, puis les plus utiles selon les lecteurs (sans les guides)"}},"required":["locale","audience","languages","categories","guides","popular"],"additionalProperties":false},"HelpTopics":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string"},"audience":{"anyOf":[{"type":"string","enum":["residents","organisers","territories","partners"],"description":"Pour qui : habitants, organisateurs, communes et offices, partenaires"},{"type":"null"}]},"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["live","beta","hidden"],"description":"live : ouverte et indexée ; beta : pour l’équipe ; hidden : pas encore ouverte"}},"required":["code","status"],"additionalProperties":false}},"categories":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":["string","null"]},"locale":{"type":"string","description":"Langue du texte servi"},"articles":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"categorySlug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"locale":{"type":"string","description":"Langue du texte servi"},"icon":{"description":"Pictogramme de sa catégorie","type":["string","null"]}},"required":["slug","categorySlug","title","summary","locale","icon"],"additionalProperties":false}}},"required":["slug","name","description","icon","locale","articles"],"additionalProperties":false},"description":"Les catégories et tous leurs articles ; pour un public, les siennes d’abord"}},"required":["locale","audience","languages","categories"],"additionalProperties":false},"HelpCategory":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string"},"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["live","beta","hidden"],"description":"live : ouverte et indexée ; beta : pour l’équipe ; hidden : pas encore ouverte"}},"required":["code","status"],"additionalProperties":false}},"category":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":["string","null"]},"locale":{"type":"string","description":"Langue du texte servi"},"translations":{"type":"array","items":{"type":"string"},"description":"Langues où la page existe vraiment : son nom et au moins un article traduits"}},"required":["slug","name","description","icon","locale","translations"],"additionalProperties":false},"articles":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"locale":{"type":"string","description":"Langue du texte servi"},"updatedAt":{"type":"string"}},"required":["slug","title","summary","locale","updatedAt"],"additionalProperties":false}},"otherCategories":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"],"additionalProperties":false}}},"required":["locale","languages","category","articles","otherCategories"],"additionalProperties":false},"HelpArticle":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string","description":"Langue servie"},"requestedLocale":{"type":"string"},"isFallback":{"type":"boolean","description":"Pas encore traduit : le texte français, signalé comme tel"},"languages":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["live","beta","hidden"],"description":"live : ouverte et indexée ; beta : pour l’équipe ; hidden : pas encore ouverte"}},"required":["code","status"],"additionalProperties":false}},"article":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"body":{"type":"string","description":"Markdown léger : titres, listes, gras, italique, liens"},"updatedAt":{"type":"string"},"publishedAt":{"type":["string","null"]},"category":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"locale":{"type":"string","description":"Langue du texte servi"}},"required":["slug","name","locale"],"additionalProperties":false},"translations":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string"},"updatedAt":{"type":"string"}},"required":["locale","updatedAt"],"additionalProperties":false},"description":"Les langues publiées de l’article (français compris)"},"related":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"categorySlug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"locale":{"type":"string","description":"Langue du texte servi"},"icon":{"description":"Pictogramme de sa catégorie","type":["string","null"]}},"required":["slug","categorySlug","title","summary","locale","icon"],"additionalProperties":false}}},"required":["slug","title","summary","body","updatedAt","publishedAt","category","translations","related"],"additionalProperties":false}},"required":["locale","requestedLocale","isFallback","languages","article"],"additionalProperties":false},"HelpSearch":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string"},"results":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"categorySlug":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"locale":{"type":"string","description":"Langue du texte servi"},"icon":{"description":"Pictogramme de sa catégorie","type":["string","null"]},"categoryName":{"type":"string"}},"required":["slug","categorySlug","title","summary","locale","icon","categoryName"],"additionalProperties":false}}},"required":["locale","results"],"additionalProperties":false},"Error":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"path":{"type":"array","items":{"type":["string","number"]}},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}}},"required":["error"],"additionalProperties":false}}}}