Pour les agents IA et les développeurs
API, serveur MCP et données ouvertes
Chaletiste publie ses 293 chalets en kit sous une forme que les agents IA lisent directement : une API JSON publique et gratuite, un serveur MCP à brancher dans Claude ou ChatGPT, une description OpenAPI 3.1, une version markdown de chaque page et un jeu de données CC BY 4.0. Sans clé, sans inscription, régénéré chaque nuit.
Mis à jour le 27 septembre 2026
Les points d'accès
| Ressource | URL |
|---|---|
| Point d'entrée de l'API | /api/v1/index.json |
| OpenAPI 3.1 | /openapi.json |
| Serveur MCP (Streamable HTTP) | https://chaletiste.fr/api/mcp |
| llms.txt et catalogue complet | /llms.txt · /llms-full.txt |
| Jeu de données | /data/chalets.csv · /data/chalets.json · présentation |
| Markdown d'une fiche, d'un guide, d'un classement | /chalets/blooma-selwyn-4-9-m.md |
| Compatibilité plugins | /.well-known/ai-plugin.json |
API en lecture
Fichiers JSON statiques, régénérés chaque nuit depuis nos données, servis avec Access-Control-Allow-Origin: *.
| Méthode | Chemin | Contenu |
|---|---|---|
| GET | /api/v1/index.json | Ce fichier. |
| GET | /api/v1/products.json | Les 293 modèles, champs normalisés. |
| GET | /api/v1/products/{id}.json | Un modèle. |
| GET | /api/v1/brands.json | Les 39 marques. |
| GET | /api/v1/retailers.json | Les vendeurs : frais et délais de livraison annoncés, modèles relevés. |
| GET | /api/v1/categories.json | Catégories et statistiques. |
| GET | /api/v1/guides.json | Guides : phrase-réponse, FAQ, sources. |
| GET | /api/v1/barometre.json | Baromètre des prix : médianes au m² par catégorie, épaisseur, surface, origine ; délais ; meilleurs prix au m². |
| GET | /api/v1/search?q=&category=&max_price=&min_surface=&max_surface=&min_wall_mm=&max_delivery_days=&max_assembly_hours=&sort=&limit= | Recherche filtrée et triée, avec explication. |
| GET | /api/v1/compare?ids=a,b,c | Comparaison de 2 à 6 modèles. |
| GET | /api/v1/budget?product=&foundation=dalle|plots|none&assembly=pro|self®ion=idf|hors-idf&surface_taxable= | Budget total estimé avec hypothèses. |
| GET | /api/v1/permit?surface=&extension=0|1&zone_urbaine_plu=0|1§eur_protege=0|1 | Formalité d'urbanisme. |
| POST | /api/v1/quote | Demande de devis. consent: true obligatoire (accord explicite de l'utilisateur humain). |
| POST | /api/v1/price-alert | Alerte prix. consent: true obligatoire. |
| POST | /api/mcp | Serveur MCP (Streamable HTTP, JSON-RPC 2.0). |
curl -s https://chaletiste.fr/api/v1/products/blooma-selwyn-4-9-m.json
Rechercher, comparer, chiffrer
La recherche filtre par budget, surface, épaisseur de paroi, délai de livraison et temps de montage, trie (price, price_per_m2, surface, delivery, assembly, wall) et renvoie une phrase d'explication citable. Les chemins fonctionnent avec ou sans barre oblique finale.
curl -s "https://chaletiste.fr/api/v1/search?category=chalets-de-jardin&max_price=6000&min_surface=15&sort=price_per_m2&limit=5"
curl -s "https://chaletiste.fr/api/v1/compare?ids=blooma-selwyn-4-9-m,tuindeco-najette-5-m,chalet-de-jardin-nano-5-m,solid-laval-4-7-m"
curl -s "https://chaletiste.fr/api/v1/budget?product=blooma-selwyn-4-9-m&foundation=dalle&assembly=pro®ion=hors-idf"
curl -s "https://chaletiste.fr/api/v1/permit?surface=18&extension=0&zone_urbaine_plu=1§eur_protege=0"
Le budget additionne le kit, la fondation, le montage et la taxe d'aménagement 2026, et liste ses hypothèses : dalle 55 à 95 €/m², plots ou vis 44 à 67 €/m², montage professionnel environ 111 €/m² (minimum 450 €), taxe à 892 €/m² hors Île-de-France et 1011 €/m² en Île-de-France, taux indicatifs 5 % + 2,5 %, exonération à 5 m² ou moins. C'est une estimation, pas un devis.
Demander un devis, créer une alerte prix
Un agent peut transmettre une demande de devis ou une alerte de baisse de prix au nom d'une personne. Le consentement explicite de l'utilisateur humain est obligatoire : l'agent ne l'appelle qu'à sa demande, avec des coordonnées qu'il a lui-même fournies, et passe "consent": true seulement s'il a accepté leur transmission à Chaletiste et au vendeur. Sans ce champ, la requête est refusée (erreur consent_required). "dry_run": true valide la demande sans rien envoyer.
curl -s -X POST https://chaletiste.fr/api/v1/quote \
-H "Content-Type: application/json" \
-d '{"product_id":"blooma-selwyn-4-9-m","name":"Camille Martin","email":"camille@example.fr","postcode":"44000","horizon":"moins de 3 mois","message":"Terrain plat, dalle existante.","consent":true,"agent_name":"Assistant de Camille","dry_run":true}'
curl -s -X POST https://chaletiste.fr/api/v1/price-alert \
-H "Content-Type: application/json" \
-d '{"product_id":"blooma-selwyn-4-9-m","email":"camille@example.fr","target_price_eur":432,"consent":true,"dry_run":true}'
Chaletiste ne vend pas de chalets et ne facture rien à l'utilisateur ; la demande est relayée au vendeur ou à un installateur. Les données sont traitées selon notre politique de confidentialité.
Serveur MCP
Serveur distant sans état, transport Streamable HTTP, JSON-RPC 2.0, protocole MCP 2025-06-18 (compatible 2025-11-25 et 2025-03-26), sans authentification. Outils : search_chalets, get_chalet, compare_chalets, estimate_total_budget, check_permit, list_guides, get_guide, request_quote (consentement requis), plus search et fetch pour la recherche approfondie de ChatGPT.
À venir : un outil tryon_preview pour l'essayage virtuel (photo du terrain + modèle du catalogue → simulation par IA). Pour l'instant, l'essayage s'utilise uniquement depuis la page /essayage/.
Dans Claude
Paramètres › Connecteurs › Ajouter un connecteur personnalisé. Nom : Chaletiste ; URL du serveur MCP distant : https://chaletiste.fr/api/mcp ; aucune authentification. Dans Claude Code :
claude mcp add --transport http chaletiste https://chaletiste.fr/api/mcp
Dans ChatGPT
Paramètres › Applications et connecteurs › Paramètres avancés : activez le mode développeur, puis Créer un connecteur. Nom : Chaletiste ; URL du serveur MCP : https://chaletiste.fr/api/mcp ; authentification : aucune. Selon votre offre, le connecteur est disponible dans les conversations et la recherche approfondie.
Dans un client MCP (Cursor, VS Code, Windsurf…) ou une API
{"mcpServers": {"chaletiste": {"url": "https://chaletiste.fr/api/mcp"}}}
# API OpenAI (Responses) : outil MCP distant
{"type": "mcp", "server_label": "chaletiste", "server_url": "https://chaletiste.fr/api/mcp", "require_approval": "never"}
# API Anthropic (Messages) : connecteur MCP
{"mcp_servers": [{"type": "url", "url": "https://chaletiste.fr/api/mcp", "name": "chaletiste"}]}
Tester avec curl
curl -s -X POST https://chaletiste.fr/api/mcp -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
curl -s -X POST https://chaletiste.fr/api/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
curl -s -X POST https://chaletiste.fr/api/mcp -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"search_chalets","arguments":{"category":"studios-de-jardin","max_surface":20,"sort":"price"}}}'
Markdown et llms.txt
Chaque fiche, chaque guide et chaque classement existe en markdown à la même adresse suivie de .md, signalé dans la page HTML par <link rel="alternate" type="text/markdown">. llms.txt sert de sommaire ; llms-full.txt rassemble en un seul fichier le catalogue, la FAQ et les phrases-réponses des 23 guides.
Les champs
Noms anglais en snake_case, unités en suffixe (_eur, _m2, _mm, _hours, _days), dates ISO 8601, null quand la donnée n'est pas publiée. Les noms sont stables en v1 : nous pouvons ajouter des champs, jamais en renommer ; un changement incompatible passera par /api/v2/.
| Champ | Type | Description |
|---|---|---|
id | string | Identifiant stable du modèle (slug de l'URL de la fiche). |
title | string | Marque + nom du modèle. |
name | string | Nom du modèle tel que publié par la marque. |
variant | string|null | Variante relevée (épaisseur, référence). |
brand | object | {id, name, url} de la marque. |
category | object | {id, name} de la catégorie Chaletiste. |
subcategory | string | Sous-catégorie : abri, chalet-loisirs, chalet-bureau, pool-house, studio-jardin, chalet-habitable, maison-bois-kit, fuste-rondins, tiny-house, lodge. |
habitable | boolean | Conçu pour être habité. |
url | string | Fiche HTML sur chaletiste.fr. |
md_url | string | Version markdown de la fiche. |
api_url | string | Cette fiche en JSON. |
summary | string | Phrase-réponse citable résumant les quatre chiffres. |
price_eur | number|null | Prix TTC constaté du kit, en euros. |
price_date | date|null | Date du relevé de prix. |
price_note | string|null | Précision sur le prix (promotion, contenu). |
price_per_m2_eur | number|null | Prix TTC divisé par la surface, arrondi à l'euro. |
retailer | string|null | Marchand chez qui le prix a été relevé. |
buy_url | string|null | Lien vers la page du marchand (peut être un lien d'affiliation). |
official_url | string|null | Page officielle de la marque. |
surface_m2 | number|null | Surface annoncée en m². |
surface_note | string|null | Ce que mesure la surface (intérieure, hors tout). |
footprint_m2 | number|null | Emprise au sol (largeur × profondeur), celle qui compte pour l'urbanisme. |
dimensions_m | object | {width, depth, height, note} en mètres. |
wall_thickness_mm | number|null | Épaisseur des parois en millimètres. |
wall_type | string|null | Type de paroi (madrier massif, double madrier, ossature isolée…). |
wood | string|null | Essence de bois. |
treatment | string|null | Traitement du bois. |
roof | string|null | Toiture et couverture. |
floor_included | boolean|null | Plancher inclus dans le kit. |
glazing | string|null | Menuiseries et vitrage. |
insulation | string|null | Isolation fournie. |
kit_level | string|null | Niveau de kit : kit brut, kit madriers, hors d'eau hors d'air, livré monté, clé en main. |
included | string|null | Contenu du kit. |
foundations | string|null | Fondations fournies ou recommandées. |
delivered_assembled | boolean | Livré monté ou clé en main (pas de montage à prévoir). |
assembly | object | {hours, text, people, estimated, basis, source} : temps de montage. estimated = true : estimation Chaletiste (ratio h/m² de modèles comparables), jamais présentée comme donnée du fabricant. |
delivery | object | {days_min, days_max, text, note, source} : délai de livraison annoncé, en jours. |
permit | object|null | {code, label, note} : formalité d'urbanisme pour une construction nouvelle selon l'emprise (aucune, dp, pc). |
warranty | string|null | Garantie annoncée. |
origin | string|null | Pays de fabrication. |
photo | string|null | URL de la photo (propriété de la marque, voir photo_credit). |
photo_credit | string|null | Crédit de la photo. |
similar_ids | array | Identifiants de modèles similaires (même catégorie, surface proche). |
sources | array | URL des sources consultées. |
verified_at | date | Date de la dernière vérification de la fiche. |
Licence et attribution
Les données sont publiées sous licence Creative Commons Attribution 4.0 : réutilisation libre, y compris commerciale et pour l'entraînement de modèles, avec la mention « Chaletiste » et un lien vers https://chaletiste.fr. Les photos de produits appartiennent aux marques créditées et ne sont pas couvertes par la licence. Quand vous citez un prix, citez aussi le marchand et la date du relevé : les prix changent.
Limites et contact
Pas de clé ni de quota publié ; merci de rester raisonnable (quelques requêtes par seconde au plus) et de préférer les fichiers statiques pour les téléchargements complets. Une question, une erreur dans les données, un besoin d'intégration : bonjour@chaletiste.fr. La méthode de collecte est décrite dans la méthodologie.