API d'insertion de données

L’application fournit une API qui permet aux établissements de lire ou de créer en masse certaines données de immerSup Il est possible de lire ou de créer des objets :

  • Domaines
  • Sous-Domaines
  • Structures
  • Formations
  • Cours
  • Créneaux
  • Intervenants
  • Etablissement (lecture seulement)
  • Lycée
  • Campus
  • Batiment
  • Visite (lecture seulement)
  • Evènement hors offre (lecture seulement)

L’API est accessible à https://immersup.etab.fr/api/ (avec immersup.etab l’url de votre instance d’immerSup) Le swagger est accessible à cette adresse : https://immersup.etab.fr/api/schema/swagger-ui/#/

Pour utiliser ces routes, il faut un token que le référent technique peut générer dans “Administration/Token”.

Il existe des routes correspondantes respectivement aux usages cités ci-dessus :

  • Domaines : trainingdomains
  • Sous-Domaines : trainingsubdomains
  • Structures : structures
  • Formations : trainings
  • Cours : courses
  • Créneaux : slots
  • Intervenants : speakers
  • Etablissement : establishments
  • Lycée : highschools
  • Campus : campuses
  • Batiment : buildings
  • Visite : visits
  • Evènement hors offre : off_offer_events

Les méthodes GET permettent de lire les données, les méthodes POST permettent d’insérer des données.

Intégration d’un Domaine

Exemple de données pour intégrer un domaine

	{
		"label": "Arts, Lettres & Langues"
	}

Intégration d’un sous-Domaine

Exemple de données pour intégrer un sous-domaine. Le domaine avec un id = 3 doit exister

	{
		"training_domain": 3,
		"label": "Test sous domaine"
	}

Intégration d’une structure

Exemple de données pour intégrer une structure. L’établissement avec un id = 1 doit exister

{ 
	"code": "TEST",
	"label": "Structure Test",
	"establishment": 1
}

Intégration d’une Formation

Exemple de données pour intégrer une formation. Les sous-domaines avec id=11 et id = 12 doivent exister, de même pour la structure avec id=20

	{
		"label": "B.U.T. GEA - Gestion des entreprises et des administrations",
		"training_subdomains": [
			12,11
		],
		"structures": [
			20
		]
	}

Intégration d’un cours

Exemple de données pour intégrer un cours. La formation avec un id=54 doit exister, de même pour la structure avec l’id=2. Les intervenants ne sont pas obligés d’exister déjà côté immersup pour les établissements avec SI.

{
  "label": "Algorithmique et programmation",
  "training": 54,
  "structure": 2,
  "published": true,
  "emails": [
    "intervenant1@unistra.fr","intervenant2@unistra.fr"
  ],
	"speakers": [],
  "url": ""
}

Pour les établissements sans SI ou les lycées, il faut d’abord créer les intervenants puis utiliser cette syntaxe avec les identifiants des intervenants

{
  "label": "Algorithmique et programmation",
  "training": 54,
  "structure": 2,
  "published": true,
	"speakers": [25,4],
  "url": ""
}

Intégration d’un créneau de cours

Exemple de données pour intégrer un créneau de cours. Il faut connaitre l’identifiant du type de cours pour le mettre dans course_type, l’identifiant du cours à mettre dans course et les identifiants de campus et batiment. face-to-face vaut toujours true pour un créneau de cours car le distanciel n’existe pas. Les identifiants des intervenants doivent être parmi les enseignants du cours.

Créneau ouvert uniquement aux immersions individuelles

Il faut mettre le paramètre allow_individual_registrations à true

 {
    "room": "Rdv devant le batiment",
    "date": "2024-07-30",
    "start_time": "08:00:00",
    "end_time": "12:00:00",
    "n_places": 25,
    "additional_information": "Prendre de l'eau il fait chaud",
    "published": true,
    "registration_limit_delay": 24,
    "cancellation_limit_delay": 45,
    "allow_individual_registrations": true,
    "period": 13,
    "course": 56,
    "course_type": 4,
    "campus": 1,
    "building": 2,
    "speakers": [
      847
    ]
  }

Créneau ouvert uniquement aux immersions de groupe

