Intégration
L’API REST de Wise Timetable
Tout ce que publie Wise Timetable peut être lu au format JSON via HTTPS — par votre portail, votre environnement numérique d’apprentissage, votre propre application, un écran d’information ou un outil de reporting. Le manuel est public : vos développeurs peuvent donc juger de l’intégration avant que quiconque ne signe quoi que ce soit.
- API v2, JSON via HTTPS
- Manuel complet, sans formulaire
- Mise en cache ETag, 304 quand rien n’a changé
Vous pouvez l’inspecter dès maintenant
La description du service ne demande aucun identifiant, de sorte que la première question d’un développeur trouve réponse en une ligne.
GET https://wise-tt.com/api/v2/meta renvoie le nom du service, la version et la liste des points d’accès que le serveur sert actuellement. Pas de jeton, pas de compte, pas d’appel commercial — ouvrez-le dans un navigateur. C’est aussi la manière honnête de découvrir tout ce qui a été ajouté depuis la dernière révision du manuel.
Le manuel d’intégration est publié en intégralité, sans formulaire, avec les paramètres de chaque point d’accès, un exemple de réponse réaliste pour chacun et des exemples complets fonctionnels en curl, Python, JavaScript et C. Nous le publions parce qu’une intégration qui paraît faisable sur le papier et qui se révèle ne pas l’être est une découverte bien plus coûteuse au troisième mois.
La lecture des données exige bien un compte d’API, délivré par nous et limité aux établissements qu’il peut lire. C’est volontaire : un emploi du temps indique qui enseigne quoi et quels étudiants y assistent.
Une requête par vue, pas une chaîne de requêtes
GET /v2/schedule prend un établissement, une plage de dates et ce que vous suivez — des groupes, un enseignant, une salle, un cours, ou rien du tout pour tout l’établissement — et renvoie chaque événement de la plage avec ses salles, enseignants, groupes et filières déjà renseignés, ainsi que les jours fériés de l’établissement et les bornes de l’année universitaire publiée. Aucun appel supplémentaire n’est nécessaire pour convertir des identifiants en noms.
Mesurée sur le plus grand établissement du serveur, une semaine représente environ 100 ko et 75 ms. La plage est plafonnée à 400 jours par requête, ce qui rend le pire cas connaissable plutôt qu’une surprise le jour où quelqu’un demande dix ans.
Les identifiants d’événements portent leur nature dans le premier caractère : S pour une séance planifiée, R pour une réservation — un examen, une réservation de salle, une réunion, une séance de laboratoire.
Ce que l’API expose
- Les plannings, par groupe d’étudiants, enseignant, salle ou cours — ou pour tout l’établissement à la fois
- Le détail complet d’un événement unique, y compris la hiérarchie programme, année, filière et groupe derrière chaque groupe qui y assiste
- Les bornes de l’année universitaire publiée, afin qu’un client puisse empêcher l’utilisateur de naviguer vers des semaines qui ne peuvent contenir aucune donnée
- Les jours fériés, afin qu’un jour vide se lise comme un jour férié plutôt que comme une donnée manquante
- Les notifications rattachées à un établissement, un groupe, un cours ou un enseignant, dédoublonnées et renvoyées sous forme d’objets structurés
- Les listes de codes des programmes, filières, groupes, enseignants, salles et cours — les identifiants et libellés à partir desquels un sélecteur est construit
- La capacité des salles, le code de salle et la boîte aux lettres propre à la salle de l’établissement, lorsque celui-ci les a renseignés
- La grille horaire des sonneries de l’établissement, car la durée des créneaux n’est pas la même partout
- Les propres numéros de semaine de l’établissement, et le propre nom qu’il donne à une semaine lorsqu’il en a un — un numéro de semaine dans ce produit n’est pas la semaine ISO de l’année civile, et aucun client ne devrait jamais en calculer une
- Les types de réservation qu’utilise un établissement et les salles que chaque enseignant est autorisé à réserver, pour un client qui propose la réservation en plus de la lecture
- Ce que chaque établissement autorise un client à proposer, de sorte qu’un sélecteur de consultation par enseignant soit masqué là où les engagements des enseignants sont traités comme confidentiels
- Les listes de présence, lorsqu’un établissement relève la présence par QR code — la liste de chaque cours en entier, par dates pour un premier remplissage puis ce qui a changé depuis le dernier appel, pour un système d’information étudiant. Ce sont des données personnelles sur les étudiants : un compte ne les lit qu’avec une autorisation spécifique
Et ce que vous pouvez écrire
L’API est principalement en lecture et chaque exception est nommée. POST /v2/eventlinks rattache un lien de réunion en ligne à des événements individuels par leur identifiant stable — le lien survit à la prochaine republication depuis l’application de bureau, et un lien saisi par le planificateur l’emporte sur un lien poussé. POST /v2/student-registration permet à un système d’information étudiant d’indiquer à quels groupes et sessions de cours appartient un étudiant. PUT /v2/lecturer-language définit la langue dans laquelle est rédigé le PDF d’emploi du temps d’un enseignant, pour les établissements qui enseignent en plusieurs langues.
Chacune est désactivée sauf si votre compte est explicitement autorisé à l’utiliser, et chacune renvoie des résultats élément par élément plutôt que d’échouer pour tout le lot parce qu’un code de cours a été mal saisi.
Réservations de salles, faites par une personne plutôt que par un compte
La réservation est la seule partie de l’API qui ne demande aucun compte d’intégration, et la raison mérite d’être énoncée clairement : une réservation est faite par quelqu’un, et l’emploi du temps enregistre qui. Un membre du personnel se connecte avec son propre nom d’utilisateur et mot de passe, reçoit un jeton qui désigne un seul établissement et dure huit heures, et crée, modifie et supprime des réservations en son propre nom — ce qui explique aussi pourquoi un identifiant compilé dans une application publiée ne peut jamais atteindre cette surface.
Avant d’écrire quoi que ce soit, un client peut demander si un schéma est libre. GET /v2/free-busy développe un mardi sur deux de mars à mai, 08:00–10:00, salle B-004 en dates réelles et indique, date par date, ce qui gêne déjà — et s’il s’agit de la salle, de l’enseignant ou du groupe. Un conflit est refusé avec les dates en conflit jointes, et non par un simple non, accompagné des heures de début les plus proches et des autres salles libres à chacune de ces dates. Un planificateur qui y tient peut malgré tout réserver par-dessus le conflit, et cela est consigné comme une décision délibérée plutôt que dissimulé.
L’ensemble de la surface — connexion d’une personne, types de réservation de l’établissement, liste blanche de salles de chaque enseignant, disponibilité, et création, modification et suppression d’une réservation — fait l’objet du chapitre 13 du manuel, avec un exemple commenté qui va de la connexion à une salle réservée.
Conçue pour un client qui interroge régulièrement
Chaque réponse porte un ETag. Répétez la requête avec If-None-Match et un emploi du temps inchangé répond 304 sans aucun corps, ce qui est le cas courant d’un écran de hall qui se rafraîchit toutes les quelques minutes. Un client bien conçu ne transfère presque rien un jour calme.
Les identifiants sont échangés une seule fois contre un jeton porteur valable 24 heures et qui encode les établissements qu’il peut lire. Les applications de navigateur sont prises en charge via une liste blanche explicite d’origines plutôt qu’un joker — indiquez-nous l’origine d’où votre tableau de bord est servi et elle sera ajoutée.
Des erreurs qui disent ce qui a mal tourné
Un code d’établissement mal saisi, un établissement que votre compte n’a pas le droit de lire et une semaine qui ne comporte réellement aucun cours sont trois situations différentes, et une intégration qui affiche le même message pour les trois fait perdre l’après-midi de quelqu’un. Ce sont 400 unknown_school, 403 school_not_permitted et un 200 parfaitement ordinaire avec une liste vide.
Chaque échec renvoie un code d’erreur stable et lisible par machine, une phrase en anglais et souvent une indication. Un 500 porte un identifiant de référence ; communiquez-le et les lignes de journal exactes peuvent être retrouvées immédiatement.
L’ancienne interface est toujours servie, et toujours figée
Les établissements qui s’étaient intégrés à l’API précédente n’ont pas vu leur intégration cassée par la v2. Les chemins hérités sont toujours servis et délibérément figés, et la v2 conserve volontairement les noms de champs hérités — passer à la v2 est donc un changement d’URL plutôt que d’analyseur, et les champs ajoutés par la v2 sont des ajouts plutôt que des remplacements.
C’est toute la politique en une phrase : une API sur laquelle une université construit est une promesse, et la rompre pour ranger des noms de champs n’est pas une économie.
Télécharger le manuel de l’API
- Wise Timetable REST API — Integration Manual (PDF)Chaque point d’accès avec ses paramètres et un exemple de réponse, l’authentification, la mise en cache, les codes d’erreur, les limites et des exemples d’intégration complets en curl, Python, JavaScript et C.
- Wise Timetable — Importing Companion (PDF, 112 pages)Le pendant par fichiers : chaque import CSV standard, les codes d’import personnalisés et chaque opération personnalisée, avec exemples.
Capacités associées
- Intégration SISLa même connexion décrite pour ceux qui la signent.
- Import automatiqueExcel, CSV et XML, pour les données qui ne viennent jamais d’une API.
- Intégrer votre emploi du temps à votre SISEn quoi consiste réellement le travail, étape par étape.
- DocumentationTous les manuels que nous publions, tous en libre lecture.
Découvrez Wise Timetable sur vos propres données
Réservez une présentation en ligne de 45 minutes. Nous examinerons le problème de planification de votre établissement, montrerons comment Wise Timetable le traite et répondrons à tout ce que votre équipe souhaite tester.