Nos APIs

Ici nous vous proposons d'utiliser notre API pour synchroniser les données depuis votre logiciel de gestion vers le notre.

Pour synchroniser les données de votre logiciel vers le notre, nous vous proposons d'utiliser directement l'API REST

Structure de données

Au sein de Campus Skills la structure des données peut être décrite ainsi :

  • Votre organisme peut être déployé dans plusieurs villes nous appelons ça des sites

  • (optionnel) Chaque site peut avoir plusieurs marques

  • Il y a des périodes de formation qui correspondent classiquement aux années scolaires ( 2020/2021, 2021/2022 etc )

  • Il y a des programmes de formations ( BTS MCO, Licence RH ) qui sont déployés sur un site et sur une période.

  • Il y a des années de formation ( Licence RH 1ière année, License RH 2ième année etc.. )

  • Et il y a des groupes qui correspondent à des sessions de formation.

Nous voulons avec cette structure regrouper les apprenants qui suivent la même formation sur le même site pour la même période donnée et la même année.

Cela vous permettra d'avoir un suivi clair.

Ainsi en plus des données sur le contrat, nous vous demandons d'ajouter des informations supplémentaires

Unicité des ids

Attention dans les données à synchroniser nous vous demandons de spécifier les identifiants de vos utilisateurs, ces identifiants doivent être uniques quelque soit la collection.

Par exemple si un etudiant a le même identifiant qu'un maitre d'apprentissage, l'appel API va vous retourner une erreur

Si vous avez des tables différentes en fonction des rôles et donc potentiellement des conflits d'ids entre ces tables, merci de prédixer les identifiant envoyés.

Unicité des emails

Dans notre SI, un email est rattaché à un compte et un seul. Si deux tuteurs entreprises ont le même mail, vous ne pourrez pas synchroniser les données

Différence entre contrat transmis et intégré

Un contrat transmis est une donnée que nous recevons via API