Il faut mettre le paramètre allow_individual_registrations à false, allow_group_registrations à true. Le paramètre group_mode vaut 0 pour un seul groupe, 1 pour un nombre de places, le paramètre public_group vaut true pour un groupe public false pour un groupe privé.

 {
    "room": "Rdv devant le batiment",
    "date": "2024-07-31",
    "start_time": "09:00:00",
    "end_time": "10:00:00",
    "n_places": 10,
    "n_group_places": 25,
    "group_mode": 0,
    "public_group": false,
    "additional_information": "Prendre de l'eau il fait chaud",
    "allow_individual_registrations": true,
    "allow_group_registrations": true,
    "published": true,
    "registration_limit_delay": 24,
    "cancellation_limit_delay": 45,
    "period": 13,
    "course": 56,
    "course_type": 4,
    "campus": 1,
    "building": 2,
    "speakers": [
      847
    ]
  }

Créneau ouvert aux immersions individuelles et de groupe

Il faut mettre le paramètre allow_individual_registrations à true et allow_group_registrations à true également

 {
    "room": "Rdv devant le batiment",
    "date": "2024-07-31",
    "start_time": "09:00:00",
    "end_time": "10:00:00",
    "n_places": 10,
    "n_group_places": 25,
    "group_mode": 0,
    "public_group": false,
    "additional_information": "Prendre de l'eau il fait chaud",
    "allow_individual_registrations": true,
    "allow_group_registrations": true,
    "published": true,
    "registration_limit_delay": 24,
    "cancellation_limit_delay": 45,
    "period": 13,
    "course": 56,
    "course_type": 4,
    "campus": 1,
    "building": 2,
    "speakers": [
      847
    ]
  }

Intégration d’un créneau d’évènement hors offre

Exemple de données pour intégrer un créneau d’évènement hors offre. Il faut connaitre l’identifiant de l’évènement à mettre dans event. place vaut 0 pour un créneau en présentiel et 1 pour un créneau en distanciel et 2 pour un créneau hors établissement. url est obligatoire si le créneau est en distanciel. Il faut mettre campus, batiment et salle pour un créneau en présentiel dans un établissement du supérieur. Les identifiants des intervenants doivent être parmi les intervenants du cours. On peut combiner les créneaux d’évènements présentiel, distanciel et Hors établissement avec des créneaux ouverts aux immersions individuelles et/ou en cohortes.

Distanciel / immersions individuelles

{
  "room":"devant le batiment",
  "date": "2024-07-31",
  "start_time": "13:00",
  "end_time": "14:00",
  "n_places": 15,
  "additional_information": "Avec de la bonne humeur",
  "published": true,
  "place":1,
  "registration_limit_delay": 48,
  "cancellation_limit_delay": 48,
  "allow_individual_registrations": true,
  "event":45,
  "period":13,
  "url":"https://unistra.fr",
  "speakers": [
    847
  ]
}

Présentiel / immersions individuelles

 {
    "room": "Rdv devant le batiment",
    "date": "2024-07-30",
    "start_time": "08:00:00",
    "end_time": "12:00:00",
    "n_places": 25,
    "additional_information": "Prendre de l'eau il fait chaud",
    "place":0,
    "published": true,
    "registration_limit_delay": 24,
    "cancellation_limit_delay": 45,
    "allow_individual_registrations": true,
    "period": 13,
    "course": 56,
    "course_type": 4,
    "campus": 1,
    "building": 2,
    "speakers": [
      847
    ]
  }

Hors Etablissement / immersions individuelles

{
  "room":"devant le batiment",
  "date": "2024-07-31",
  "start_time": "08:00",
  "end_time": "09:00",
  "n_places": 15,
  "additional_information": "Avec de la bonne humeur",
  "published": true,
  "place":2,
  "registration_limit_delay": 48,
  "cancellation_limit_delay": 48,
  "allow_individual_registrations": true,
  "event":45,
  "period":13,
  "speakers": [
    847
  ]
}

Créneau ouvert uniquement aux immersions de groupe hors Etablissement

Il faut mettre le paramètre allow_individual_registrations à false, allow_group_registrations à true. Le paramètre group_mode vaut 0 pour un seul groupe, 1 pour un nombre de places, le paramètre public_group vaut true pour un groupe public false pour un groupe privé.

{
  "room":"dans le lycée choisissant le créneau",
  "date": "2024-07-31",
  "start_time": "08:00",
  "end_time": "12:00",
  "n_group_places": 25,
  "group_mode": 0,
  "public_group": true,
  "additional_information": "Avec de la bonne humeur",
  "published": true,
  "place":2,
  "registration_limit_delay": 48,
  "cancellation_limit_delay": 48,
  "allow_individual_registrations": false,
  "allow_group_registrations": true,
  "event":45,
	"period":13,
  "speakers": [
    847
  ]
}

