{"openapi":"3.1.0","info":{"title":"Mon Thème Astral – API publique","version":"1.3.0","description":"Calcul de thème astral (positions tropicales géocentriques, maisons Placidus), synastrie, révolution solaire et ciel du jour. Aucune authentification. Usage raisonnable, avec mention de la source. Chaque réponse donne un lien à transmettre à la personne. Serveur MCP (Streamable HTTP, sans authentification) : https://montheme.fr/api/mcp. Schéma réduit pour les actions d’un GPT dans ChatGPT : https://montheme.fr/api/openapi-gpt.json."},"servers":[{"url":"https://montheme.fr"}],"paths":{"/api/theme":{"get":{"summary":"Calculer un thème natal","description":"La réponse commence par `partage` : `lien` (adresse courte montheme.fr à donner à la personne, elle ouvre la page complète avec roue et boutons de partage) et `consigne` (phrase qui annonce le lien, lecture, puis lien). Tous les liens des réponses sont sur montheme.fr. Puis `lectureExpress` (signature, portrait, forces, leviers), `naissance`, `bigThree`, `planetes`, `angles`, `maisons`, `aspects`, `dominantes`, `lune`, `textes` (textes rédigés du site pour chaque position, avec le lien de leur page) et `transits` (en ce moment, maisons traversées, à venir).","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","example":"1990-05-12"},"description":"Date de naissance AAAA-MM-JJ (1900–2100)."},{"name":"heure","in":"query","required":false,"schema":{"type":"string","example":"14:30"},"description":"Heure locale HH:MM, ou « inconnue » / « unknown » (calcul à midi, sans Ascendant ni maisons)."},{"name":"ville","in":"query","required":false,"schema":{"type":"string","example":"Paris"},"description":"Ville de naissance (recherche hors-ligne, 86 000 villes)."},{"name":"pays","in":"query","required":false,"schema":{"type":"string","example":"FR"},"description":"Code pays ISO 3166-1 alpha-2 pour lever les ambiguïtés."},{"name":"lat","in":"query","required":false,"schema":{"type":"number"}},{"name":"lon","in":"query","required":false,"schema":{"type":"number"},"description":"Longitude est positive."},{"name":"tz","in":"query","required":false,"schema":{"type":"string","example":"Europe/Paris"},"description":"Fuseau IANA ; déduit des coordonnées si absent."},{"name":"prenom","in":"query","required":false,"schema":{"type":"string"}},{"name":"maisons","in":"query","required":false,"schema":{"type":"string","enum":["placidus","egales","signes-entiers"]}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["fr","en"]},"description":"Langue des textes, des libellés et des liens (défaut fr). Les clés JSON restent en français."},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","text","ia"]},"description":"`text` : texte brut prêt à lire, lien à donner à la personne en première ligne. `ia` : ce texte dans un JSON court (`source`, `lien`, `image`, `consigne`, `texte`), sous la limite de taille des actions de GPT."}],"responses":{"200":{"description":"Thème calculé (JSON ou texte brut)."},"400":{"description":"Paramètres invalides ; le champ `error` explique le problème."}}}},"/api/synastrie":{"get":{"summary":"Comparer deux thèmes (compatibilité)","description":"Mêmes paramètres qu’un thème, suffixés 1 et 2. La réponse commence par `partage` : `lien` (adresse courte montheme.fr à donner à la personne, elle ouvre la page complète avec roue et boutons de partage) et `consigne` (phrase qui annonce le lien, lecture, puis lien). Tous les liens des réponses sont sur montheme.fr. Puis `personnes`, `notes` (amour, communication, duree, passion, global, sur 5), `appuis`, `leviers`, `aspects` (planète de la personne 1, aspect, planète de la personne 2, orbe, page), `lecture`.","parameters":[{"name":"date1","in":"query","required":true,"schema":{"type":"string","example":"1990-05-12"},"description":"Date de naissance AAAA-MM-JJ (1900–2100)."},{"name":"heure1","in":"query","required":false,"schema":{"type":"string","example":"14:30"},"description":"Heure locale HH:MM, ou « inconnue » / « unknown » (calcul à midi, sans Ascendant ni maisons)."},{"name":"ville1","in":"query","required":false,"schema":{"type":"string","example":"Paris"},"description":"Ville de naissance (recherche hors-ligne, 86 000 villes)."},{"name":"pays1","in":"query","required":false,"schema":{"type":"string","example":"FR"},"description":"Code pays ISO 3166-1 alpha-2 pour lever les ambiguïtés."},{"name":"lat1","in":"query","required":false,"schema":{"type":"number"}},{"name":"lon1","in":"query","required":false,"schema":{"type":"number"},"description":"Longitude est positive."},{"name":"tz1","in":"query","required":false,"schema":{"type":"string","example":"Europe/Paris"},"description":"Fuseau IANA ; déduit des coordonnées si absent."},{"name":"prenom1","in":"query","required":false,"schema":{"type":"string"}},{"name":"date2","in":"query","required":true,"schema":{"type":"string","example":"1990-05-12"},"description":"Date de naissance AAAA-MM-JJ (1900–2100)."},{"name":"heure2","in":"query","required":false,"schema":{"type":"string","example":"14:30"},"description":"Heure locale HH:MM, ou « inconnue » / « unknown » (calcul à midi, sans Ascendant ni maisons)."},{"name":"ville2","in":"query","required":false,"schema":{"type":"string","example":"Paris"},"description":"Ville de naissance (recherche hors-ligne, 86 000 villes)."},{"name":"pays2","in":"query","required":false,"schema":{"type":"string","example":"FR"},"description":"Code pays ISO 3166-1 alpha-2 pour lever les ambiguïtés."},{"name":"lat2","in":"query","required":false,"schema":{"type":"number"}},{"name":"lon2","in":"query","required":false,"schema":{"type":"number"},"description":"Longitude est positive."},{"name":"tz2","in":"query","required":false,"schema":{"type":"string","example":"Europe/Paris"},"description":"Fuseau IANA ; déduit des coordonnées si absent."},{"name":"prenom2","in":"query","required":false,"schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["fr","en"]},"description":"Langue des textes, des libellés et des liens (défaut fr). Les clés JSON restent en français."},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","text","ia"]},"description":"`text` : texte brut prêt à lire, lien à donner à la personne en première ligne. `ia` : ce texte dans un JSON court (`source`, `lien`, `image`, `consigne`, `texte`), sous la limite de taille des actions de GPT."}],"responses":{"200":{"description":"Synastrie calculée (JSON ou texte brut)."},"400":{"description":"Paramètres invalides pour l’une des deux personnes."}}}},"/api/revolution-solaire":{"get":{"summary":"Révolution solaire (carte de l’année)","description":"Instant exact du retour du Soleil à sa position natale et carte du ciel de cet instant au lieu de naissance. La réponse commence par `partage` : `lien` (adresse courte montheme.fr à donner à la personne, elle ouvre la page complète avec roue et boutons de partage) et `consigne` (phrase qui annonce le lien, lecture, puis lien). Tous les liens des réponses sont sur montheme.fr. Puis `annee`, `periode`, `retour`, `carteDeLAnnee`, `lecture`, `planetes`, `angles`, `maisons`, `aspects`.","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","example":"1990-05-12"},"description":"Date de naissance AAAA-MM-JJ (1900–2100)."},{"name":"heure","in":"query","required":false,"schema":{"type":"string","example":"14:30"},"description":"Heure locale HH:MM, ou « inconnue » / « unknown » (calcul à midi, sans Ascendant ni maisons)."},{"name":"ville","in":"query","required":false,"schema":{"type":"string","example":"Paris"},"description":"Ville de naissance (recherche hors-ligne, 86 000 villes)."},{"name":"pays","in":"query","required":false,"schema":{"type":"string","example":"FR"},"description":"Code pays ISO 3166-1 alpha-2 pour lever les ambiguïtés."},{"name":"lat","in":"query","required":false,"schema":{"type":"number"}},{"name":"lon","in":"query","required":false,"schema":{"type":"number"},"description":"Longitude est positive."},{"name":"tz","in":"query","required":false,"schema":{"type":"string","example":"Europe/Paris"},"description":"Fuseau IANA ; déduit des coordonnées si absent."},{"name":"prenom","in":"query","required":false,"schema":{"type":"string"}},{"name":"annee","in":"query","required":false,"schema":{"type":"integer","example":2026},"description":"Année de l’anniversaire qui ouvre l’année (défaut : la révolution en cours)."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["fr","en"]},"description":"Langue des textes, des libellés et des liens (défaut fr). Les clés JSON restent en français."},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","text","ia"]},"description":"`text` : texte brut prêt à lire, lien à donner à la personne en première ligne. `ia` : ce texte dans un JSON court (`source`, `lien`, `image`, `consigne`, `texte`), sous la limite de taille des actions de GPT."}],"responses":{"200":{"description":"Révolution solaire calculée (JSON ou texte brut)."},"400":{"description":"Paramètres invalides."}}}},"/api/interpretation":{"get":{"summary":"Texte complet d’une position","description":"Le texte rédigé du site (ou composé par règles pour les familles générées) pour une position : titre, accroche, paragraphes, mots-clés, forces, défis, conseil, lien de la page sur montheme.fr. Noms en français ou en anglais.","parameters":[{"name":"type","in":"query","required":true,"schema":{"type":"string","enum":["planete-signe","planete-maison","aspect","soleil-ascendant","soleil-lune","aspect-angle","retrograde-natal","maison-signe","degre","decan","compatibilite","synastrie-aspect","transit-aspect","transit-maison"]},"description":"Type de position (les noms anglais de l’outil MCP sont acceptés aussi : planet_in_sign, planet_in_house…)."},{"name":"planete","in":"query","required":false,"schema":{"type":"string","example":"lune"},"description":"Planète ou point (soleil… pluton, noeud-nord, chiron, lilith, ascendant, mc) ; transit : planète qui transite."},{"name":"planete2","in":"query","required":false,"schema":{"type":"string"},"description":"Seconde planète (aspect, synastrie) ou point natal (transit)."},{"name":"signe","in":"query","required":false,"schema":{"type":"string","example":"scorpion"}},{"name":"signe2","in":"query","required":false,"schema":{"type":"string"},"description":"Second signe (soleil-ascendant : Ascendant ; soleil-lune : Lune ; compatibilité)."},{"name":"maison","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":12}},{"name":"aspect","in":"query","required":false,"schema":{"type":"string","enum":["conjonction","sextile","carre","trigone","opposition"]}},{"name":"angle","in":"query","required":false,"schema":{"type":"string","enum":["ascendant","mc"]}},{"name":"degre","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":29}},{"name":"decan","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":3}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["fr","en"]},"description":"Langue des textes, des libellés et des liens (défaut fr). Les clés JSON restent en français."},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","text","ia"]},"description":"`text` : texte brut prêt à lire, lien à donner à la personne en première ligne. `ia` : ce texte dans un JSON court (`source`, `lien`, `image`, `consigne`, `texte`), sous la limite de taille des actions de GPT."}],"responses":{"200":{"description":"Texte de la position (JSON ou texte brut)."},"400":{"description":"Type ou paramètre inconnu ; `error` liste les valeurs possibles."}}}},"/api/ciel":{"get":{"summary":"Positions planétaires du moment","description":"Calcul pour Paris (un jour donné : à midi, heure de Paris) ; `partage.lien` : la page de ce ciel.","parameters":[{"name":"date","in":"query","required":false,"schema":{"type":"string","example":"2026-10-02"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["fr","en"]},"description":"Langue des textes, des libellés et des liens (défaut fr). Les clés JSON restent en français."},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","text","ia"]},"description":"`text` : texte brut prêt à lire, lien à donner à la personne en première ligne. `ia` : ce texte dans un JSON court (`source`, `lien`, `image`, `consigne`, `texte`), sous la limite de taille des actions de GPT."}],"responses":{"200":{"description":"Ciel du jour."}}}},"/api/villes":{"get":{"summary":"Rechercher une ville","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":15}}],"responses":{"200":{"description":"Liste de villes avec lat, lon, fuseau."}}}},"/api/signalement":{"post":{"summary":"Signaler un sujet que le site ne couvre pas","description":"Pour un assistant IA : un sujet astrologique absent du site, en quelques mots, sans aucune donnée personnelle (les chiffres, e-mails et liens sont retirés). Réponse `recu` (le sujet est-il arrivé chez l’astrologue du site) et `message`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sujet":{"type":"string","maxLength":200},"lang":{"type":"string","enum":["fr","en"]}},"required":["sujet"]}}}},"responses":{"200":{"description":"`recu` (booléen) et `message`."},"400":{"description":"Sujet vide après nettoyage."}}}},"/api/mcp":{"post":{"summary":"Serveur MCP (Model Context Protocol)","description":"Transport Streamable HTTP sans état, JSON-RPC 2.0, sans authentification. Outils : birth_chart, synastry, solar_return, interpretation, sky (et report_missing_topic quand le site peut recevoir les signalements). À ajouter comme connecteur dans un assistant IA (Claude, ChatGPT…).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Réponse JSON-RPC."},"202":{"description":"Notification acceptée."},"400":{"description":"JSON invalide ou version de protocole non prise en charge."}}}}}}