Un contrat intégré est un contrat transmis que nous avons su associer à une session ( cela nécessite que l'équipe intégration a configuré les modèles )

Synchroniser les contrats

Nous envoyer les contrats

POST {{base_url}}/api/sync/v2/contrats

Request Body (format JSON)

Un tableau représentant l'intégralité de vos contrats actifs, cf exemple plus bas. Ci-dessous la liste des champs pour chaque contrats :

Name
Type
Description

dateFin

string

Date au format DD/MM/YYYY

dateDebut

string

Date au format DD/MM/YYYY

nomGroupe*

string

Nom du groupe

nomEntreprise*

string

Nom de l'entreprise

emailPersonnel*

string

Email du tuteur école

prenomPersonnel*

string

Prénom du tuteur école

nomPersonnel*

string

Nom du tuteur école

codePersonnel*

string

Code du tuteur école, doit être unique parmi tous les utilisateurs

emailMaitreApprentissage*

string

Email maitre apprentissage

prenomMaitreApprentissage*

string

Prenom maitre apprentissage

nomMaitreApprentissage*

string

Nom maitre apprentissage

codeMaitreApprentissage*

string

Identifiant du maitre apprentissage, doit être unique parmi tous les utilisateurs

nomApprenant*

string

Nom de l'apprenant

emailApprenant*

string

email de l'apprenant

prenomApprenant*

string

Prenom de l'apprenant

codeApprenant*

string

Identifiant de l'apprenant, doit être unique parmi tous les utilisateurs

codeGroupe*

string

L'identifiant unique du groupe de l'apprenant

ccodeContrat*

string

L'identifiant unique du contrat

codePeriode*

string

Identifiant de la période associée ( le couple codePeriode, nomPeriode doit être unique )

nomPeriode*

string

Nom de la période

codeFormation*

string

Identifiant de la formation ( le couple codeFormation, nomFormation doit être unique )

nomFormation*

string

Le nom de la formation

codeSite*

string

Identifiant du site ( le couple codeSite, nomSite doit être unique )

nomSite*

string

Nom du site

codeMarque

string

Code de la marque

nomMarque

string

Nom de la marque

codeAnnee*

string

Identifiant de l'année ( le couple codeAnnee, nomAnnee doit être unique )

nomAnnee*

string

Nom de l'année

missionTitle

string

Titre de la mission

missionDetails

string

Descriptif de la mission

monthStartGroup

string

Info de démarrage du groupe permettant de gérer les rentrées décalées

rncp

string

codeRNCP

Exemple

[
    {
        codeContrat: "1234",
        dateDebut: "01/09/2025",
        dateFin: "30/06/2026",
        nomEntreprise: "Auchan",
        codeGroupe: "Groupe1",
        nomGroupe: "BTS MCO Rennes 1ère année",
        codeSite: "Site1",
        nomSite: "Rennes",
        codePeriode: "Periode1",
        nomPeriode: "2025/2026",
        codeAnnee: "Annee1",
        nomAnnee: "1ère année",
        codeFormation: "BTSMCO",
        nomFormation: "BTS MCO",
        codeApprenant: "Apprenant1",
        prenomApprenant: "Prénom apprenant"
        nomApprenant: "Nom apprenant",
        emailApprenant: "[email protected]",
        codePersonnel: "Personnel1",
        prenomPersonnel: "Prénom personnel"
        nomPersonnel: "Nom personnel",
        emailPersonnel: "[email protected]",
        codeMaitreApprentissage: "MaitreApprentissage1",
        prenomMaitreApprentissage: "Prénom MaitreApprentissage"
        nomMaitreApprentissage: "Nom MaitreApprentissage",
        emailMaitreApprentissage: "[email protected]",
    }
]

Response

Retourne les contrats selon la même structure de données que celle envoyée dans le POST au dessus.

{
  "total": 1,
  "contrats": []
}

Récupérer tous les contrats intégrés

GET {{base_url}}/api/sync/v1/contrats

Query Parameters

Name
Type
Description

limit

number

Nombre de contrats maximum à récupérer (optionnel)

page

number

Numéro de la page à récupérer (optionnel)

Response

Retourne les contrats selon la même structure de donnees que celle envoyee dans le POST au dessus.

{
  "total": 1,
  "contrats": []
}

Récupérer tous les contrats transmis

GET {{base_url}}/api/sync/v1/contrats-get-all

Query Parameters

Name
Type
Description

limit

number

Nombre de contrats maximum à récupérer (optionnel)

page

number

Numéro de la page à récupérer (optionnel)

Response

Retourne la même réponse que pour les contrats transmis au dessus.

{
  "total": 1,
  "contrats": []
}

Simuler une synchronisation

POST {{base_url}}/api/sync/v1/contrats-diff

Cette route est une sorte de dry run sur l'intégration.

Response

Retourne un objet avec 4 tableaux de contrats.

{
    "same": [], // contrats similaires à la précédente synchro
    "added": [], // nouveaux
    "updated": [], // changements détectés
    "removed": [] // contrats qui seront archivés
}

Supprimer tous les contrats

DELETE {{base_url}}/api/sync/v1/contrats

Attention cette route est a utiliser uniquement dans le bac à sable

{
  // Response
}

Synchroniser un calendrier de groupe au format ICS

POST {{URL}}/api/sync/v1/calendar-group-ics

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Body

Name
Type
Description

groupId

string

code du groupe transmis précédemment

calendarUrl

string

lien calendrier ics

Response

Synchroniser les absences d'un apprenant

POST {{URL}}/api/sync/v1/absences-for-student

Utilisez cet endpoint pour envoyer les absences d'un apprenant, qui seront affichées dans l'onget Absences / Retard sur Campus Skills.

Il est important d'envoyer l'intégralité des absences que vous souhaitez rendre visible dans l'onglet. Concrètement, si vous envoyez d'abord une première absence, puis plus tard une deuxième, il faudra lors du deuxième appel envoyer les deux absences. Si vous n'envoyez que la deuxième, la première n'apparaitra plus.

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Body (format JSON)

La syntaxe "$" indique un sous champ de l'objet (cf exemple plus bas)

Name
Type
Description

email

string*

email de l'apprenant

data

array*

Liste d'absence

data.$.dateDebut

string*

Date de début au format DD/MM/YYYY-HH:mm

data.$.dateFin

string*

Date de fin - Date de début au format DD/MM/YYYY-HH:mm

data.$.type

string*

type ( absenceou retard)

data.$.isJusitifie

boolean*

data.$.motif

string

Exemple

{
   "email": "[email protected]",
   "data": [
        {
            "dateDebut": "08/09/2025-9:00",
            "dateFin": "08/09/2025-17:00",
            "type": "absence",
            "isJusitifie": true,
            "motif": "maladie"
         },
         {
            "dateDebut": "10/09/2025-14:00",
            "dateFin": "10/09/2025-15:00",
            "type": "absence",
            "isJusitifie": false,
            "motif": ""
         }
    ]
]

Response

Last updated

Was this helpful?