BETA - Création et envoi d'un contrat d'apprentissage à un OPCO

Avant-propos

Un organisme de formation CFA peut connecter Wedof à aux différents OPCOs, permettant notamment la remontée des contrats OPCOs déjà signés et la création des dossiers de formation associés (cf. https://doc.wedof.fr/article/21-connexion-opco-cfa)

Néanmoins, il y a le cas de figure inverse, où un besoin de formation est identifié et mène à un financement OPCO : cette fois ci c'est la création d'un dossier de formation et d'un contrat d'apprentissage dans Wedof qui mène à son envoi à l'OPCO.

Aujourd'hui, cette fonctionnalité est limitée à l'API, la documentation suivante est donc assez technique et détaille pas-à-pas les différentes étapes correspondantes. Néanmoins, les dossiers et contrats correspondants apparaîtront bien dans l'interface utilisateur de Wedof. La création de dossier de formation peut mener à la création de dossiers de certification chez les certificateurs correspondants.

La fonctionnalité est disponible pour tous les OPCOs sauf Santé qui ne l'a pas encore mise en production.

Prérequis

  • L'OF doit avoir compte Wedof avec un abonnement payant permettant la manipulation des contrats d'apprentissage et le cas échéant l'option associée,
  • L'OF doit disposer d'un numéro UAI et l'avoir renseigné dans Wedof (paramètres de l'organisme),
  • L'OF doit être partenaire de la certification visée (ou certification du Ministère), certification qui doit être RNCP et active,
  • L'OF doit avoir renseigné les clés d'API OPCO CFA valides sur son compte Wedof pour les OPCOs visés (https://doc.wedof.fr/article/21-connexion-opco-cfa)

Procédure générale

Le fonctionnement repose sur le fait de décrire un besoin de formation et de financement par un OPCO dans Wedof via un dossier de formation et un contrat d'apprentissage, puis le moment venu d'envoyer les données du Cerfa via un endpoint dédié.

Le besoin de formation pour un apprenant sur une certification donnée est représenté par un dossier de formation. Il peut y avoir plusieurs contrats d'apprentissage associés.

Pour cela il y a quatre étapes principales :

  1. Création formation (facultatif) : Créer l'entrée de catalogue de formation : Formation > Action de Formation > Session, peut être réutilisée entre différents dossiers sur la même certification.
  2. Création dossier de formation et apprenant : Représenter le besoin de formation par un dossier de formation Wedof à partir d'un apprenant et d'une session de formation.
  3. Création contrat d'apprentissage brouillon : Créer un ou plusieurs contrats d'apprentissage (possiblement sur plusieurs OPCOs différents) à l'état brouillon (" draft") pour représenter le besoin de financement (à partir du dossier de formation créé).
  4. Envoi contrat d'apprentissage : Envoyer un contrat d'apprentissage à l'OPCO pour soliciter le financement, en y joignant les données du Cerfa.

1.i. Récupérer la certification visée

Rechercher la certification par son code RNCP afin de récupérer son certifInfo   , nécessaire pour créer la formation. Si vous le connaissez déjà, cette étape peut être ignorée.

Endpoint

GET /api/certifications/certifInfos/RNCP12345?enabled=true   

https://www.wedof.fr/api/doc/operations/get_app_api_certification_list

Paramètres

  • enabled    : permet de limiter aux certifications actives, dans le rare cas où plusieurs certifications auraient le même code RNCP cela permet de limiter les retour

Réponse

Attention le résultat est un tableau de certifInfo   , dans les très rares cas où il y en aurait plusieurs, il faut se déterminer lequel est le bon.

1.ii. Créer la formation

Créer une formation liée à la certification souhaitée. Si elle existe déjà, cette étape peut être ignorée.

Prérequis

  • L'OF doit être partenaire actif de cette certification (ou la certification doit être portée par un ministère).
  • La certification doit être RNCP et active.

Endpoint

POST /api/trainings   

https://www.wedof.fr/api/doc/operations/post_app_api_training_create

Payload

{
  "title": "CAP Boulanger - Apprentissage",
  "certifInfo": "90375"
}

Champs obligatoires :

  • title    peut être le nom de la certification pour faire plus simple
  • certifInfo   

Réponse

Conserver l'id    de la formation retourné dans la réponse pour l'envoyer lors de la création de l'action de formation.

1.iii. Créer l'action de formation

Créer une action de formation rattachée à la formation. Si elle existe déjà, cette étape peut être ignorée.

Endpoint

POST /api/trainingActions   

https://www.wedof.fr/api/doc/operations/post_app_api_trainingaction_create

Payload

{
  "trainingId": 123,
  "teachingMethod": "0",
  "indicativeDuration": 1200,
  "totalTvaTTC": 8500.00
}

Champs obligatoires :

  • trainingId   
  • teachingMethod   
  • indicativeDuration   
  • totalTvaTTC   

Énumérations :

  • teachingMethod    : "0"    = présentiel, "1"    = à distance, "2"    = mixte

Réponse

Conserver l'id    de l'action de formation retourné dans la réponse pour l'envoyer lors de la création de la session.

1.iv. Créer la session

Créer une session rattachée à l'action de formation. Si elle existe déjà, cette étape peut être ignorée.

Endpoint

POST /api/sessions   

https://www.wedof.fr/api/doc/operations/post_app_api_session_create

Payload

{
  "trainingActionId": 456
}

Champs obligatoires :

  • trainingActionId   

Réponse

Conserver l'id    de la session retourné dans la réponse pour l'envoyer lors de la création du dossier de formation.

> Si les dates ne sont pas communiquées, elle pourront l'être sur le dossier de formation directement

2.i. Créer l'apprenant

Créer l'apprenant (candidat/stagiaire) avec son NIR (numéro de sécurité sociale).

Si l'apprenant existe déjà, il y a une méthode pour le récupérer : https://www.wedof.fr/api/doc/operations/get_byEmail

Endpoint

POST /api/attendees       

https://www.wedof.fr/api/doc/operations/post_app_api_attendee_create

Payload

{
  "lastName": "Dupont",
  "firstName": "Jean",
  "email": "jean.dupont@example.com",
  "phoneNumber": "0612345678",
  "gender": "male"
}

Champs obligatoires :

  • lastName   
  • firstName   
  • email   
  • phoneNumber   (ou phoneFixed   )
  • gender   

Énumérations :

  • gender   : male    ou female   

Réponse

Conserver l'id    de l'apprenant retourné dans la réponse pour l'envoyer lors de la création du dossier de formation.

2.ii Créer le dossier de formation

Créer le dossier de formation en précisant le type opcoCfa   .

Endpoint

POST /api/registrationFolders   

https://www.wedof.fr/api/doc/operations/post_app_api_registrationfolder_create

Payload

{
  "sessionId": 789,
  "attendeeId": 101,
  "totalTTC": 8500.00,
  "type": "opcoCfa"
}

Champs obligatoires :

  • sessionId   
  • attendeeId   
  • totalTTC   
  • type   

Énumérations :

  • Le type    doit impérativement être "opcoCfa"    pour pouvoir créer un contrat d'apprentissage par la suite
  • La voie d'accès (accessModality   ) est automatiquement définie à "apprentissage"   

Réponse

Conserver l'externalId    du dossier de formation retourné dans la réponse pour l'envoyer lors de la création du contrat d'apprentissage.

3. Créer le contrat d'apprentissage

Créer le contrat d'apprentissage sur le dossier de formation. Le contrat est créé à l'état draft    (brouillon).

Endpoint

POST /api/workingContracts   

https://www.wedof.fr/api/doc/operations/post_app_api_workingcontract_create

Payload

{
  "registrationFolderExternalId": "O69aae11ed42e6",
  "type": "11",
  "startDate": "2026-09-01T00:00:00.000Z",
  "endDate": "2027-06-30T00:00:00.000Z",
  "financer": "opcoCfaAtlas"
}

Champs obligatoires :

  • registrationFolderExternalId   
  • type   
  • startDate   
  • endDate   
  • financer   

Énumérations :

  • type    : type de contrat (valeurs possibles : 11   , 21   , 22   , 23   , 31    , 32   , 33   , 34   , 35   , 36   , 37   , 38   )
  • financer    : OPCO financeur (valeurs possibles : opcoCfaAtlas   , opcoCfaAfdas   , opcoCfaEp   , opcoCfaMobilites   , opcoCfaAkto   , opcoCfaOcapiat   , opcoCfaUniformation   , opcoCfa2i   , opcoCfaConstructys   , opcoCfaSante   , opcoCfaOpcommerce   )

Réponse

Conserver l'id    du contrat d'apprentissage retourné dans la réponse pour le soumettre.

4.i. Soumettre le contrat d'apprentissage

Une fois le contrat créé à l'état brouillon, le soumettre avec les données du Cerfa.

Wedof procède à deux étapes de validation pour identifier les erreurs avant l'envoi à l'Opco :

  • format des données transmises d'après l'API des Opcos (avec parfois des règles spécifiques dû à la non conformité des APIs)
  • cohérence avec les données saisies dans Wedof (organisme de formation, certification, identité de l'apprenant, dates du contrat)

Endpoint

POST /api/workingContracts/{id}/submit   

https://www.wedof.fr/api/doc/operations/post_app_api_workingcontract_submit

Pour tester les étapes de validation sans réellement envoyer le dossier à l'OPCO, vous pouvez utiliser le paramètre "simulate" :

POST /api/workingContracts/{id}/submit?simulate=true   

Payload

{
  "draftRawData": {
    "cerfa": {
      "employeur": "...",
      "apprenti": "...",
      "...": "..."
    }
  }
}

Champs obligatoires :

Réponse

Si le dossier est bien transmis à l'OPCO, alors la requête aboutit et le WorkingContract passé à l'état sent    est retourné, ainsi qu'un identifiant côté OPCO (externalIdTrainingOrganism   ).

S'il y a des erreurs de validation renvoyées par l'OPCO, elles vous seront retournées.

4.ii. Soumettre la convention de formation

COMING SOON

Webhooks

Des Webhooks sont disponibles "écouter" les événements sur les contrats d'apprentissage, notamment lorsqu'ils sont engagés par l'OPCO.

Néanmoins, les OPCOs ne mettent l'information à jour qu'une fois par jour, il peut donc y avoir un délai.

Événements CRUD :

  • workingContract.created    : Création d'un contrat
  • workingContract.updated    : Modification d'un contrat
  • workingContract.deleted    : Suppression d'un contrat

Événements de changement d'état :

  • workingContract.sent    : Transmis
  • workingContract.pendingAcceptation    : En cours d'instruction
  • workingContract.accepted    : Engagé
  • workingContract.cancelled    : Annulé
  • workingContract.refused    : Refusé
  • workingContract.broken     : Rupture
  • workingContract.completed    : Soldé

▎L'état draft ne déclenche pas de webhook (état initial interne).

Le payload contient la sérialisation complète du contrat

Cet article vous a-t-il aidé ? Merci pour votre retour Il y a eu un problème dans l'envoi de votre évaluation