trucs à faire Retour aux sorties

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

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.

Obtenir une clé Essayer sans clé

Démarrage rapide

  1. Obtenez une clé. Elle commence par dlc_ et est réglée pour votre usage : sites autorisés, zone, types d’événements.
  2. Ajoutez le script avec votre clé dans l’adresse, comme pour Google Maps.
  3. 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 :

RestrictionEffetExemple
Sites autorisésLa clé ne répond qu’aux pages de ces adresses. Indispensable pour une clé utilisée dans un navigateur.https://www.ville-moulins.fr
ZoneSeuls les événements et lieux situés dans le cercle sont renvoyés.25 km autour de Moulins
DépartementsListe des départements accessibles.03, 58, 71
TypesCatégories d’événements ou de lieux accessibles.brocante, musee
PériodeNombre de jours à venir au plus.30 jours
QuotaNombre d’appels par jour (5 000 par défaut).5 000
Depuis un serveur (PHP, Python, application mobile) : ne publiez pas la clé, passez-la dans l’en-tête 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 scriptRôle
keyVotre clé API (obligatoire).
callbackNom 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éthodeRenvoieDescription
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)TexteAdresse REST équivalente, utile pour déboguer.
TrucsAFaire.configurer({ cle, serveur })ObjetChange 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

OptionValeursRô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.
autourDeMoitrueCentre sur la position du visiteur, s’il l’accepte.
fond"plan", "satellite"Fond de carte au départ.
auClicfunction (fiche, evenement)Appelée au clic ; renvoyer false empêche l’ouverture du lien.
messageVidetexteMessage quand rien ne correspond.
creditfalseMasque 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.

GEThttps://VOTRE-SERVEUR/v1/sortiesGEThttps://VOTRE-SERVEUR/v1/lieuxGEThttps://VOTRE-SERVEUR/v1/departementsGEThttps://VOTRE-SERVEUR/v1/cle

Clé 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èqueRESTExempleRôle
depdep"03,58" ou ["03","58"]Départements, 8 au plus. Facultatif avec une position ou une clé réglée sur une zone.
typestype["brocante","fete"]Sorties : brocante, fete, spectacle, culture, famille, sport, pal. Lieux : office, musee, patrimoine, nature, loisirs.
autourlat, lon{ lat: 46.566, lon: 3.333 }Centre de recherche ; ajoute distance_km à chaque résultat.
rayonrayon25Rayon 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, audu, au"2026-10-18" ou une DatePériode (par défaut, à partir d’aujourd’hui).
tritri"distance"Plus proches d’abord (sinon par date).
communecommune"Moulins"Une seule commune.
rechercheq"marché de Noël"Mot cherché dans le titre, le lieu et la description.
gratuitgratuit=1trueSeulement les sorties gratuites.
limite, pagelimite, page20, 1Pagination : 100 par défaut, 500 au plus.

Objets renvoyés

Chaque réponse contient total, page, limite, resultats et licence.

Sortie

ChampTypeDescription
idtexteIdentifiant stable.
titre, descriptiontexteNom et présentation.
typetexteCatégorie (voir types).
debut, fin, heureAAAA-MM-JJ, HH:MMDates et heure de début ; autres_dates : nombre d’autres dates.
commune, departement, lieutexteOù cela se passe.
latitude, longitude, distance_kmnombrePosition, et distance au centre demandé.
gratuitbooléenEntrée gratuite.
lien, image, sourcetexteSite ou page de l’événement, image, producteur de la donnée.
billetterietextePage de billetterie ou de réservation quand il y a des places à acheter ou une inscription (vide sinon).

Lieu

ChampTypeDescription
id, nom, type, descriptiontexteIdentité du lieu.
adresse, commune, departementtexteAdresse.
site, telephonetexteContact.
horaires_osmtexteHoraires au format OpenStreetMap, par exemple Tu-Su 10:00-18:00.
label, principaltexte, booléenLabel (Musée de France…) et lieu majeur.
latitude, longitude, distance_kmnombrePosition.

Erreurs et quotas

StatutCodeSignification
400dep_requisNi département, ni position, ni zone réglée sur la clé.
400trop_de_departementsPlus de 8 départements en un appel.
401cle_invalideClé absente ou inconnue.
403cle_revoqueeClé désactivée.
403origine_refuseePage appelante non autorisée pour cette clé.
403departement_non_autorise, type_non_autoriseHors des réglages de la clé ; la réponse liste ce qui est autorisé.
429quota_atteintQuota 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.