{"openapi":"3.1.0","info":{"title":"Salut France : API v1","version":"1.0.0","description":"Les mêmes opérations que le serveur MCP de Salut France. Réponses à partir de documents publics officiels uniquement : un chiffre égale une source. Jeton gratuit (100 appels par jour) sur https://salutfrance.fr/agents."},"servers":[{"url":"https://api.salutfrance.fr/v1"}],"security":[{"jeton":[]}],"paths":{"/dossiers":{"post":{"operationId":"poser_question","summary":"Pose une question et renvoie le dossier (dossier.v1). 20 à 90 secondes.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"question":{"type":"string","minLength":5,"maxLength":12000,"description":"La question, en français, ou un texte à vérifier (jusqu'à 12 000 caractères)."}},"required":["question"]}}}},"responses":{"200":{"description":"Le dossier, avec le lien de sa page publique.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dossier"}}}},"401":{"description":"Jeton absent, invalide ou révoqué.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"429":{"description":"Quota journalier du jeton atteint (en-tête Retry-After en secondes).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}}}}},"/dossiers/{id}":{"get":{"operationId":"lire_dossier","summary":"Lit un dossier produit.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Le dossier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dossier"}}}},"401":{"description":"Jeton absent, invalide ou révoqué.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"404":{"description":"Dossier introuvable."},"429":{"description":"Quota journalier du jeton atteint (en-tête Retry-After en secondes).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}}}}},"/faits":{"get":{"operationId":"lire_faits","summary":"Lit la base de faits vérifiés (40 au plus).","parameters":[{"name":"theme","in":"query","required":false,"description":"Thème, par exemple education.","schema":{"type":"string"}},{"name":"recherche","in":"query","required":false,"description":"Mots-clés.","schema":{"type":"string"}},{"name":"annee","in":"query","required":false,"description":"Année du fait.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Faits et sources.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Jeton absent, invalide ou révoqué.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"429":{"description":"Quota journalier du jeton atteint (en-tête Retry-After en secondes).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}}}}},"/donnees/croiser":{"post":{"operationId":"croiser_donnees","summary":"SQL en lecture seule sur la table commune (3 s, 200 lignes).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sql"],"properties":{"sql":{"type":"string","description":"Un SELECT sur la table commune."}}}}}},"responses":{"200":{"description":"Lignes et sources des colonnes.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Requête refusée."},"401":{"description":"Jeton absent, invalide ou révoqué.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"429":{"description":"Quota journalier du jeton atteint (en-tête Retry-After en secondes).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}}}}},"/sources":{"get":{"operationId":"lister_sources","summary":"Liste les sources officielles interrogeables.","parameters":[{"name":"theme","in":"query","required":false,"description":"Ne garder que ce thème.","schema":{"type":"string"}}],"responses":{"200":{"description":"Sources.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Jeton absent, invalide ou révoqué.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"429":{"description":"Quota journalier du jeton atteint (en-tête Retry-After en secondes).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}}}}},"/sources/recherche":{"get":{"operationId":"chercher_source","summary":"Cherche dans le registre des sources officielles.","parameters":[{"name":"q","in":"query","required":true,"description":"Mots-clés.","schema":{"type":"string"}},{"name":"limite","in":"query","required":false,"description":"1 à 8.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Sources trouvées.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Jeton absent, invalide ou révoqué.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}},"429":{"description":"Quota journalier du jeton atteint (en-tête Retry-After en secondes).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Erreur"}}}}}}},"/jetons":{"post":{"operationId":"demander_jeton","summary":"Demande un jeton gratuit : un lien de confirmation part par e-mail.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}}}}}},"responses":{"202":{"description":"Demande enregistrée."},"400":{"description":"Adresse invalide."},"429":{"description":"Trop de demandes."}}}},"/jeton":{"delete":{"operationId":"revoquer_jeton","summary":"Révoque le jeton qui signe la requête.","responses":{"200":{"description":"Jeton révoqué."},"401":{"description":"Jeton invalide."}}}}},"components":{"securitySchemes":{"jeton":{"type":"http","scheme":"bearer","description":"Jeton sf_… obtenu sur https://salutfrance.fr/agents."}},"schemas":{"Erreur":{"type":"object","properties":{"erreur":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"Dossier":{"type":"object","description":"Format dossier.v1 : une liste de blocs typés (titre, reponse_courte, chiffre_cle, graphique, tableau, verdict, nuance, sources). Chaque bloc chiffré porte un source_id qui renvoie au bloc sources.","properties":{"schema":{"const":"dossier.v1"},"id":{"type":["string","null"]},"url":{"type":["string","null"]},"titre":{"type":["string","null"]},"blocs":{"type":"array","items":{"type":"object","required":["type"],"properties":{"type":{"enum":["titre","reponse_courte","chiffre_cle","graphique","tableau","verdict","nuance","sources"]}}}}}}}}}