Créneau ouvert uniquement aux immersions de groupe et individuelles en présentiel

Il faut mettre le paramètre allow_individual_registrations à true, allow_group_registrations à true. Le paramètre group_mode vaut 0 pour un seul groupe, 1 pour un nombre de places, le paramètre public_group vaut true pour un groupe public false pour un groupe privé.

{
  "room":"devant le batiment",
  "date": "2024-07-31",
  "start_time": "14:00",
  "end_time": "16:00",
  "n_places": 15,
  "n_group_places": 25,
  "group_mode": 1,
  "public_group": true,
  "additional_information": "Avec de la bonne humeur",
  "published": true,
  "allow_individual_registrations": true,
  "allow_group_registrations": true,
  "place":0,
  "registration_limit_delay": 48,
  "cancellation_limit_delay": 48,
  "event":45,
  "period":13,
  "campus": 1,
  "building": 3,
  "speakers": [
    847
  ]
}

Intégration d’un intervenant

Exemple de données pour intégrer un intervenant. Les intervenants n’ont besoin d’être créés que pour les lycées ou les établissemnts sans ldap. Il faut connaitre l’identifiant de l’établissement ou du lycée.

Pour un établissement sans système d’information

{
  "last_name": "Dupont",
  "first_name": "Daniel",
  "email": "daniel.dupont@etab.fr",
  "establishment": 4,
  "is_active": true
}

Pour un lycée qui partage son offre

{
  "last_name": "Dupont",
  "first_name": "Daniel",
  "email": "daniel.dupont@lycee.fr",
  "highscool": 4,
  "is_active": true
}

Intégration d’un lycée / collège

Exemple de données pour intégrer un lycée. with_convention détermine si le lycée est conventionné ou non. Si oui les dates de convention sont obligatoire pour un lycée en service (active = true). Si le lycée partage son offre en immersion il faut mettre postbac_immersion= true. Il faut aussi définir si le lycée utilise la fédération Educonnect avec le paramètre uses_student_federation, si on met ce paramètre à true alors au moins un code UAI est obligatoire. Pour la fédération Agent il faut utiliser uses_agent_federation. Le paramètre allow_individual_immersions sert à définir si on ouvre les immersions individuelels pour cet établissement du secondaire

Conventionné

{
  "label": "Lycée Paul Valery",
  "country": "FR",
  "address": "rue du test",
  "address2": "",
  "address3": "",
  "department": "67",
  "city": "Strasbourg",
  "zip_code": "67100",
  "phone_number": "0688888888",
  "fax": "",
  "email": "lycee@ac-strasbourg.fr",
  "head_teacher_name": "M. Dupont",
  "convention_start_date": "2023-07-12",
  "convention_end_date": "2025-08-31",
  "postbac_immersion": false,
  "mailing_list": "",
  "badge_html_color": "#33ff36",
  "active": true,
  "with_convention": true,
  "uses_student_federation": true,
  "uses_agent_federation": false,
  "allow_individual_immersions": true,
  "uai_codes":["0573429T"]
}

Non Conventionné

{
  "label": "Lycée Paul Valery",
  "country": "FR",
  "address": "rue du test",
  "address2": "",
  "address3": "",
  "department": "67",
  "city": "Strasbourg",
  "zip_code": "67100",
  "phone_number": "0688888888",
  "fax": "",
  "email": "lycee2@ac-strasbourg.fr",
  "head_teacher_name": "M. Dupont",
  "postbac_immersion": false,
  "mailing_list": "",
  "badge_html_color": "#33ff36",
  "active": true,
  "with_convention": false,
  "uses_student_federation": true,
  "uses_agent_federation": true,
  "allow_individual_immersions": true,
  "uai_codes":["0573429T"]
}

Intégration d’un campus

Exemple de données pour intégrer un campus. L’établissement avec un id = 1 doit exister

{
  "label": "Campus de Haguenau",
  "active": true,
  "department": "67",
  "city": "Haguenau",
  "zip_code": "67500",
  "establishment": 1
}

Intégration d’un bâtiment

Exemple de données pour intégrer un bâtiment. Le campus avec un id = 2 doit exister

{
  "label": "Mon nouveau batiment",
  "url": "",
  "active": true,
  "campus": 2
}