API Trucs à faire
Ajoutez les sorties et les lieux à visiter de toute la France à votre site ou à votre application : une ligne de script et votre clé, comme pour Google Maps.
Mise à jour : 14 octobre 2026
Présentation
TrucsAFaire.sorties() dans votre code.
Widgets prêts à l’emploiUne liste d’événements ou une carte IGN, sans écrire de code.
API RESTDu JSON pour vos serveurs, applications mobiles et bornes : PHP, Python, curl…
Plus de 40 000 sorties (brocantes, fêtes, concerts, expos, sport, sorties en famille) et des milliers de lieux à visiter et d’offices de tourisme, partout en France, mis à jour chaque nuit.
Démarrage rapide
- Obtenez une clé. Elle commence par
dlc_et est réglée pour votre usage : sites autorisés, zone, types d’événements. - Ajoutez le script avec votre clé dans l’adresse, comme pour Google Maps.
- Appelez l’API dans la fonction de rappel, ou posez directement un widget.
<div id="agenda"></div>
<script>
function initTrucs() {
new TrucsAFaire.Liste("#agenda", {
autour: { lat: 46.566, lon: 3.333 }, // Moulins
rayon: 25, // en km
periode: "weekend",
limite: 6
});
}
</script>
<script src="https://VOTRE-SERVEUR/v1/dlc.js?key=VOTRE_CLE&callback=initTrucs" async></script>
<!-- Aucun code à écrire : les réglages se lisent sur l’élément -->
<div data-dlc="liste" data-lat="46.566" data-lon="3.333" data-rayon="25"
data-periode="weekend" data-limite="6"></div>
<div data-dlc="carte" data-lat="46.566" data-lon="3.333" data-rayon="25"
style="height:420px"></div>
<script src="https://VOTRE-SERVEUR/v1/dlc.js?key=VOTRE_CLE" async></script>
// Après le chargement du script
await TrucsAFaire.pret;
const { total, resultats } = await TrucsAFaire.sorties({
dep: "03",
types: ["brocante", "fete"],
periode: "semaine"
});
console.log(total + " sorties cette semaine dans l’Allier");
for (const s of resultats) {
console.log(s.debut, s.titre, s.commune);
}
Clés et restrictions
Chaque appel exige une clé. Comme une clé Google Maps, une clé utilisée dans une page web est visible par les visiteurs : c’est la restriction par site qui la protège. Chaque clé est réglée à sa création :
| Restriction | Effet | Exemple |
|---|---|---|
| Sites autorisés | La clé ne répond qu’aux pages de ces adresses. Indispensable pour une clé utilisée dans un navigateur. | https://www.ville-moulins.fr |
| Zone | Seuls les événements et lieux situés dans le cercle sont renvoyés. | 25 km autour de Moulins |
| Départements | Liste des départements accessibles. | 03, 58, 71 |
| Types | Catégories d’événements ou de lieux accessibles. | brocante, musee |
| Période | Nombre de jours à venir au plus. | 30 jours |
| Quota | Nombre d’appels par jour (5 000 par défaut). | 5 000 |
X-API-Key et gardez-la dans une variable d’environnement.Pour vérifier les réglages d’une clé : TrucsAFaire.cle() ou GET /v1/cle.
Bibliothèque JavaScript
Charger la bibliothèque
<script src="https://VOTRE-SERVEUR/v1/dlc.js?key=VOTRE_CLE&callback=initTrucs" async></script>
| Paramètre du script | Rôle |
|---|---|
key | Votre clé API (obligatoire). |
callback | Nom d’une fonction globale appelée quand la bibliothèque est prête. Sinon : await TrucsAFaire.pret ou l’événement trucsAFaire:pret sur document. |
Méthodes
| Méthode | Renvoie | Description |
|---|---|---|
TrucsAFaire.sorties(options) | Promise<Réponse> | Événements à venir correspondant aux options. |
TrucsAFaire.lieux(options) | Promise<Réponse> | Lieux à visiter et offices de tourisme. |
TrucsAFaire.autourDeMoi(options) | Promise<Réponse> | Demande la position du visiteur, puis renvoie les sorties (ou les lieux avec quoi: "lieux") les plus proches. |
TrucsAFaire.departements() | Promise<Réponse> | Départements accessibles et nombre de sorties. |
TrucsAFaire.cle() | Promise<Objet> | Réglages et consommation de la clé. |
TrucsAFaire.position() | Promise<{lat, lon}> | Position du visiteur (avec son accord). |
TrucsAFaire.url(chemin, options) | Texte | Adresse REST équivalente, utile pour déboguer. |
TrucsAFaire.configurer({ cle, serveur }) | Objet | Change la clé ou le serveur après chargement. |
reponse.suivante() | Promise<Réponse> | Page suivante, présente seulement s’il reste des résultats. |
Gérer les erreurs
try {
const r = await TrucsAFaire.sorties({ commune: "Nevers", dep: "58" });
} catch (e) {
if (e instanceof TrucsAFaire.Erreur) {
console.warn(e.code, e.statut, e.message); // ex. "quota_atteint", 429
}
}
Widgets
Deux composants prêts à l’emploi, qui suivent la couleur du texte de votre page et s’adaptent à toutes les largeurs.
TrucsAFaire.Liste
TrucsAFaire.Carte
Fond Plan IGN ou photo satellite, points regroupés, fiche au clic. La carte (MapLibre) n’est chargée que si vous l’utilisez.
Options des widgets
| Option | Valeurs | Rôle |
|---|---|---|
quoi | "sorties", "lieux", "tout" (carte) | Contenu affiché. |
disposition | "grille", "liste" | Cartes avec image ou liste compacte. |
couleur | "#f07d00" | Couleur des dates, aux couleurs de votre charte. |
autourDeMoi | true | Centre sur la position du visiteur, s’il l’accepte. |
fond | "plan", "satellite" | Fond de carte au départ. |
auClic | function (fiche, evenement) | Appelée au clic ; renvoyer false empêche l’ouverture du lien. |
messageVide | texte | Message quand rien ne correspond. |
credit | false | Masque la mention sous la liste (la citer ailleurs sur la page). |
Toutes les options de recherche s’appliquent aussi. Pour changer les critères : widget.actualiser({ periode: "mois" }).
API REST
Pour un serveur, une application mobile ou une borne : des requêtes GET qui renvoient du JSON.
https://VOTRE-SERVEUR/v1/sortiesGEThttps://VOTRE-SERVEUR/v1/lieuxGEThttps://VOTRE-SERVEUR/v1/departementsGEThttps://VOTRE-SERVEUR/v1/cleClé dans l’en-tête X-API-Key (recommandé côté serveur) ou dans le paramètre key.
curl -H "X-API-Key: VOTRE_CLE" \
"https://VOTRE-SERVEUR/v1/sorties?lat=46.566&lon=3.333&rayon=25&type=brocante&tri=distance"
const url = new URL("https://VOTRE-SERVEUR/v1/sorties");
url.search = new URLSearchParams({ dep: "03", type: "brocante,fete", limite: 20 });
const r = await fetch(url, { headers: { "X-API-Key": process.env.DLC_CLE } });
const { total, resultats } = await r.json();
<?php
$url = "https://VOTRE-SERVEUR/v1/sorties?" . http_build_query([
"dep" => "03", "type" => "brocante,fete", "limite" => 20,
]);
$ctx = stream_context_create(["http" => ["header" => "X-API-Key: " . getenv("DLC_CLE")]]);
$data = json_decode(file_get_contents($url, false, $ctx), true);
foreach ($data["resultats"] as $s) {
echo $s["debut"] . " · " . $s["titre"] . " · " . $s["commune"] . "\n";
}
import os, requests
r = requests.get(
"https://VOTRE-SERVEUR/v1/sorties",
params={"dep": "03", "type": "brocante,fete", "limite": 20},
headers={"X-API-Key": os.environ["DLC_CLE"]},
timeout=10,
)
r.raise_for_status()
for s in r.json()["resultats"]:
print(s["debut"], s["titre"], s["commune"])
Réponse
{
"total": 37,
"page": 1,
"limite": 20,
"du": "2026-10-14",
"au": "9999-12-31",
"resultats": [
{
"id": "dt-3f9a…",
"titre": "Vide-greniers d’automne",
"type": "brocante",
"debut": "2026-10-18",
"fin": "2026-10-18",
"heure": "07:00",
"commune": "Yzeure",
"departement": "03",
"latitude": 46.565,
"longitude": 3.356,
"distance_km": 1.8,
"gratuit": true,
"lien": "https://…",
"billetterie": "https://…",
"source": "DATAtourisme"
}
],
"licence": "Données agrégées par Trucs à faire…"
}
Paramètres
Mêmes noms dans la bibliothèque (objet d’options) et dans l’API REST (paramètres d’adresse), sauf mention.
| Bibliothèque | REST | Exemple | Rôle |
|---|---|---|---|
dep | dep | "03,58" ou ["03","58"] | Départements, 8 au plus. Facultatif avec une position ou une clé réglée sur une zone. |
types | type | ["brocante","fete"] | Sorties : brocante, fete, spectacle, culture, famille, sport, pal. Lieux : office, musee, patrimoine, nature, loisirs. |
autour | lat, lon | { lat: 46.566, lon: 3.333 } | Centre de recherche ; ajoute distance_km à chaque résultat. |
rayon | rayon | 25 | Rayon en km autour du centre (20 par défaut, 300 au plus). |
periode | — | "weekend" | Raccourci : aujourdhui, demain, weekend, semaine, mois, ou un nombre de jours. |
du, au | du, au | "2026-10-18" ou une Date | Période (par défaut, à partir d’aujourd’hui). |
tri | tri | "distance" | Plus proches d’abord (sinon par date). |
commune | commune | "Moulins" | Une seule commune. |
recherche | q | "marché de Noël" | Mot cherché dans le titre, le lieu et la description. |
gratuit | gratuit=1 | true | Seulement les sorties gratuites. |
limite, page | limite, page | 20, 1 | Pagination : 100 par défaut, 500 au plus. |
Objets renvoyés
Chaque réponse contient total, page, limite, resultats et licence.
Sortie
| Champ | Type | Description |
|---|---|---|
id | texte | Identifiant stable. |
titre, description | texte | Nom et présentation. |
type | texte | Catégorie (voir types). |
debut, fin, heure | AAAA-MM-JJ, HH:MM | Dates et heure de début ; autres_dates : nombre d’autres dates. |
commune, departement, lieu | texte | Où cela se passe. |
latitude, longitude, distance_km | nombre | Position, et distance au centre demandé. |
gratuit | booléen | Entrée gratuite. |
lien, image, source | texte | Site ou page de l’événement, image, producteur de la donnée. |
billetterie | texte | Page de billetterie ou de réservation quand il y a des places à acheter ou une inscription (vide sinon). |
Lieu
| Champ | Type | Description |
|---|---|---|
id, nom, type, description | texte | Identité du lieu. |
adresse, commune, departement | texte | Adresse. |
site, telephone | texte | Contact. |
horaires_osm | texte | Horaires au format OpenStreetMap, par exemple Tu-Su 10:00-18:00. |
label, principal | texte, booléen | Label (Musée de France…) et lieu majeur. |
latitude, longitude, distance_km | nombre | Position. |
Erreurs et quotas
| Statut | Code | Signification |
|---|---|---|
| 400 | dep_requis | Ni département, ni position, ni zone réglée sur la clé. |
| 400 | trop_de_departements | Plus de 8 départements en un appel. |
| 401 | cle_invalide | Clé absente ou inconnue. |
| 403 | cle_revoquee | Clé désactivée. |
| 403 | origine_refusee | Page appelante non autorisée pour cette clé. |
| 403 | departement_non_autorise, type_non_autorise | Hors des réglages de la clé ; la réponse liste ce qui est autorisé. |
| 429 | quota_atteint | Quota du jour atteint ; il se renouvelle à minuit (UTC). |
Chaque réponse porte l’en-tête X-Quota-Restant. Les réponses sont mises en cache 10 minutes : inutile d’appeler plus souvent.
Essayer l’API
Composez une requête et lancez-la. Sans clé, la console interroge les données publiques en mode démonstration, avec le même format de réponse.
Conditions
- Données mises à jour chaque nuit ; les horaires des lieux viennent d’OpenStreetMap (ODbL).
- Affichez « Trucs à faire » et la source de chaque fiche (les widgets le font pour vous). Les données restent sous la licence de leurs producteurs : voir les mentions légales.
- Une clé peut être suspendue en cas d’usage abusif ou de revente des données.
- Questions, demande de clé ou de quota plus élevé : clementer@gmail.com.