{"openapi":"3.1.0","info":{"title":"API partenaire (bac à sable)","description":"> **Environnement bac à sable.** Les données sont fictives et **réinitialisées\n> chaque semaine**. Aucun email n'est envoyé, aucune signature ni aucun appel\n> vers les organismes financeurs n'est déclenché. Les clés de ce bac à sable ne\n> fonctionnent pas en production, et réciproquement. Basculez de serveur avec le\n> sélecteur de la référence.\n\nAPI partenaire du Groupe ELRM : catalogue de formations, dossiers, devis et\ninscriptions, pilotés depuis votre système d'information.\n\nGuides d'intégration et exemples : **https://developer.elrm.app**.\n\n## Environnements\n\n| | URL de base | Clés |\n|---|---|---|\n| Bac à sable | `https://developer.elrm.app/sandbox/v1` | `pk_test_…` |\n| Production | `https://prod.elrm.app/api/v1/partner` | `pk_live_…` |\n\nLes chemins sont identiques ; seule l'URL de base et la clé changent. Une clé\nde test n'ouvre jamais la production, et réciproquement.\n\n## Authentification\n\nToutes les routes exigent un jeton porteur :\n\n```\nAuthorization: Bearer pk_live_<identifiant>.<secret>\n```\n\nLe secret n'est affiché qu'une seule fois, à la création de la clé. Il ne peut\npas être récupéré ensuite, en cas de perte, une nouvelle clé doit être émise.\n\n## Portées (scopes)\n\nChaque clé porte des portées explicites. Une route appelée sans la portée\ncorrespondante répond `403`, même si le jeton est valide.\n\n## Erreurs\n\nLes réponses d'erreur d'authentification sont volontairement opaques : elles ne\npermettent pas de distinguer une clé inconnue d'une clé révoquée. Chaque réponse\nporte un en-tête `X-Trace-Id` à communiquer au support en cas de problème.\n\n## Quotas\n\nChaque clé dispose d'un quota de requêtes par minute. Au-delà, les appels\nrépondent `429`. Les en-têtes `X-RateLimit-Limit`, `X-RateLimit-Remaining` et\n`X-RateLimit-Reset` indiquent où vous en êtes.\n\n## Idempotence des écritures\n\nLes écritures qui l'annoncent dans la référence (création d'une analyse ou\nd'un dossier, liste des apprenants) acceptent un en-tête `Idempotency-Key` (chaîne\nunique par intention, un UUID par exemple, 120 caractères maximum). Si la\nrequête est rejouée avec la même clé et le même corps, après un timeout, une\ncoupure, la réponse d'origine est renvoyée telle quelle (statut inclus, avec\nl'en-tête `Idempotent-Replayed: true`) sans ré-exécuter l'opération.\n\nLa même clé avec un corps différent répond `409 idempotency_key_reuse`. Les\nclés sont conservées 24 heures et sont propres à votre clé d'API.\n\nL'en-tête est facultatif mais vivement recommandé pour toute création.\n\n## Concurrence : ETag et If-Match\n\nLes ressources modifiables renvoient un en-tête `ETag` à la lecture. Leur mise\nà jour exige `If-Match` avec cette valeur : si la ressource a changé entre\nvotre lecture et votre écriture (par exemple une retouche faite dans le CRM),\nla réponse est `412 precondition_failed` et il faut relire avant de réessayer.\nSans `If-Match`, la réponse est `428 precondition_required`.\n\n## Cycle de vie d'un dossier\n\nUn dossier de formation expose un champ `stage` (étape courante, énumération\nstable dont de nouvelles valeurs peuvent apparaître : ignorez celles que vous\nne connaissez pas) et une liste `allowed_actions` : les actions que votre clé\npeut déclencher à cette étape. Une action hors étape répond\n`409 invalid_state` avec l'étape courante et les actions possibles.\n","version":"1","x-build":"0.0.492"},"servers":[{"url":"https://developer.elrm.app/sandbox/v1","description":"Bac à sable (données fictives, réinitialisées chaque semaine)"},{"url":"https://prod.elrm.app/api/v1/partner","description":"Production"}],"paths":{"/formations/sessions":{"get":{"tags":["Catalogue"],"summary":"Liste les sessions de formation à venir","description":"Retourne les sessions à venir (date_debut >= aujourd'hui) avec leur\n`available_slots`. Les sessions annulées et privées sont masquées.\n\n`total` porte sur l'ensemble filtré, toutes pages confondues.","operationId":"listSessions","security":[{"Bearer":["formations:sessions:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"recommendation","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"Ne garder que les sessions d'une famille de formation. Valeur attendue : le `code` renvoyé par `/formations/recommendations` (ex. `R482`). Insensible à la casse.","examples":["R482"],"title":"Recommendation"},"description":"Ne garder que les sessions d'une famille de formation. Valeur attendue : le `code` renvoyé par `/formations/recommendations` (ex. `R482`). Insensible à la casse."},{"name":"available_only","in":"query","required":false,"schema":{"type":"boolean","description":"Ne garder que les sessions où il reste au moins une place (`available_slots > 0`). Les sessions dont la capacité n'est pas renseignée sont exclues.","default":false,"title":"Available Only"},"description":"Ne garder que les sessions où il reste au moins une place (`available_slots > 0`). Les sessions dont la capacité n'est pas renseignée sont exclues."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"x-scope":"formations:sessions:read"}},"/formations/sessions/{numero}":{"get":{"tags":["Catalogue"],"summary":"Détail d'une session par son numéro métier","description":"Renvoie une session unique. 404 si la session n'existe pas, est\nannulée, ou est déjà passée — on ne distingue pas les cas pour ne\npas confirmer indirectement l'existence d'une session passée.","operationId":"getSession","security":[{"Bearer":["formations:sessions:read"]}],"parameters":[{"name":"numero","in":"path","required":true,"schema":{"type":"string","title":"Numero"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionItem"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Session inexistante, annulée, passée ou privée — les cas ne sont pas distingués, pour ne pas confirmer indirectement l'existence d'une session non publiable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"formations:sessions:read"}},"/formations/recommendations":{"get":{"tags":["Catalogue"],"summary":"Liste le référentiel des formations (nomenclature des filtres)","description":"Retourne le catalogue des formations proposées.\n\nLe champ `code` de chaque entrée est la valeur à passer au filtre\n`recommendation` de `/formations/sessions` — c'est la nomenclature de\nréférence pour construire un catalogue filtrable.\n\nLes formations retirées du catalogue ne sont pas listées.","operationId":"listRecommendations","security":[{"Bearer":["formations:recommendations:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"caces_only","in":"query","required":false,"schema":{"type":"boolean","description":"Ne garder que les recommandations CNAM (R48x), en excluant les formations hors nomenclature (AIPR, SST…).","default":false,"title":"Caces Only"},"description":"Ne garder que les recommandations CNAM (R48x), en excluant les formations hors nomenclature (AIPR, SST…)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"x-scope":"formations:recommendations:read"}},"/centres":{"get":{"tags":["Catalogue"],"summary":"Liste les centres de formation","description":"Les centres ELRM. `id` est la valeur attendue par `centre_id` à la\ncréation d'un dossier (centre souhaité) ; `centre_label` des sessions\nreprend `nom`.","operationId":"listCentres","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CentreListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"security":[{"Bearer":["formations:sessions:read"]}],"x-scope":"formations:sessions:read"}},"/me":{"get":{"tags":["Suivi client"],"summary":"Le client rattaché à cette clé","description":"Votre fiche client telle qu'ELRM la connaît (nom, SIRET).\n\nUne clé est rattachée à un seul client : toutes les routes nominatives\n(dossiers, apprenants, documents, analyses) portent implicitement sur lui.\nUtile pour vérifier, au démarrage, que la clé configurée est la bonne.","operationId":"getMe","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientItem"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"security":[{"Bearer":["clients:dossiers:read"]}],"x-scope":"clients:dossiers:read"}},"/dossiers":{"get":{"tags":["Suivi client"],"summary":"Liste les dossiers de formation d'un client","description":"Dossiers du client, du plus récent au plus ancien.\n\nLes brouillons ne sont jamais exposés.","operationId":"listDossiers","security":[{"Bearer":["clients:dossiers:read"]}],"parameters":[{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"Ne garder que les dossiers à cette étape (ex. `inscriptions_ouvertes` : ceux où vous avez quelque chose à faire).","examples":["inscriptions_ouvertes"],"title":"Stage"},"description":"Ne garder que les dossiers à cette étape (ex. `inscriptions_ouvertes` : ceux où vous avez quelque chose à faire)."},{"name":"updated_since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Ne garder que les dossiers modifiés depuis cet instant (ISO 8601).","title":"Updated Since"},"description":"Ne garder que les dossiers modifiés depuis cet instant (ISO 8601)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Ressource inexistante ou hors du périmètre de la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:dossiers:read"},"post":{"tags":["Dossiers"],"summary":"Crée un dossier (devis) à partir d'une analyse du besoin","description":"Créer le dossier vaut commande : il est **accepté d'emblée**\n(`stage` = `inscriptions_ouvertes`, actions `set_apprenants` et\n`validate_inscriptions`), aux prix du catalogue moins votre remise,\ncalculés côté organisme. Il porte le PDF de l'analyse du besoin. Étape\nsuivante : `PUT …/inscriptions/apprenants`.\n\nAccepte `Idempotency-Key`.","operationId":"createDossier","security":[{"Bearer":["clients:dossiers:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}},"Idempotent-Replayed":{"description":"`true` si la réponse est le rejeu d'une requête portant la même `Idempotency-Key`.","schema":{"type":"boolean"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"Corps invalide — notamment un champ non autorisé (un prix, par exemple).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client inconnu ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"409":{"description":"Analyse déjà rattachée à un dossier, ou Idempotency-Key réutilisée.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"400":{"description":"Offre ou centre inconnu, dates incohérentes, trop de lignes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:dossiers:write","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Clé unique par intention (UUID conseillé, 120 caractères max) : un rejeu avec le même corps renvoie la réponse d'origine.","schema":{"type":"string","maxLength":120}}]}},"/dossiers/{dossier_id}":{"get":{"tags":["Suivi client"],"summary":"Détail d'un dossier","operationId":"getDossier","security":[{"Bearer":["clients:dossiers:read"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierItem"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Ressource inexistante ou hors du périmètre de la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:dossiers:read"}},"/apprenants":{"get":{"tags":["Suivi client"],"summary":"Liste les apprenants inscrits sur les dossiers d'un client","description":"Apprenants rattachés aux dossiers du client, avec leur session.\n\nUne entrée par couple apprenant × dossier : une même personne inscrite sur\ndeux dossiers apparaît deux fois, avec le dossier correspondant.\n\nIdentité minimale uniquement — ni numéro de sécurité sociale, ni situation\nde handicap, bien que ces champs existent en base.","operationId":"listApprenants","security":[{"Bearer":["clients:apprenants:read"]}],"parameters":[{"name":"dossier_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Restreindre à un seul dossier.","title":"Dossier Id"},"description":"Restreindre à un seul dossier."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprenantListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Ressource inexistante ou hors du périmètre de la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:apprenants:read"}},"/dossiers/{dossier_id}/documents":{"get":{"tags":["Suivi client"],"summary":"Liste les documents téléchargeables d'un dossier","description":"Les documents du dossier qu'ELRM a rendus disponibles pour l'API.\n\nLe choix se fait pièce par pièce, dans le CRM : le type (convocation,\nattestation, convention…) ne préjuge de rien. La liste est vide tant\nqu'aucun document n'a été partagé.","operationId":"listDossierDocuments","security":[{"Bearer":["clients:documents:read"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Ressource inexistante ou hors du périmètre de la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:documents:read"}},"/dossiers/{dossier_id}/documents/{document_id}":{"get":{"tags":["Suivi client"],"summary":"Télécharge un document","description":"Le contenu transite par l'API : aucune URL de stockage n'est exposée.","operationId":"downloadDossierDocument","security":[{"Bearer":["clients:documents:read"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Ressource inexistante ou hors du périmètre de la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:documents:read"}},"/formations/mcf-references":{"get":{"tags":["Catalogue"],"summary":"Liste les liens Mon Compte Formation référencés (catalogue CPF)","description":"Retourne les formations publiées sur Mon Compte Formation (couples\nformation × département) avec titre, description, département, durée, prix\nTTC et le lien MCF direct. Alimenté par le dernier snapshot MCF de la\nsociété ; liste vide si aucune synchronisation n'a encore eu lieu.","operationId":"listMcfReferences","security":[{"Bearer":["formations:mcf:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McfReferenceListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"x-scope":"formations:mcf:read"}},"/formations":{"get":{"tags":["Dossiers"],"summary":"Catalogue des formations et offres, aux prix de ce client","description":"Les formations du catalogue et leurs offres (durée, unités de test,\nprix HT), avec le prix **après remise** accordé à ce client, et la fiche\npédagogique (public visé, prérequis, objectifs, programme…).\n\nScope : `clients.dossiers.read` ou `formations.recommendations.read`.\n\nC'est la seule source de prix : les lignes d'un dossier référencent ces\noffres par `id`, jamais un montant.","operationId":"listClientFormations","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormationListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client inconnu ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"security":[{"Bearer":["clients:dossiers:read"]}],"x-scope":"clients:dossiers:read"}},"/analyses-besoin":{"get":{"tags":["Dossiers"],"summary":"Liste vos analyses du besoin pour ce client","operationId":"listAnalysesBesoin","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyseBesoinListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client inconnu ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"security":[{"Bearer":["clients:analyses:read"]}],"x-scope":"clients:analyses:read"},"post":{"tags":["Dossiers"],"summary":"Crée une analyse du besoin","description":"Première étape d'un dossier (preuve Qualiopi d'adéquation entre le\nbesoin et la formation). L'entreprise est reprise de votre fiche client.\n\nAccepte `Idempotency-Key`.","operationId":"createAnalyseBesoin","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyseBesoinCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyseBesoinResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}},"Idempotent-Replayed":{"description":"`true` si la réponse est le rejeu d'une requête portant la même `Idempotency-Key`.","schema":{"type":"boolean"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client inconnu ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"409":{"description":"Idempotency-Key réutilisée avec un autre corps.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"security":[{"Bearer":["clients:analyses:write"]}],"x-scope":"clients:analyses:write","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Clé unique par intention (UUID conseillé, 120 caractères max) : un rejeu avec le même corps renvoie la réponse d'origine.","schema":{"type":"string","maxLength":120}}]}},"/analyses-besoin/{analyse_id}":{"get":{"tags":["Dossiers"],"summary":"Détail d'une analyse du besoin","operationId":"getAnalyseBesoin","security":[{"Bearer":["clients:analyses:read"]}],"parameters":[{"name":"analyse_id","in":"path","required":true,"schema":{"type":"string","title":"Analyse Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyseBesoinResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client inconnu ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:analyses:read"}},"/dossiers/{dossier_id}/suivi":{"get":{"tags":["Dossiers"],"summary":"Étape, actions possibles et montants d'un dossier","description":"Vue « pilotage » d'un dossier : `stage`, `allowed_actions`, lignes et\nmontants. Renvoie un `ETag` à présenter en `If-Match` sur les écritures.","operationId":"getDossierSuivi","security":[{"Bearer":["clients:dossiers:read"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client inconnu ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:dossiers:read"}},"/dossiers/{dossier_id}/evenements":{"get":{"tags":["Dossiers"],"summary":"Journal des événements d'un dossier (suivi par polling)","description":"Ce qui s'est passé sur le dossier, dans l'ordre chronologique — y compris\nce que fait l'organisme après votre validation (documents envoyés et\nsignés, changements d'étape). Conservez `next_since` et repassez-le : vous\nne relisez que le nouveau.","operationId":"listDossierEvents","security":[{"Bearer":["clients:dossiers:read"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Ne renvoyer que les événements strictement postérieurs à cet instant (ISO 8601).","title":"Since"},"description":"Ne renvoyer que les événements strictement postérieurs à cet instant (ISO 8601)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client inconnu ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:dossiers:read"}},"/dossiers/{dossier_id}/inscriptions":{"get":{"tags":["Inscriptions"],"summary":"Apprenants, lignes et sessions candidates d'un dossier","description":"L'état des inscriptions : `step`, apprenants (avec leurs lignes et, à\nl'étape 2, leur session), lignes du devis avec les places commandées, et\nsessions candidates avec places restantes. Renvoie un `ETag` à présenter\nen `If-Match` sur `PUT …/apprenants`.","operationId":"getInscriptions","security":[{"Bearer":["clients:dossiers:read"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InscriptionsStateResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}},"ETag":{"description":"Version de la ressource, à renvoyer dans `If-Match` pour écrire.","schema":{"type":"string"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client ou dossier inconnu, ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:dossiers:read"}},"/dossiers/{dossier_id}/inscriptions/apprenants":{"put":{"tags":["Inscriptions"],"summary":"Remplace la liste des apprenants (étape 1)","description":"Un apprenant avec `id` est mis à jour, sans `id` il est créé.\n`ligne_ids` attribue les lignes du devis : seules les personnes ayant au\nmoins une ligne seront inscrites.\n\nLe dossier est pré-rempli avec le **carnet du client** (`carnet: true`,\npersonnes connues par un dossier précédent) : n'attribuez de lignes qu'à\ncelles qui participent. Une personne omise de la liste est détachée si\nelle vient du carnet, retirée du dossier sinon.\n\nExige `If-Match` ; accepte `Idempotency-Key`.","operationId":"replaceApprenants","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Clé unique par intention (UUID conseillé, 120 caractères max) : un rejeu avec le même corps renvoie la réponse d'origine.","schema":{"type":"string","maxLength":120}},{"name":"If-Match","in":"header","required":true,"description":"`ETag` lu sur la ressource ; `412` si elle a changé entre-temps, `428` si absent.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprenantsReplaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InscriptionsStateResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}},"Idempotent-Replayed":{"description":"`true` si la réponse est le rejeu d'une requête portant la même `Idempotency-Key`.","schema":{"type":"boolean"}},"ETag":{"description":"Version de la ressource, à renvoyer dans `If-Match` pour écrire.","schema":{"type":"string"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client ou dossier inconnu, ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"409":{"description":"Hors étape (`invalid_state`) : voir `stage` et `allowed_actions`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"412":{"description":"Le dossier a changé depuis votre lecture (If-Match).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"428":{"description":"If-Match manquant.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:apprenants:write"}},"/dossiers/{dossier_id}/inscriptions/etape-1/valider":{"post":{"tags":["Inscriptions"],"summary":"Valide la liste des apprenants → étape 2 (répartition)","operationId":"validateStep1","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InscriptionsStateResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client ou dossier inconnu, ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"409":{"description":"Hors étape (`invalid_state`) : voir `stage` et `allowed_actions`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:apprenants:write"}},"/dossiers/{dossier_id}/inscriptions/etape-1/rouvrir":{"post":{"tags":["Inscriptions"],"summary":"Revient à l'étape 1 (avant validation finale)","operationId":"reopenStep1","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InscriptionsStateResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client ou dossier inconnu, ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"409":{"description":"Hors étape (`invalid_state`) : voir `stage` et `allowed_actions`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:apprenants:write"}},"/dossiers/{dossier_id}/inscriptions/apprenants/{apprenant_id}/session":{"put":{"tags":["Inscriptions"],"summary":"Place un apprenant dans une session pour une ligne (étape 2)","description":"La session doit figurer dans `sessions_candidates` (même formation,\nplaces restantes, non terminée). Replacer un apprenant remplace le choix\nprécédent pour cette ligne.","operationId":"assignSession","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}},{"name":"apprenant_id","in":"path","required":true,"schema":{"type":"string","title":"Apprenant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InscriptionsStateResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client ou dossier inconnu, ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"409":{"description":"Hors étape (`invalid_state`) : voir `stage` et `allowed_actions`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:apprenants:write"}},"/dossiers/{dossier_id}/inscriptions/apprenants/{apprenant_id}/session/{ligne_id}":{"delete":{"tags":["Inscriptions"],"summary":"Retire un apprenant de sa session pour une ligne (étape 2)","operationId":"unassignSession","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}},{"name":"apprenant_id","in":"path","required":true,"schema":{"type":"string","title":"Apprenant Id"}},{"name":"ligne_id","in":"path","required":true,"schema":{"type":"string","title":"Ligne Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InscriptionsStateResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client ou dossier inconnu, ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"409":{"description":"Hors étape (`invalid_state`) : voir `stage` et `allowed_actions`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:apprenants:write"}},"/dossiers/{dossier_id}/inscriptions/valider":{"post":{"tags":["Inscriptions"],"summary":"Validation finale : crée les inscriptions et verrouille","description":"Chaque apprenant doit être placé pour chacune de ses lignes. Après\nvalidation, les apprenants et leurs inscriptions existent côté organisme,\nle dossier est verrouillé : l'organisme prend le relais (convention,\nconvocations, session, facture).","operationId":"validateFinal","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"dossier_id","in":"path","required":true,"schema":{"type":"string","title":"Dossier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InscriptionsStateResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"401":{"description":"`unauthorized` : jeton absent, malformé, inconnu, révoqué ou expiré, partenaire suspendu, ou adresse IP non autorisée. Sans distinction.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"403":{"description":"`forbidden` : portée (scope) manquante, ou aucun client rattaché à la clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"422":{"description":"`validation_error` : corps ou paramètres invalides ; `details.issues` liste chaque champ.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"429":{"description":"`rate_limited` : quota de requêtes par minute dépassé (voir `Retry-After`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"404":{"description":"Client ou dossier inconnu, ou hors de la portée de votre clé.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}},"409":{"description":"Hors étape (`invalid_state`) : voir `stage` et `allowed_actions`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-scope":"clients:apprenants:write"}},"/espace/formations/dossiers":{"get":{"tags":["Espace client"],"summary":"Dossiers","operationId":"espaceDossiers","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DossierResume"},"type":"array","title":"Response Espacedossiers"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"security":[{"Bearer":["clients:dossiers:read","clients:documents:read"]}],"x-droits":["portail.formations.dossiers.read"]}},"/espace/formations/dossiers/{devis_id}":{"get":{"tags":["Espace client"],"summary":"Dossier","operationId":"espaceDossier","security":[{"Bearer":["clients:dossiers:read","clients:documents:read"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierDetail"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.dossiers.read"]}},"/espace/formations/dossiers/{devis_id}/documents/{document_id}":{"get":{"tags":["Espace client"],"summary":"Document","operationId":"espaceDocument","security":[{"Bearer":["clients:dossiers:read","clients:documents:read"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.dossiers.read"]}},"/espace/formations/apprenants":{"get":{"tags":["Espace client"],"summary":"Apprenants","operationId":"espaceApprenants","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApprenantResume"},"type":"array","title":"Response Espaceapprenants"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"security":[{"Bearer":["clients:apprenants:read","clients:dossiers:read","clients:documents:read"]}],"x-droits":["portail.formations.apprenants.read","portail.formations.dossiers.read"]}},"/espace/formations/apprenants/{cle}":{"get":{"tags":["Espace client"],"summary":"Apprenant","operationId":"espaceApprenant","security":[{"Bearer":["clients:apprenants:read"]}],"parameters":[{"name":"cle","in":"path","required":true,"schema":{"type":"string","title":"Cle"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprenantDetail"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.apprenants.read"]}},"/espace/formations/certifications":{"get":{"tags":["Espace client"],"summary":"Certifications","operationId":"espaceCertifications","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CertificationClient"},"type":"array","title":"Response Espacecertifications"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"security":[{"Bearer":["clients:apprenants:read","clients:dossiers:read","clients:documents:read"]}],"x-droits":["portail.formations.apprenants.read","portail.formations.dossiers.read"]}},"/espace/formations/sessions":{"get":{"tags":["Espace client"],"summary":"Sessions","operationId":"espaceSessions","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SessionListeItem"},"type":"array","title":"Response Espacesessions"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"security":[{"Bearer":["clients:dossiers:read","clients:documents:read"]}],"x-droits":["portail.formations.dossiers.read"]}},"/espace/formations/sessions/{session_id}":{"get":{"tags":["Espace client"],"summary":"Session","operationId":"espaceSession","security":[{"Bearer":["clients:dossiers:read","clients:documents:read"]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionDetail"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.dossiers.read"]}},"/espace/formations/compteurs":{"get":{"tags":["Espace client"],"summary":"Compteurs","description":"Pas d'`exige` : une rubrique fermée au compte renvoie null, pas 403.","operationId":"espaceCompteurs","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Compteurs"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"security":[{"Bearer":[]}]}},"/espace/formations/dossiers/{devis_id}/inscription":{"get":{"tags":["Espace client"],"summary":"Etat Inscription","operationId":"espaceEtatInscription","security":[{"Bearer":["clients:dossiers:read","clients:documents:read"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.dossiers.read"]}},"/espace/formations/dossiers/{devis_id}/inscription/carnet":{"get":{"tags":["Espace client"],"summary":"Carnet","description":"Apprenants déjà saisis sur les autres dossiers du client, absents de\ncelui-ci : un clic les ajoute (le carnet de l'ancien espace client).","operationId":"espaceCarnet","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkApprenantSuggestions"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/recherche":{"get":{"tags":["Espace client"],"summary":"Rechercher Apprenant","description":"Compte apprenant existant pour cet e-mail : le formulaire reprend ses\ninformations (e-mail + date de naissance = identifiants de l'appli).","operationId":"espaceRechercherApprenant","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}},{"name":"email","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":255,"title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkApprenantLookup"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/apprenants":{"post":{"tags":["Espace client"],"summary":"Ajouter Apprenant","operationId":"espaceAjouterApprenant","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkApprenantInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/apprenants/{app_id}":{"put":{"tags":["Espace client"],"summary":"Modifier Apprenant","operationId":"espaceModifierApprenant","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkApprenantInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]},"delete":{"tags":["Espace client"],"summary":"Retirer Apprenant","operationId":"espaceRetirerApprenant","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/apprenants/{app_id}/lignes":{"put":{"tags":["Espace client"],"summary":"Attribuer Formations","operationId":"espaceAttribuerFormations","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LignesInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/apprenants/{app_id}/documents":{"post":{"tags":["Espace client"],"summary":"Ajouter Piece","operationId":"espaceAjouterPiece","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_espaceAjouterPiece"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/apprenants/{app_id}/documents/{doc_id}/fichier":{"post":{"tags":["Espace client"],"summary":"Joindre Fichier","operationId":"espaceJoindreFichier","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_espaceJoindreFichier"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/apprenants/{app_id}/documents/{doc_id}":{"delete":{"tags":["Espace client"],"summary":"Retirer Piece","operationId":"espaceRetirerPiece","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]},"get":{"tags":["Espace client"],"summary":"Telecharger Piece","operationId":"espaceTelechargerPiece","security":[{"Bearer":["clients:dossiers:read","clients:documents:read"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.dossiers.read"]}},"/espace/formations/dossiers/{devis_id}/inscription/etape-apprenants":{"post":{"tags":["Espace client"],"summary":"Valider Apprenants","operationId":"espaceValiderApprenants","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/revenir-aux-apprenants":{"post":{"tags":["Espace client"],"summary":"Revenir Aux Apprenants","operationId":"espaceRevenirAuxApprenants","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/affectations":{"post":{"tags":["Espace client"],"summary":"Affecter","operationId":"espaceAffecter","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AffectationInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/dossiers/{devis_id}/inscription/valider":{"post":{"tags":["Espace client"],"summary":"Valider","description":"Définitif pour le client : ensuite, seul l'organisme modifie les\ninscriptions (le portail n'offre aucun moyen de rouvrir).","operationId":"espaceValider","security":[{"Bearer":["clients:apprenants:write"]}],"parameters":[{"name":"devis_id","in":"path","required":true,"schema":{"type":"string","title":"Devis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientLinkState"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.inscriptions.write"]}},"/espace/formations/factures":{"get":{"tags":["Espace client"],"summary":"Factures","operationId":"espaceFactures","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FactureClient"},"type":"array","title":"Response Espacefactures"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}}},"security":[{"Bearer":["clients:factures:read"]}],"x-droits":["portail.formations.factures.read"]}},"/espace/formations/factures/{facture_id}":{"get":{"tags":["Espace client"],"summary":"Facture","operationId":"espaceFacture","security":[{"Bearer":["clients:factures:read"]}],"parameters":[{"name":"facture_id","in":"path","required":true,"schema":{"type":"string","title":"Facture Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FactureDetail"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.factures.read"]}},"/espace/formations/factures/{facture_id}/pdf":{"get":{"tags":["Espace client"],"summary":"Facture Pdf","operationId":"espaceFacturePdf","security":[{"Bearer":["clients:factures:read"]}],"parameters":[{"name":"facture_id","in":"path","required":true,"schema":{"type":"string","title":"Facture Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Quota de la clé, par minute.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Appels restants dans la fenêtre courante.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Secondes avant libération de la fenêtre.","schema":{"type":"integer"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedErrorResponse"}}},"headers":{"X-Trace-Id":{"description":"Identifiant de la requête, à communiquer au support.","schema":{"type":"string"}}}}},"x-droits":["portail.formations.factures.read"]}}},"components":{"schemas":{"AffectationInput":{"properties":{"apprenant_id":{"type":"string","title":"Apprenant Id"},"ligne_id":{"type":"string","title":"Ligne Id"},"session_id":{"type":"string","title":"Session Id","default":""}},"type":"object","required":["apprenant_id","ligne_id"],"title":"AffectationInput"},"AnalyseBesoinCreateRequest":{"properties":{"offre_ids":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Offre Ids","description":"Offres envisagées (voir `GET /clients/{client_id}/formations`)."},"contact_nom":{"type":"string","maxLength":255,"minLength":1,"title":"Contact Nom","description":"Personne à contacter chez vous."},"contact_email":{"type":"string","format":"email","title":"Contact Email"},"contact_telephone":{"type":"string","maxLength":40,"title":"Contact Telephone","default":""},"nb_personnes":{"anyOf":[{"type":"integer","maximum":500.0,"minimum":1.0},{"type":"null"}],"title":"Nb Personnes","description":"Effectif concerné."},"profil_personnes":{"type":"string","maxLength":4000,"title":"Profil Personnes","description":"Profil des personnes à former (fonctions, expérience).","default":""},"objectifs_pro":{"type":"string","maxLength":4000,"title":"Objectifs Pro","description":"Objectifs professionnels visés.","default":""},"parcours_souhaite":{"type":"string","maxLength":4000,"title":"Parcours Souhaite","description":"Parcours souhaité, en clair.","default":""},"financements":{"items":{"type":"string","enum":["entreprise","opco","cpf","france_travail","prive","autre"]},"type":"array","title":"Financements","description":"Financements envisagés : `entreprise`, `opco`, `cpf`, `france_travail`, `prive`, `autre`."}},"additionalProperties":false,"type":"object","required":["offre_ids","contact_nom","contact_email"],"title":"AnalyseBesoinCreateRequest","description":"Analyse du besoin d'une entreprise (Qualiopi). L'entreprise elle-même\nest reprise de votre fiche client — elle n'est pas dans le corps."},"AnalyseBesoinListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AnalyseBesoinResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"AnalyseBesoinListResponse"},"AnalyseBesoinResponse":{"properties":{"id":{"type":"string","title":"Id"},"client_id":{"type":"string","title":"Client Id"},"dossier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dossier Id","description":"Dossier créé à partir de cette analyse, s'il existe."},"label":{"type":"string","title":"Label"},"formation":{"type":"string","title":"Formation"},"contact_nom":{"type":"string","title":"Contact Nom"},"contact_email":{"type":"string","title":"Contact Email"},"offre_ids":{"items":{"type":"string"},"type":"array","title":"Offre Ids"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","client_id","dossier_id","label","formation","contact_nom","contact_email","offre_ids","created_at","updated_at"],"title":"AnalyseBesoinResponse"},"ApprenantDeSession":{"properties":{"cle":{"type":"string","title":"Cle"},"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"},"dossier_numero":{"type":"string","title":"Dossier Numero","default":""},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"resultat":{"anyOf":[{"$ref":"#/components/schemas/Resultat"},{"type":"null"}]}},"type":"object","required":["cle","nom","prenom"],"title":"ApprenantDeSession"},"ApprenantDetail":{"properties":{"cle":{"type":"string","title":"Cle"},"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"},"email":{"type":"string","title":"Email","default":""},"telephone":{"type":"string","title":"Telephone","default":""},"etat":{"type":"string","title":"Etat"},"formation_courante":{"type":"string","title":"Formation Courante","default":""},"prochaine_session":{"anyOf":[{"$ref":"#/components/schemas/SessionResume"},{"type":"null"}]},"dernier_certificat":{"type":"string","title":"Dernier Certificat","default":""},"certificat_valide_jusqu_au":{"type":"string","title":"Certificat Valide Jusqu Au","default":""},"pieces":{"type":"integer","title":"Pieces","default":0},"date_naissance":{"type":"string","title":"Date Naissance","default":""},"participations":{"items":{"$ref":"#/components/schemas/Participation"},"type":"array","title":"Participations"},"pieces_deposees":{"items":{"$ref":"#/components/schemas/PieceApprenant"},"type":"array","title":"Pieces Deposees"}},"type":"object","required":["cle","nom","prenom","etat"],"title":"ApprenantDetail"},"ApprenantDuDossier":{"properties":{"id":{"type":"string","title":"Id"},"cle":{"type":"string","title":"Cle","default":""},"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"},"email":{"type":"string","title":"Email","default":""},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"session":{"anyOf":[{"$ref":"#/components/schemas/SessionResume"},{"type":"null"}]},"pieces":{"type":"integer","title":"Pieces","default":0},"convocation":{"type":"string","title":"Convocation","default":"a_venir"}},"type":"object","required":["id","nom","prenom"],"title":"ApprenantDuDossier"},"ApprenantItem":{"properties":{"id":{"type":"string","title":"Id"},"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"},"email":{"type":"string","title":"Email"},"telephone":{"type":"string","title":"Telephone"},"date_naissance":{"type":"string","title":"Date Naissance","description":"Date de naissance (ISO, peut être vide)."},"dossier_id":{"type":"string","title":"Dossier Id"},"dossier_numero":{"type":"string","title":"Dossier Numero","examples":["DEV-2026-0857"]},"session_numero":{"type":"string","title":"Session Numero","description":"Session sur laquelle l'apprenant est placé. Vide si aucune session n'a encore été choisie."}},"type":"object","required":["id","nom","prenom","email","telephone","date_naissance","dossier_id","dossier_numero","session_numero"],"title":"ApprenantItem","description":"Un apprenant inscrit sur un dossier du client.\n\nIdentité minimale volontairement : ni numéro de sécurité sociale, ni\nsituation de handicap — ces champs existent en base mais ne sortent jamais\npar l'API.\n\nUne même personne inscrite sur deux dossiers apparaît deux fois, avec le\ndossier correspondant : la déduplication perdrait le rattachement."},"ApprenantItemRequest":{"properties":{"id":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Id","description":"Identifiant renvoyé par un GET précédent : présent → mise à jour, absent → création."},"nom":{"type":"string","maxLength":255,"minLength":1,"title":"Nom"},"prenom":{"type":"string","maxLength":255,"minLength":1,"title":"Prenom"},"email":{"type":"string","maxLength":255,"title":"Email","default":""},"telephone":{"type":"string","maxLength":80,"title":"Telephone","default":""},"date_naissance":{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})?$","title":"Date Naissance","description":"ISO `YYYY-MM-DD` (vide si inconnue).","default":""},"ligne_ids":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Ligne Ids","description":"Lignes du devis suivies par cet apprenant (voir `lignes[].id` du GET)."}},"additionalProperties":false,"type":"object","required":["nom","prenom"],"title":"ApprenantItemRequest"},"ApprenantLien":{"properties":{"cle":{"type":"string","title":"Cle"},"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"}},"type":"object","required":["cle","nom","prenom"],"title":"ApprenantLien","description":"Apprenant du client sur une ligne de la liste des sessions (lien vers sa fiche)."},"ApprenantListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ApprenantItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"ApprenantListResponse"},"ApprenantResponse":{"properties":{"id":{"type":"string","title":"Id"},"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"},"email":{"type":"string","title":"Email"},"telephone":{"type":"string","title":"Telephone"},"date_naissance":{"type":"string","title":"Date Naissance"},"ligne_ids":{"items":{"type":"string"},"type":"array","title":"Ligne Ids"},"sessions":{"additionalProperties":{"type":"string"},"type":"object","title":"Sessions","description":"ligne_id → numéro de la session choisie (étape 2)."},"can_delete":{"type":"boolean","title":"Can Delete","description":"Faux si l'apprenant est déjà engagé sur une session."},"carnet":{"type":"boolean","title":"Carnet","description":"Vrai : personne du carnet du client (déjà connue par un dossier précédent), pré-remplie automatiquement. Elle n'est inscrite que si vous lui attribuez des lignes ; omise du PUT, elle est détachée (aucune ligne), pas supprimée."}},"type":"object","required":["id","nom","prenom","email","telephone","date_naissance","ligne_ids","sessions","can_delete","carnet"],"title":"ApprenantResponse"},"ApprenantResume":{"properties":{"cle":{"type":"string","title":"Cle"},"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"},"email":{"type":"string","title":"Email","default":""},"telephone":{"type":"string","title":"Telephone","default":""},"etat":{"type":"string","title":"Etat"},"formation_courante":{"type":"string","title":"Formation Courante","default":""},"prochaine_session":{"anyOf":[{"$ref":"#/components/schemas/SessionResume"},{"type":"null"}]},"dernier_certificat":{"type":"string","title":"Dernier Certificat","default":""},"certificat_valide_jusqu_au":{"type":"string","title":"Certificat Valide Jusqu Au","default":""},"pieces":{"type":"integer","title":"Pieces","default":0}},"type":"object","required":["cle","nom","prenom","etat"],"title":"ApprenantResume"},"ApprenantsReplaceRequest":{"properties":{"apprenants":{"items":{"$ref":"#/components/schemas/ApprenantItemRequest"},"type":"array","maxItems":200,"title":"Apprenants"}},"additionalProperties":false,"type":"object","required":["apprenants"],"title":"ApprenantsReplaceRequest","description":"La liste des personnes de ce dossier (comme le formulaire de l'espace\nclient). Avec `id` → mise à jour ; sans `id` → création ; connue mais\nabsente de la liste → détachée si elle vient du carnet du client\n(`carnet: true`), retirée sinon. Exige `If-Match` avec l'ETag du dernier GET."},"Body_espaceAjouterPiece":{"properties":{"doc_type":{"type":"string","title":"Doc Type"},"label":{"type":"string","title":"Label","default":""},"date_emission":{"type":"string","title":"Date Emission","default":""},"date_validite":{"type":"string","title":"Date Validite","default":""},"info":{"type":"string","title":"Info","default":""},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["doc_type","file"],"title":"Body_espaceAjouterPiece"},"Body_espaceJoindreFichier":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_espaceJoindreFichier"},"CategorieItem":{"properties":{"code":{"type":"string","title":"Code","examples":["C1"]},"label":{"type":"string","title":"Label","examples":["Engins de terrassement"]}},"type":"object","required":["code","label"],"title":"CategorieItem"},"CentreItem":{"properties":{"id":{"type":"string","title":"Id"},"nom":{"type":"string","title":"Nom","examples":["Centre de Gennevilliers"]},"adresse":{"type":"string","title":"Adresse"},"code_postal":{"type":"string","title":"Code Postal"},"ville":{"type":"string","title":"Ville"},"departement":{"type":"string","title":"Departement"}},"type":"object","required":["id","nom","adresse","code_postal","ville","departement"],"title":"CentreItem","description":"Un centre de formation ELRM (valeur possible de `centre_id` à la création d'un dossier)."},"CentreListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CentreItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"CentreListResponse"},"CertificationClient":{"properties":{"id":{"type":"string","title":"Id"},"apprenant_cle":{"type":"string","title":"Apprenant Cle"},"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"},"famille":{"type":"string","title":"Famille"},"formation":{"type":"string","title":"Formation"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"numero":{"type":"string","title":"Numero"},"delivre_le":{"type":"string","title":"Delivre Le","default":""},"valide_jusqu_au":{"type":"string","title":"Valide Jusqu Au","default":""},"etat":{"type":"string","title":"Etat"},"dossier_id":{"type":"string","title":"Dossier Id"},"dossier_numero":{"type":"string","title":"Dossier Numero","default":""},"session_id":{"type":"string","title":"Session Id","default":""}},"type":"object","required":["id","apprenant_cle","nom","prenom","famille","formation","numero","etat","dossier_id"],"title":"CertificationClient","description":"Certification délivrée à un apprenant du client (CACES®, AIPR, SST…) :\nun passage de session qui porte un numéro de certificat. Même source que\nla colonne « Dernier certificat » des apprenants."},"ClientItem":{"properties":{"id":{"type":"string","title":"Id"},"nom":{"type":"string","title":"Nom","examples":["CERTALIS"]},"siret":{"type":"string","title":"Siret","description":"SIRET du client (peut être vide)."}},"type":"object","required":["id","nom","siret"],"title":"ClientItem","description":"Un client auquel la clé donne accès."},"ClientLinkApprenant":{"properties":{"id":{"type":"string","title":"Id"},"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"},"email":{"type":"string","title":"Email","default":""},"telephone":{"type":"string","title":"Telephone","default":""},"date_naissance":{"type":"string","title":"Date Naissance","default":""},"numero_securite_sociale":{"type":"string","title":"Numero Securite Sociale","default":""},"handicap":{"type":"boolean","title":"Handicap","default":false},"handicap_besoins":{"type":"string","title":"Handicap Besoins","default":""},"aipr_ticket":{"type":"string","title":"Aipr Ticket","default":""},"date_entree_formation":{"type":"string","title":"Date Entree Formation","default":""},"date_entree_source":{"type":"string","title":"Date Entree Source","default":""},"date_sortie_formation":{"type":"string","title":"Date Sortie Formation","default":""},"date_sortie_source":{"type":"string","title":"Date Sortie Source","default":""},"date_entree_convention":{"type":"string","title":"Date Entree Convention","default":""},"date_sortie_convention":{"type":"string","title":"Date Sortie Convention","default":""},"date_entree_convention_calculee":{"type":"string","title":"Date Entree Convention Calculee","default":""},"date_sortie_convention_calculee":{"type":"string","title":"Date Sortie Convention Calculee","default":""},"dates_par_session":{"additionalProperties":{"$ref":"#/components/schemas/DatesSessionApprenant"},"type":"object","title":"Dates Par Session"},"session_id":{"type":"string","title":"Session Id","default":""},"categories_session":{"items":{"type":"string"},"type":"array","title":"Categories Session"},"duree_heures":{"type":"number","title":"Duree Heures","default":0.0},"duree_jours":{"type":"number","title":"Duree Jours","default":0.0},"periodes":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Periodes"},"session_ids":{"items":{"type":"string"},"type":"array","title":"Session Ids"},"emargement_urls":{"additionalProperties":{"type":"string"},"type":"object","title":"Emargement Urls"},"ligne_sessions":{"additionalProperties":{"type":"string"},"type":"object","title":"Ligne Sessions"},"can_delete":{"type":"boolean","title":"Can Delete","default":true},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"compte_existant":{"type":"boolean","title":"Compte Existant","default":false},"apprenant_id":{"type":"string","title":"Apprenant Id","default":""},"emargement_url":{"type":"string","title":"Emargement Url","default":""},"montant_du_ht":{"type":"number","title":"Montant Du Ht","default":0.0},"documents":{"items":{"$ref":"#/components/schemas/ClientLinkApprenantDocument"},"type":"array","title":"Documents"}},"type":"object","required":["id","nom","prenom"],"title":"ClientLinkApprenant","description":"Apprenant saisi par le client (table de travail). `session_id` = session\nchoisie à l'étape 2 ('' tant que non réparti)."},"ClientLinkApprenantDocument":{"properties":{"id":{"type":"string","title":"Id"},"doc_type":{"type":"string","title":"Doc Type","default":"autre"},"doc_type_label":{"type":"string","title":"Doc Type Label","default":""},"label":{"type":"string","title":"Label","default":""},"date_emission":{"type":"string","title":"Date Emission","default":""},"date_validite":{"type":"string","title":"Date Validite","default":""},"info":{"type":"string","title":"Info","default":""},"file_name":{"type":"string","title":"File Name","default":""},"size_bytes":{"type":"integer","title":"Size Bytes","default":0},"has_file":{"type":"boolean","title":"Has File","default":true}},"type":"object","required":["id"],"title":"ClientLinkApprenantDocument","description":"Document joint par le client à un apprenant (CACES, habilitation…)."},"ClientLinkApprenantInput":{"properties":{"nom":{"type":"string","maxLength":255,"minLength":1,"title":"Nom"},"prenom":{"type":"string","maxLength":255,"title":"Prenom","default":""},"email":{"type":"string","maxLength":255,"title":"Email","default":""},"telephone":{"type":"string","maxLength":80,"title":"Telephone","default":""},"date_naissance":{"type":"string","maxLength":20,"title":"Date Naissance","default":""},"numero_securite_sociale":{"type":"string","maxLength":40,"title":"Numero Securite Sociale","default":""},"handicap":{"type":"boolean","title":"Handicap","default":false},"handicap_besoins":{"type":"string","maxLength":2000,"title":"Handicap Besoins","default":""},"aipr_ticket":{"type":"string","maxLength":120,"title":"Aipr Ticket","default":""},"date_entree_formation":{"anyOf":[{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})?$"},{"type":"null"}],"title":"Date Entree Formation"},"date_sortie_formation":{"anyOf":[{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})?$"},{"type":"null"}],"title":"Date Sortie Formation"}},"type":"object","required":["nom"],"title":"ClientLinkApprenantInput"},"ClientLinkApprenantLookup":{"properties":{"found":{"type":"boolean","title":"Found","default":false},"apprenant":{"anyOf":[{"$ref":"#/components/schemas/ClientLinkApprenantSuggestion"},{"type":"null"}]}},"type":"object","title":"ClientLinkApprenantLookup","description":"Résultat de la recherche par e-mail sur la page d'inscription publique :\ncompte apprenant existant → infos à reprendre dans le formulaire.\n`apprenant_id` volontairement absent (portail public)."},"ClientLinkApprenantSuggestion":{"properties":{"apprenant_id":{"type":"string","title":"Apprenant Id","default":""},"nom":{"type":"string","title":"Nom","default":""},"prenom":{"type":"string","title":"Prenom","default":""},"email":{"type":"string","title":"Email","default":""},"telephone":{"type":"string","title":"Telephone","default":""},"date_naissance":{"type":"string","title":"Date Naissance","default":""},"numero_securite_sociale":{"type":"string","title":"Numero Securite Sociale","default":""},"handicap":{"type":"boolean","title":"Handicap","default":false},"handicap_besoins":{"type":"string","title":"Handicap Besoins","default":""}},"type":"object","title":"ClientLinkApprenantSuggestion","description":"Apprenant connu du client (tous dossiers) — autocomplétion + édition.\n\n`apprenant_id` présent → fiche réelle éditable par le client ; vide → simple\nsuggestion (apprenant pas encore validé)."},"ClientLinkApprenantSuggestions":{"properties":{"apprenants":{"items":{"$ref":"#/components/schemas/ClientLinkApprenantSuggestion"},"type":"array","title":"Apprenants"}},"type":"object","title":"ClientLinkApprenantSuggestions"},"ClientLinkBranding":{"properties":{"raison_sociale":{"type":"string","title":"Raison Sociale","default":""},"logo_data_uri":{"type":"string","title":"Logo Data Uri","default":""},"favicon_data_uri":{"type":"string","title":"Favicon Data Uri","default":""},"couleur_primaire":{"type":"string","title":"Couleur Primaire","default":"#E2001A"},"couleur_secondaire":{"type":"string","title":"Couleur Secondaire","default":"#7A0E14"}},"type":"object","title":"ClientLinkBranding","description":"Marque de l'organisme pour thémer l'espace client (logo + couleurs)."},"ClientLinkLigne":{"properties":{"id":{"type":"string","title":"Id"},"formation_label":{"type":"string","title":"Formation Label","default":""},"caces_recommendation":{"type":"string","title":"Caces Recommendation","default":""},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"nb_apprenants":{"type":"integer","title":"Nb Apprenants","default":0}},"type":"object","required":["id"],"title":"ClientLinkLigne","description":"Une ligne de formation du devis, proposée à l'attribution des apprenants\nsur le portail client (étape 1). `categories` = catégories CACES commandées\nsur la ligne (`categories_session`) — servent au contrôle de couverture\nd'une session (catégories de la ligne ⊆ catégories de la session)."},"ClientLinkSession":{"properties":{"session_id":{"type":"string","title":"Session Id"},"numero":{"type":"string","title":"Numero","default":""},"formation_label":{"type":"string","title":"Formation Label"},"date_debut":{"type":"string","title":"Date Debut"},"date_fin":{"type":"string","title":"Date Fin"},"horaires":{"type":"string","title":"Horaires"},"centre_label":{"type":"string","title":"Centre Label"},"statut":{"type":"string","title":"Statut","default":""},"caces_recommendation":{"type":"string","title":"Caces Recommendation","default":""},"caces_categories":{"items":{"type":"string"},"type":"array","title":"Caces Categories"},"capacite_max":{"type":"integer","title":"Capacite Max","default":0},"inscrits_count":{"type":"integer","title":"Inscrits Count","default":0},"pressentis_count":{"type":"integer","title":"Pressentis Count","default":0},"places_restantes":{"type":"integer","title":"Places Restantes","default":0},"remaining_ut_by_category":{"additionalProperties":{"type":"number"},"type":"object","title":"Remaining Ut By Category"},"capacity_ut_by_category":{"additionalProperties":{"type":"number"},"type":"object","title":"Capacity Ut By Category"},"can_add_apprenant":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Add Apprenant","default":true},"places_disponibles":{"type":"integer","title":"Places Disponibles","default":-1},"inscrits":{"items":{"$ref":"#/components/schemas/ClientLinkSessionInscrit"},"type":"array","title":"Inscrits"},"formateurs":{"items":{"type":"string"},"type":"array","title":"Formateurs"},"testeurs":{"items":{"type":"string"},"type":"array","title":"Testeurs"},"test_schedule":{"items":{"$ref":"#/components/schemas/ClientLinkTestSlot"},"type":"array","title":"Test Schedule"}},"type":"object","required":["session_id","formation_label","date_debut","date_fin","horaires","centre_label"],"title":"ClientLinkSession"},"ClientLinkSessionInscrit":{"properties":{"nom":{"type":"string","title":"Nom"},"prenom":{"type":"string","title":"Prenom"}},"type":"object","required":["nom","prenom"],"title":"ClientLinkSessionInscrit"},"ClientLinkState":{"properties":{"devis_id":{"type":"string","title":"Devis Id","default":""},"devis_numero":{"type":"string","title":"Devis Numero"},"client_label":{"type":"string","title":"Client Label"},"step":{"type":"string","title":"Step","default":"step1"},"locked":{"type":"boolean","title":"Locked","default":false},"chez_le_client":{"type":"boolean","title":"Chez Le Client","default":false},"total_places":{"type":"integer","title":"Total Places","default":0},"has_aipr":{"type":"boolean","title":"Has Aipr","default":false},"cpf":{"type":"boolean","title":"Cpf","default":false},"apprenants":{"items":{"$ref":"#/components/schemas/ClientLinkApprenant"},"type":"array","title":"Apprenants"},"sessions":{"items":{"$ref":"#/components/schemas/ClientLinkSession"},"type":"array","title":"Sessions"},"lignes":{"items":{"$ref":"#/components/schemas/ClientLinkLigne"},"type":"array","title":"Lignes"},"branding":{"$ref":"#/components/schemas/ClientLinkBranding"}},"type":"object","required":["devis_numero","client_label"],"title":"ClientLinkState"},"ClientLinkTestSlot":{"properties":{"day":{"type":"string","title":"Day","default":""},"demi":{"type":"string","title":"Demi","default":""},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"}},"type":"object","title":"ClientLinkTestSlot","description":"Une demi-journée de test et les catégories qui y sont évaluées."},"Compteurs":{"properties":{"dossiers_a_completer":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dossiers A Completer"},"factures_a_regler":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Factures A Regler"},"factures_en_retard":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Factures En Retard"}},"type":"object","title":"Compteurs","description":"Pastilles du menu du portail ; null = rubrique non ouverte au compte."},"Creneau":{"properties":{"du":{"type":"string","title":"Du","default":""},"au":{"type":"string","title":"Au","default":""},"jours":{"type":"string","title":"Jours","default":""},"demi_journee":{"type":"string","title":"Demi Journee","default":""},"horaires":{"type":"string","title":"Horaires","default":""}},"type":"object","title":"Creneau"},"DatesSessionApprenant":{"properties":{"date_entree_formation":{"type":"string","title":"Date Entree Formation","default":""},"date_entree_source":{"type":"string","title":"Date Entree Source","default":""},"date_sortie_formation":{"type":"string","title":"Date Sortie Formation","default":""},"date_sortie_source":{"type":"string","title":"Date Sortie Source","default":""},"date_entree_convention":{"type":"string","title":"Date Entree Convention","default":""},"date_sortie_convention":{"type":"string","title":"Date Sortie Convention","default":""},"date_entree_convention_calculee":{"type":"string","title":"Date Entree Convention Calculee","default":""},"date_sortie_convention_calculee":{"type":"string","title":"Date Sortie Convention Calculee","default":""}},"type":"object","title":"DatesSessionApprenant","description":"Dates d'un apprenant sur UNE de ses sessions (mêmes champs que la\nfiche, cf. `ClientLinkApprenant`)."},"DetailedErrorResponse":{"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}},"type":"object","required":["error"],"title":"DetailedErrorResponse","description":"Erreur métier ou de validation, avec un identifiant de requête."},"DocumentClient":{"properties":{"id":{"type":"string","title":"Id"},"nom":{"type":"string","title":"Nom"},"type":{"type":"string","title":"Type","default":""},"categorie":{"type":"string","title":"Categorie","default":"dossier"},"apprenants":{"items":{"type":"string"},"type":"array","title":"Apprenants"},"ajoute_le":{"type":"string","title":"Ajoute Le","default":""}},"type":"object","required":["id","nom"],"title":"DocumentClient"},"DocumentItem":{"properties":{"id":{"type":"string","title":"Id"},"file_name":{"type":"string","title":"File Name"},"doc_type":{"type":"string","title":"Doc Type","examples":["attestations"]},"doc_type_label":{"type":"string","title":"Doc Type Label","examples":["Attestation de fin de formation"]},"mime_type":{"type":"string","title":"Mime Type"},"size_bytes":{"type":"integer","title":"Size Bytes"}},"type":"object","required":["id","file_name","doc_type","doc_type_label","mime_type","size_bytes"],"title":"DocumentItem","description":"Une pièce téléchargeable d'un dossier."},"DocumentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DocumentItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"DocumentListResponse"},"DossierCreateRequest":{"properties":{"analyse_besoin_id":{"type":"string","maxLength":36,"minLength":1,"title":"Analyse Besoin Id"},"lignes":{"items":{"$ref":"#/components/schemas/LigneCreateRequest"},"type":"array","maxItems":20,"minItems":1,"title":"Lignes"},"centre_id":{"type":"string","maxLength":36,"title":"Centre Id","description":"Centre de formation souhaité (optionnel).","default":""},"chez_le_client":{"type":"boolean","title":"Chez Le Client","description":"Formation dans vos locaux.","default":false},"lieu_adresse":{"type":"string","maxLength":500,"title":"Lieu Adresse","default":""},"lieu_code_postal":{"type":"string","maxLength":20,"title":"Lieu Code Postal","default":""},"lieu_ville":{"type":"string","maxLength":255,"title":"Lieu Ville","default":""},"financement":{"type":"string","pattern":"^(entreprise|opco|cpf|france_travail|prive|autre)$","title":"Financement","description":"Mode de financement principal.","default":"entreprise"},"commentaire":{"type":"string","maxLength":4000,"title":"Commentaire","description":"Note libre pour l'organisme.","default":""}},"additionalProperties":false,"type":"object","required":["analyse_besoin_id","lignes"],"title":"DossierCreateRequest"},"DossierDetail":{"properties":{"id":{"type":"string","title":"Id"},"numero":{"type":"string","title":"Numero"},"statut":{"type":"string","title":"Statut"},"cree_le":{"type":"string","title":"Cree Le","default":""},"vue":{"type":"string","title":"Vue"},"formations":{"items":{"$ref":"#/components/schemas/Formation"},"type":"array","title":"Formations"},"places":{"type":"integer","title":"Places","default":0},"inscrits":{"type":"integer","title":"Inscrits","default":0},"repartis":{"type":"integer","title":"Repartis","default":0},"session":{"anyOf":[{"$ref":"#/components/schemas/SessionResume"},{"type":"null"}]},"jalons":{"items":{"$ref":"#/components/schemas/Jalon"},"type":"array","title":"Jalons"},"etape":{"type":"string","title":"Etape"},"prochaine_action":{"$ref":"#/components/schemas/ProchaineAction"},"montant_ht":{"type":"number","title":"Montant Ht","default":0},"inscription":{"type":"string","title":"Inscription","default":"fermee"},"apprenants":{"items":{"$ref":"#/components/schemas/ApprenantDuDossier"},"type":"array","title":"Apprenants"},"documents":{"items":{"$ref":"#/components/schemas/DocumentClient"},"type":"array","title":"Documents"},"sessions":{"items":{"$ref":"#/components/schemas/SessionResume"},"type":"array","title":"Sessions"}},"type":"object","required":["id","numero","statut","vue","formations","jalons","etape","prochaine_action"],"title":"DossierDetail"},"DossierItem":{"properties":{"id":{"type":"string","title":"Id"},"numero":{"type":"string","title":"Numero","examples":["DEV-2026-0857"]},"statut":{"type":"string","title":"Statut","description":"Statut CRM brut ; préférez `stage`.","examples":["accepte"]},"statut_label":{"type":"string","title":"Statut Label","examples":["Accepté"]},"stage":{"type":"string","title":"Stage","description":"Étape du dossier (même énumération que `GET /dossiers/{id}/suivi`).","examples":["inscriptions_ouvertes"]},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"Dernière modification (ISO 8601)."},"client_id":{"type":"string","title":"Client Id"},"date_debut":{"type":"string","title":"Date Debut","description":"Date de début la plus précoce (ISO, peut être vide)."},"date_fin":{"type":"string","title":"Date Fin","description":"Date de fin la plus tardive (ISO, peut être vide)."},"formations":{"type":"string","title":"Formations","description":"Formations du dossier, dédupliquées."},"nb_places":{"type":"integer","title":"Nb Places"}},"type":"object","required":["id","numero","statut","statut_label","stage","updated_at","client_id","date_debut","date_fin","formations","nb_places"],"title":"DossierItem","description":"Un dossier de formation (devis) du client."},"DossierListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DossierItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"DossierListResponse"},"DossierResponse":{"properties":{"id":{"type":"string","title":"Id"},"numero":{"type":"string","title":"Numero","examples":["DEV-2026-1400"]},"statut":{"type":"string","title":"Statut","description":"Statut CRM brut ; préférez `stage`."},"stage":{"type":"string","title":"Stage","description":"Étape du dossier. Énumération additive — ignorez les valeurs inconnues. `devis_en_preparation`, `devis_envoye`, `inscriptions_ouvertes`, `inscriptions_validees`, `documents_envoyes`, `documents_signes`, `formation_en_cours`, `formation_terminee`, `facture_envoyee`, `documents_fin_envoyes`, `refuse`, `expire`."},"allowed_actions":{"items":{"type":"string"},"type":"array","title":"Allowed Actions","description":"Actions que votre clé peut déclencher maintenant : `set_apprenants`, `validate_inscriptions`."},"client_id":{"type":"string","title":"Client Id"},"analyse_besoin_id":{"type":"string","title":"Analyse Besoin Id"},"montant_ht":{"type":"number","title":"Montant Ht"},"montant_ttc":{"type":"number","title":"Montant Ttc"},"remise_pct":{"type":"number","title":"Remise Pct"},"lignes":{"items":{"$ref":"#/components/schemas/LigneResponse"},"type":"array","title":"Lignes"},"reference_client":{"type":"string","title":"Reference Client","description":"Votre référence (numéro de commande), si l'organisme l'a renseignée."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","numero","statut","stage","allowed_actions","client_id","analyse_besoin_id","montant_ht","montant_ttc","remise_pct","lignes","reference_client","created_at","updated_at"],"title":"DossierResponse"},"DossierResume":{"properties":{"id":{"type":"string","title":"Id"},"numero":{"type":"string","title":"Numero"},"statut":{"type":"string","title":"Statut"},"cree_le":{"type":"string","title":"Cree Le","default":""},"vue":{"type":"string","title":"Vue"},"formations":{"items":{"$ref":"#/components/schemas/Formation"},"type":"array","title":"Formations"},"places":{"type":"integer","title":"Places","default":0},"inscrits":{"type":"integer","title":"Inscrits","default":0},"repartis":{"type":"integer","title":"Repartis","default":0},"session":{"anyOf":[{"$ref":"#/components/schemas/SessionResume"},{"type":"null"}]},"jalons":{"items":{"$ref":"#/components/schemas/Jalon"},"type":"array","title":"Jalons"},"etape":{"type":"string","title":"Etape"},"prochaine_action":{"$ref":"#/components/schemas/ProchaineAction"},"montant_ht":{"type":"number","title":"Montant Ht","default":0},"inscription":{"type":"string","title":"Inscription","default":"fermee"}},"type":"object","required":["id","numero","statut","vue","formations","jalons","etape","prochaine_action"],"title":"DossierResume"},"ErrorDetail":{"properties":{"code":{"type":"string","title":"Code","examples":["not_found"]},"message":{"type":"string","title":"Message","examples":["Session not found"]},"details":{"additionalProperties":true,"type":"object","title":"Details"},"trace_id":{"type":"string","title":"Trace Id","description":"Identifiant de la requête, à communiquer au support.","examples":["c352d149-8c95-4af0-af94-ba4c0728827d"]}},"type":"object","required":["code","message","trace_id"],"title":"ErrorDetail"},"EtapeHistorique":{"properties":{"libelle":{"type":"string","title":"Libelle"},"date":{"type":"string","title":"Date","default":""},"etat":{"type":"string","title":"Etat","default":"fait"}},"type":"object","required":["libelle"],"title":"EtapeHistorique"},"EventItem":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type","description":"Type d'événement, énumération additive : `dossier.created`, `analyse_besoin.attached`, `dossier.statut_changed`, `dossier.confirmed`, `inscriptions.validated`, `inscriptions.reopened`, `documents.sent`, `documents.signed`, `documents.paper_signature_issued`, `apprenant.moved`, `apprenant.removed`. Ignorez les valeurs inconnues."},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"details":{"additionalProperties":true,"type":"object","title":"Details","description":"Extrait du contexte (`from`/`to` pour un changement de statut…)."},"by_partner":{"type":"boolean","title":"By Partner","description":"Vrai si l'événement vient de votre intégration."}},"type":"object","required":["id","type","occurred_at","details","by_partner"],"title":"EventItem"},"EventListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EventItem"},"type":"array","title":"Items"},"next_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Since","description":"À passer en `since` au prochain appel pour ne lire que la suite (null si rien)."},"has_more":{"type":"boolean","title":"Has More","description":"Vrai si d'autres événements suivent déjà : rappelez immédiatement avec `since=next_since`.","default":false}},"type":"object","required":["items","next_since"],"title":"EventListResponse"},"FactureClient":{"properties":{"id":{"type":"string","title":"Id"},"numero":{"type":"string","title":"Numero"},"type":{"type":"string","title":"Type"},"dossier_id":{"type":"string","title":"Dossier Id"},"dossier_numero":{"type":"string","title":"Dossier Numero","default":""},"formation":{"type":"string","title":"Formation","default":""},"emise_le":{"type":"string","title":"Emise Le","default":""},"echeance":{"type":"string","title":"Echeance","default":""},"montant_ht":{"type":"number","title":"Montant Ht","default":0.0},"montant_ttc":{"type":"number","title":"Montant Ttc","default":0.0},"reste":{"type":"number","title":"Reste","default":0.0},"etat":{"type":"string","title":"Etat"},"payee_carte_le":{"type":"string","title":"Payee Carte Le","default":""},"reglee_le":{"type":"string","title":"Reglee Le","default":""},"payable":{"type":"boolean","title":"Payable","default":false},"motif_non_payable":{"type":"string","title":"Motif Non Payable","default":""},"origine_numero":{"type":"string","title":"Origine Numero","default":""},"acquittee":{"type":"boolean","title":"Acquittee","default":false}},"type":"object","required":["id","numero","type","dossier_id","etat"],"title":"FactureClient"},"FactureDetail":{"properties":{"id":{"type":"string","title":"Id"},"numero":{"type":"string","title":"Numero"},"type":{"type":"string","title":"Type"},"dossier_id":{"type":"string","title":"Dossier Id"},"dossier_numero":{"type":"string","title":"Dossier Numero","default":""},"formation":{"type":"string","title":"Formation","default":""},"emise_le":{"type":"string","title":"Emise Le","default":""},"echeance":{"type":"string","title":"Echeance","default":""},"montant_ht":{"type":"number","title":"Montant Ht","default":0.0},"montant_ttc":{"type":"number","title":"Montant Ttc","default":0.0},"reste":{"type":"number","title":"Reste","default":0.0},"etat":{"type":"string","title":"Etat"},"payee_carte_le":{"type":"string","title":"Payee Carte Le","default":""},"reglee_le":{"type":"string","title":"Reglee Le","default":""},"payable":{"type":"boolean","title":"Payable","default":false},"motif_non_payable":{"type":"string","title":"Motif Non Payable","default":""},"origine_numero":{"type":"string","title":"Origine Numero","default":""},"acquittee":{"type":"boolean","title":"Acquittee","default":false},"tva_pct":{"type":"number","title":"Tva Pct","default":0.0},"lignes":{"items":{"$ref":"#/components/schemas/LigneFacture"},"type":"array","title":"Lignes"},"historique":{"items":{"$ref":"#/components/schemas/EtapeHistorique"},"type":"array","title":"Historique"},"virement":{"anyOf":[{"$ref":"#/components/schemas/Virement"},{"type":"null"}]},"carte_disponible":{"type":"boolean","title":"Carte Disponible","default":false}},"type":"object","required":["id","numero","type","dossier_id","etat"],"title":"FactureDetail"},"Formation":{"properties":{"libelle":{"type":"string","title":"Libelle"},"recommandation":{"type":"string","title":"Recommandation","default":""},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"jours":{"type":"number","title":"Jours","default":0},"heures":{"type":"number","title":"Heures","default":0},"apprenants":{"type":"integer","title":"Apprenants","default":0},"prix_unitaire_ht":{"type":"number","title":"Prix Unitaire Ht","default":0},"montant_ht":{"type":"number","title":"Montant Ht","default":0}},"type":"object","required":["libelle"],"title":"Formation"},"FormationItem":{"properties":{"recommendation_id":{"type":"string","title":"Recommendation Id"},"code":{"type":"string","title":"Code","examples":["R482"]},"label":{"type":"string","title":"Label","examples":["Engins de chantier"]},"is_caces":{"type":"boolean","title":"Is Caces"},"certification":{"type":"string","title":"Certification"},"offres":{"items":{"$ref":"#/components/schemas/OffreItem"},"type":"array","title":"Offres"},"categories":{"items":{"$ref":"#/components/schemas/CategorieItem"},"type":"array","title":"Categories","description":"Catégories d'engins de la recommandation (valeurs possibles de `categories_session`)."},"description":{"type":"string","title":"Description","description":"Présentation de la formation.","default":""},"duree":{"type":"string","title":"Duree","description":"Durée indicative de la formation, texte libre.","default":""},"public_vise":{"type":"string","title":"Public Vise","description":"Public visé.","default":""},"prerequis":{"type":"string","title":"Prerequis","description":"Prérequis.","default":""},"objectifs":{"type":"string","title":"Objectifs","description":"Objectifs pédagogiques.","default":""},"programme":{"type":"string","title":"Programme","description":"Programme.","default":""},"modalites":{"type":"string","title":"Modalites","description":"Modalités pédagogiques et d'accès.","default":""},"evaluation":{"type":"string","title":"Evaluation","description":"Modalités d'évaluation.","default":""}},"type":"object","required":["recommendation_id","code","label","is_caces","certification","offres"],"title":"FormationItem"},"FormationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FormationItem"},"type":"array","title":"Items"},"remise_pct":{"type":"number","title":"Remise Pct","description":"Remise (%) appliquée à toutes les offres pour ce client."}},"type":"object","required":["items","remise_pct"],"title":"FormationListResponse"},"InscriptionsStateResponse":{"properties":{"dossier_id":{"type":"string","title":"Dossier Id"},"numero":{"type":"string","title":"Numero"},"stage":{"type":"string","title":"Stage"},"allowed_actions":{"items":{"type":"string"},"type":"array","title":"Allowed Actions"},"step":{"type":"string","title":"Step","description":"`step1` : liste + lignes · `step2` : répartition · `done` : verrouillé."},"locked":{"type":"boolean","title":"Locked"},"total_places":{"type":"integer","title":"Total Places"},"lignes":{"items":{"$ref":"#/components/schemas/LigneInscriptionResponse"},"type":"array","title":"Lignes"},"apprenants":{"items":{"$ref":"#/components/schemas/ApprenantResponse"},"type":"array","title":"Apprenants"},"sessions_candidates":{"items":{"$ref":"#/components/schemas/SessionCandidateResponse"},"type":"array","title":"Sessions Candidates"}},"type":"object","required":["dossier_id","numero","stage","allowed_actions","step","locked","total_places","lignes","apprenants","sessions_candidates"],"title":"InscriptionsStateResponse"},"Jalon":{"properties":{"libelle":{"type":"string","title":"Libelle"},"etat":{"type":"string","title":"Etat"}},"type":"object","required":["libelle","etat"],"title":"Jalon"},"Lieu":{"properties":{"libelle":{"type":"string","title":"Libelle","default":""},"adresse":{"type":"string","title":"Adresse","default":""},"chez_le_client":{"type":"boolean","title":"Chez Le Client","default":false}},"type":"object","title":"Lieu"},"LigneCreateRequest":{"properties":{"offre_id":{"type":"string","maxLength":36,"minLength":1,"title":"Offre Id"},"nb_apprenants":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Nb Apprenants"},"date_debut":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Date Debut","description":"Période souhaitée (ISO)."},"date_fin":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Date Fin"},"categories_session":{"items":{"type":"string"},"type":"array","maxItems":10,"title":"Categories Session","description":"Catégories CACES visées (ex. `A`, `B1`) — indicatif, précisé à l'inscription."}},"additionalProperties":false,"type":"object","required":["offre_id","nb_apprenants","date_debut","date_fin"],"title":"LigneCreateRequest","description":"Une ligne = une offre × un nombre d'apprenants × une période. Le prix\nn'est pas un champ : il vient de l'offre et de votre remise."},"LigneFacture":{"properties":{"libelle":{"type":"string","title":"Libelle"},"montant_ht":{"type":"number","title":"Montant Ht","default":0.0}},"type":"object","required":["libelle"],"title":"LigneFacture"},"LigneInscriptionResponse":{"properties":{"id":{"type":"string","title":"Id"},"formation_label":{"type":"string","title":"Formation Label"},"caces_recommendation":{"type":"string","title":"Caces Recommendation"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"nb_apprenants":{"type":"integer","title":"Nb Apprenants","description":"Places commandées sur cette ligne."}},"type":"object","required":["id","formation_label","caces_recommendation","categories","nb_apprenants"],"title":"LigneInscriptionResponse"},"LigneResponse":{"properties":{"offre_id":{"type":"string","title":"Offre Id"},"formation_label":{"type":"string","title":"Formation Label"},"nb_apprenants":{"type":"integer","title":"Nb Apprenants"},"date_debut":{"type":"string","title":"Date Debut"},"date_fin":{"type":"string","title":"Date Fin"},"categories_session":{"items":{"type":"string"},"type":"array","title":"Categories Session"},"prix_unitaire_ht":{"type":"number","title":"Prix Unitaire Ht"},"remise_pct":{"type":"number","title":"Remise Pct"},"montant_ht":{"type":"number","title":"Montant Ht"}},"type":"object","required":["offre_id","formation_label","nb_apprenants","date_debut","date_fin","categories_session","prix_unitaire_ht","remise_pct","montant_ht"],"title":"LigneResponse"},"LignesInput":{"properties":{"ligne_ids":{"items":{"type":"string"},"type":"array","title":"Ligne Ids"}},"type":"object","required":["ligne_ids"],"title":"LignesInput"},"McfReferenceItem":{"properties":{"numero_formation":{"type":"string","title":"Numero Formation"},"numero_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Numero Action","description":"Identifiant de l'action MCF (présent si la fiche a pu être matchée)."},"titre":{"type":"string","title":"Titre","description":"Intitulé de la formation"},"description":{"type":"string","title":"Description","description":"Objectif / contenu de la formation (texte libre, peut être vide)."},"intitule_certification":{"type":"string","title":"Intitule Certification","description":"Certification visée (peut être vide)"},"code_departement":{"type":"string","title":"Code Departement"},"nom_departement":{"type":"string","title":"Nom Departement"},"nom_region":{"type":"string","title":"Nom Region"},"duree_heures":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duree Heures","description":"Durée moyenne en heures (peut être absente)."},"prix_ttc":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Prix Ttc","description":"Prix TTC moyen en euros (peut être absent)."},"url":{"type":"string","title":"Url","description":"Lien Mon Compte Formation (deep-link ou recherche)"}},"type":"object","required":["numero_formation","titre","description","intitule_certification","code_departement","nom_departement","nom_region","url"],"title":"McfReferenceItem","description":"Un lien Mon Compte Formation (couple formation × département), vue partenaire."},"McfReferenceListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/McfReferenceItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"McfReferenceListResponse","description":"Réponse paginée de la liste des liens Mon Compte Formation."},"OffreItem":{"properties":{"id":{"type":"string","title":"Id","description":"Identifiant à passer dans `lignes[].offre_id` et `offre_ids`."},"code":{"type":"string","title":"Code","examples":["R482_3_Avancé"]},"titre":{"type":"string","title":"Titre"},"duree":{"type":"string","title":"Duree","description":"Durée indicative, texte libre (peut être vide)."},"nombre_ut":{"type":"number","title":"Nombre Ut","description":"Unités de test (UT) de l'offre."},"prix_ht":{"type":"number","title":"Prix Ht","description":"Prix catalogue HT, par apprenant."},"remise_pct":{"type":"number","title":"Remise Pct","description":"Remise (%) accordée à ce client par l'organisme."},"prix_remise_ht":{"type":"number","title":"Prix Remise Ht","description":"Prix HT par apprenant après remise — celui qui sera facturé."}},"type":"object","required":["id","code","titre","duree","nombre_ut","prix_ht","remise_pct","prix_remise_ht"],"title":"OffreItem"},"Participation":{"properties":{"dossier_id":{"type":"string","title":"Dossier Id"},"dossier_numero":{"type":"string","title":"Dossier Numero"},"formation":{"type":"string","title":"Formation"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"session":{"anyOf":[{"$ref":"#/components/schemas/SessionResume"},{"type":"null"}]},"resultat":{"anyOf":[{"$ref":"#/components/schemas/Resultat"},{"type":"null"}]}},"type":"object","required":["dossier_id","dossier_numero","formation"],"title":"Participation"},"PieceApprenant":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"libelle":{"type":"string","title":"Libelle"},"date_emission":{"type":"string","title":"Date Emission","default":""}},"type":"object","required":["id","type","libelle"],"title":"PieceApprenant"},"PlacementRequest":{"properties":{"ligne_id":{"type":"string","maxLength":36,"minLength":1,"title":"Ligne Id"},"session_numero":{"type":"string","maxLength":40,"minLength":1,"title":"Session Numero","description":"Numéro d'une session de `sessions_candidates`."}},"additionalProperties":false,"type":"object","required":["ligne_id","session_numero"],"title":"PlacementRequest"},"ProchaineAction":{"properties":{"qui":{"type":"string","title":"Qui"},"libelle":{"type":"string","title":"Libelle"},"detail":{"type":"string","title":"Detail","default":""}},"type":"object","required":["qui","libelle"],"title":"ProchaineAction"},"RecommendationItem":{"properties":{"code":{"type":"string","title":"Code","description":"Code de la nomenclature. C'est la valeur à passer au filtre `recommendation` de la liste des sessions.","examples":["R482"]},"label":{"type":"string","title":"Label","examples":["Engins de chantier"]},"description":{"type":"string","title":"Description","description":"Présentation de la formation (peut être vide)."},"is_caces":{"type":"boolean","title":"Is Caces","description":"Vrai pour une recommandation CNAM (R48x), faux pour une formation hors nomenclature (AIPR, SST…)."},"duree":{"type":"string","title":"Duree","description":"Durée indicative, en texte libre (peut être vide)."},"certification":{"type":"string","title":"Certification","description":"Certification visée (peut être vide)."}},"type":"object","required":["code","label","description","is_caces","duree","certification"],"title":"RecommendationItem","description":"Une entrée du référentiel des formations, vue partenaire."},"RecommendationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RecommendationItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"RecommendationListResponse","description":"Réponse paginée du référentiel des formations."},"Resultat":{"properties":{"theorie":{"type":"string","title":"Theorie","default":""},"pratique":{"additionalProperties":{"type":"string"},"type":"object","title":"Pratique"},"numero_certificat":{"type":"string","title":"Numero Certificat","default":""},"valide_jusqu_au":{"type":"string","title":"Valide Jusqu Au","default":""}},"type":"object","title":"Resultat"},"SessionCandidateResponse":{"properties":{"numero":{"type":"string","title":"Numero"},"formation_label":{"type":"string","title":"Formation Label"},"date_debut":{"type":"string","title":"Date Debut"},"date_fin":{"type":"string","title":"Date Fin"},"horaires":{"type":"string","title":"Horaires"},"centre_label":{"type":"string","title":"Centre Label"},"caces_recommendation":{"type":"string","title":"Caces Recommendation"},"caces_categories":{"items":{"type":"string"},"type":"array","title":"Caces Categories"},"capacite_max":{"type":"integer","title":"Capacite Max"},"inscrits_count":{"type":"integer","title":"Inscrits Count"},"places_restantes":{"type":"integer","title":"Places Restantes"},"can_add_apprenant":{"type":"boolean","title":"Can Add Apprenant"}},"type":"object","required":["numero","formation_label","date_debut","date_fin","horaires","centre_label","caces_recommendation","caces_categories","capacite_max","inscrits_count","places_restantes","can_add_apprenant"],"title":"SessionCandidateResponse"},"SessionDetail":{"properties":{"id":{"type":"string","title":"Id"},"numero":{"type":"string","title":"Numero","default":""},"formation":{"type":"string","title":"Formation","default":""},"recommandation":{"type":"string","title":"Recommandation","default":""},"date_debut":{"type":"string","title":"Date Debut","default":""},"date_fin":{"type":"string","title":"Date Fin","default":""},"horaires":{"type":"string","title":"Horaires","default":""},"lieu":{"$ref":"#/components/schemas/Lieu"},"etat":{"type":"string","title":"Etat","default":"a_venir"},"apprenants":{"type":"integer","title":"Apprenants","default":0},"inscrits":{"items":{"$ref":"#/components/schemas/ApprenantLien"},"type":"array","title":"Inscrits"},"vos_apprenants":{"items":{"$ref":"#/components/schemas/ApprenantDeSession"},"type":"array","title":"Vos Apprenants"},"creneaux":{"items":{"$ref":"#/components/schemas/Creneau"},"type":"array","title":"Creneaux"}},"type":"object","required":["id"],"title":"SessionDetail"},"SessionItem":{"properties":{"numero":{"type":"string","title":"Numero"},"formation_label":{"type":"string","title":"Formation Label"},"is_caces":{"type":"boolean","title":"Is Caces"},"caces_recommendation":{"type":"string","title":"Caces Recommendation"},"caces_categories":{"items":{"type":"string"},"type":"array","title":"Caces Categories"},"date_debut":{"type":"string","title":"Date Debut","description":"Date de début (ISO YYYY-MM-DD)"},"date_fin":{"type":"string","title":"Date Fin","description":"Date de fin (ISO YYYY-MM-DD)"},"horaires":{"type":"string","title":"Horaires"},"centre_label":{"type":"string","title":"Centre Label"},"statut":{"type":"string","title":"Statut"},"capacite_max":{"type":"integer","title":"Capacite Max"},"available_slots":{"type":"integer","title":"Available Slots"}},"type":"object","required":["numero","formation_label","is_caces","caces_recommendation","caces_categories","date_debut","date_fin","horaires","centre_label","statut","capacite_max","available_slots"],"title":"SessionItem","description":"Une session de formation, vue partenaire."},"SessionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SessionItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Nombre total de sessions correspondant aux filtres, toutes pages confondues."},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"SessionListResponse","description":"Réponse paginée de la liste des sessions à venir."},"SessionListeItem":{"properties":{"id":{"type":"string","title":"Id"},"numero":{"type":"string","title":"Numero","default":""},"formation":{"type":"string","title":"Formation","default":""},"recommandation":{"type":"string","title":"Recommandation","default":""},"date_debut":{"type":"string","title":"Date Debut","default":""},"date_fin":{"type":"string","title":"Date Fin","default":""},"horaires":{"type":"string","title":"Horaires","default":""},"lieu":{"$ref":"#/components/schemas/Lieu"},"etat":{"type":"string","title":"Etat","default":"a_venir"},"apprenants":{"type":"integer","title":"Apprenants","default":0},"inscrits":{"items":{"$ref":"#/components/schemas/ApprenantLien"},"type":"array","title":"Inscrits"}},"type":"object","required":["id"],"title":"SessionListeItem"},"SessionResume":{"properties":{"id":{"type":"string","title":"Id"},"numero":{"type":"string","title":"Numero","default":""},"formation":{"type":"string","title":"Formation","default":""},"recommandation":{"type":"string","title":"Recommandation","default":""},"date_debut":{"type":"string","title":"Date Debut","default":""},"date_fin":{"type":"string","title":"Date Fin","default":""},"horaires":{"type":"string","title":"Horaires","default":""},"lieu":{"$ref":"#/components/schemas/Lieu"},"etat":{"type":"string","title":"Etat","default":"a_venir"}},"type":"object","required":["id"],"title":"SessionResume"},"Virement":{"properties":{"titulaire":{"type":"string","title":"Titulaire","default":""},"banque":{"type":"string","title":"Banque","default":""},"iban":{"type":"string","title":"Iban","default":""},"bic":{"type":"string","title":"Bic","default":""},"reference":{"type":"string","title":"Reference","default":""}},"type":"object","title":"Virement"}},"securitySchemes":{"Bearer":{"type":"http","description":"Jeton porteur : `pk_live_<identifiant>.<secret>` (production) ou `pk_test_…` (bac à sable) Chaque route annonce la portée (scope) qu'elle exige.","scheme":"bearer"}}},"tags":[{"name":"Catalogue","description":"L'offre de formation : sessions ouvertes à l'inscription, référentiel des formations et catalogue Mon Compte Formation.\n\nDonnées **publiques**, identiques pour tous les partenaires, jamais nominatives. Les sessions privées (intra-entreprise) n'y figurent pas.\n\nScopes : `formations:sessions:read`, `formations:recommendations:read`, `formations:mcf:read`."},{"name":"Suivi client","description":"Votre fiche client (`GET /me`), puis vos dossiers, apprenants et documents.\n\nDonnées **nominatives** : une clé est rattachée à un seul client, le vôtre ; ces routes portent implicitement sur lui, sans identifiant à passer.\n\nScopes : `clients:dossiers:read`, `clients:apprenants:read`, `clients:documents:read`."},{"name":"Inscriptions","description":"Inscrire les apprenants d'un dossier accepté et les répartir dans les sessions, les mêmes deux étapes que l'espace client :\n\n1. **Liste et lignes** : `PUT …/inscriptions/apprenants` (identité minimale, lignes du devis suivies), puis `POST …/etape-1/valider`.\n2. **Répartition** : pour chaque apprenant et chaque ligne, une session parmi `sessions_candidates` (`PUT …/apprenants/{id}/session`), puis `POST …/inscriptions/valider`, les inscriptions sont créées, le dossier est verrouillé et l'organisme prend le relais.\n\nNi numéro de sécurité sociale ni situation de handicap ne transitent par l'API : l'apprenant les renseigne dans son espace.\n\nScopes : `clients:apprenants:write`, `clients:dossiers:read`."},{"name":"Dossiers","description":"Piloter un dossier de formation de bout en bout, côté client : consulter le catalogue **aux prix de votre remise**, déposer une analyse du besoin, créer le dossier à partir d'elle (il vaut commande : pas de confirmation par bon de commande), puis suivre son étape (`stage`) et les actions possibles (`allowed_actions`).\n\nVous ne saisissez jamais un prix : chaque ligne référence une offre du catalogue, le montant est calculé par l'organisme. Un champ de prix dans le corps répond `422`.\n\nL'organisme garde la main sur la session, la facture et les documents de fin de formation.\n\nScopes : `clients:analyses:write`, `clients:analyses:read`, `clients:dossiers:write`, `clients:dossiers:read`."},{"name":"Espace client","description":"Les mêmes données et les mêmes actions que votre espace sur le portail : dossiers détaillés, apprenants, certifications, sessions, inscription pas à pas (apprenants, pièces, répartition) et factures.\n\nLe portail appelle exactement ces routes : ce que vous faites à l'écran, votre clé peut le faire ici, dans la limite des droits ouverts à l'API sur votre fiche client.\n\nChaque route annonce les droits qu'elle exige (`x-droits`) et les scopes correspondants.\n\nScopes : `clients:dossiers:read`, `clients:documents:read`, `clients:apprenants:read`, `clients:apprenants:write`, `clients:factures:read`."}]}