The Api Catalog is designed to provide the entire catalog available on Cegos.fr in an automated way. You can access information on all available training courses. You'll find schedules, prices, training locations, etc.
The data is segmented Into four parts:
Access to this API is restricted to authorized users by the default scope "api-cegos". If you haven't already done so, we suggest you follow the registration steps explained in the "Register your application" section.
For developers and other engineering teams, an Open API documentation generated by Swagger is available at this URL:
https://catalog.api.cegos.fr/swagger
How notice content flows from NextPage CMS to the API response
How product information flows from ROMEO to the API response
How session data flows from the Programmation system to the API response
How center information flows from Safir to the API response
/v1/Catalogs
/v1/Catalogs
Offre_marketing
P_API_GET_CATALOG
T_CATALOGUE, T_PAYS, T_TYPE_CATALOGUE, T_CATALOGUE_PUBLIQUE
Field | Type | Description | Database Source |
---|---|---|---|
id | Int | Catalog identifier | T_CATALOGUE.ID_CANAL_MVS |
label | String | Catalog display name | T_CATALOGUE.LIB_CATALOGUE |
countryId | String | Associated country identifier | T_CATALOGUE.ID_PAYS |
countryLabel | String | Country display name | T_PAYS.LIB_PAYS |
startDate | DateTime | Catalog publication start date | T_CATALOGUE.DATE_DEBUT_CATA_EDI |
endDate | DateTime | Catalog publication end date | T_CATALOGUE.DATE_FIN_CATA_EDI |
{
"data": [
{
"id": 92446,
"label": "Site Web 2025",
"countryId": "1",
"countryLabel": "France",
"startDate": "2024-09-01T00:00:00",
"endDate": "2025-12-31T00:00:00"
},
{
"id": 27724,
"label": "Site e-learning_MOD_FR",
"countryId": "1",
"countryLabel": "France",
"startDate": "2009-01-01T00:00:00",
"endDate": "2100-12-31T00:00:00"
},
{
"id": 27863,
"label": "Site e-learning_MOD_EN",
"countryId": "2",
"countryLabel": "Royaume-Uni",
"startDate": "2009-01-01T00:00:00",
"endDate": "2100-12-31T00:00:00"
}
]
}
/v1/CatalogTopics
/v1/CatalogTopics
Offre_marketing
P_API_GET_CATALOG_TOPICS
T_THEME, T_THEME_TITRE, T_THEME_PERE
Field | Type | Description | Database Source |
---|---|---|---|
catalogId | Int | Catalog identifier | T_CATALOGUE.ID_CANAL_MVS |
year | Int | Catalog year | YEAR(T_CATALOGUE.date_fin_cata_edi) |
topics | Array[CatalogTopicsResponse] | Hierarchical array of topics | CTE Recursive Results |
Field | Type | Description | Database Source |
---|---|---|---|
id | Int | Topic identifier | T_THEME.id_theme_mvs |
label | String | Topic display name | T_THEME_TITRE.lib_theme |
order | Int | Display order | T_THEME_PERE.ordre |
subTopics | Array[CatalogTopicsResponse] | Recursive array of child topics | CTE Recursive Structure |
{
"data": {
"catalogId": 92446,
"year": 2025,
"topics": [
{
"id": 924470,
"label": "Achats",
"order": 1,
"subTopics": [
{
"id": 925040,
"label": "Management et métiers des achats",
"order": 1,
"subTopics": [
{
"id": 925050,
"label": "Management des achats",
"order": 1,
"subTopics": null
}
]
}
]
}
]
}
}
/v1/Products
/v1/Products
Catalog Database
P_API_GET_PRODUCTS (main), P_API_GET_FORMULA (formulas/modules), P_API_GET_RELATED_PRODUCTS (related products), P_API_GET_TITLES (titles)
T_PRODUIT, T_OFFRE, T_TITRE, T_NIVEAU, T_GAMME, T_PARTENAIRE, T_PRIX, T_CERTIFICATION, T_DISPOSITIF_FORMATION, T_MODE_DELIVRANCE, T_CERTIFICATEUR, T_TYPE_EVOLUTION, T_FAMILLE_OFFRE, T_NOTICE, T_CHAINAGE_PRODUIT, T_CHAINAGE, T_MODULE, T_MODULE_GENERIQUE, T_TYPE_MODULE, T_PRESTATION_COMPLEMENTAIRE, T_TYPE_PRESTATION_COMPLEMENTAIRE, T_PRODUIT_THEME, T_THEME, T_CATALOGUE
Field | Type | Description | Database Source |
---|---|---|---|
data | Array[ProductDetailsResponse] | Array of product details | SessionService aggregation |
pageNumber | Int | Current page number (default: 1, auto-corrected) | Controller logic |
pageSize | Int | Items per page (fixed: 100) | Controller logic |
totalItems | Int | Total number of products | data.Count |
totalPages | Int | Total number of pages | Math.Ceiling(totalItem / 100) |
data[].productCode | String | Product identifier code | T_PRODUIT.CODE_PRODUIT |
data[].yearlyProductCode | String | Yearly product identifier (computed: OfferYear + ProductCode) | T_OFFRE.LIB_OFFRE + T_PRODUIT.CODE_PRODUIT |
data[].offerYear | Int | Product offer year | T_OFFRE.LIB_OFFRE |
data[].title | String | Product title | T_TITRE.TITRE |
data[].evolutionType | String | Product evolution type | T_TYPE_EVOLUTION.LIB_TYPE_EVOLUTION |
data[].cpf | Boolean | CPF eligibility | T_PRODUIT.CPF |
data[].rsCode | String | RS (Specific Register) code (optional, only if not empty) | T_PRODUIT.CODE_RS |
data[].rncpCode | String | RNCP (National Directory of Professional Certifications) code (optional, only if not empty) | T_PRODUIT.CODE_RNCP |
data[].cpfCode | String | CPF-specific code (optional, only if not empty) | T_PRODUIT.CODE_CPF |
data[].moduleDuration | String | Module duration | T_PRODUIT.DUREE_MODULE |
data[].partners | Array[String] | Partners | T_PARTENAIRE.LIB_PARTENAIRE |
data[].certification | String | Certification | T_CERTIFICATION.LIB_CERTIFICATION |
data[].certifier | String | Certifier | T_CERTIFICATEUR.LIB_CERTIFICATEUR |
data[].jobSheetTitle | String | Job sheet title | T_PRODUIT.TITRE_FICHE_POSTE |
data[].jobSheetUrl | String | Job sheet URL | T_PRODUIT.URL_FICHE_POSTE |
data[].modalityTitle | String | Modality title | T_MODE_DELIVRANCE.LIB_MODE_DELIVRANCE |
data[].marketingTitle | String | Marketing title | T_PRODUIT.TITRE_MARKETING |
data[].trainingMethod | String | Training methodology | T_DISPOSITIF_FORMATION.LIB_DISPOSITIF_FORMATION |
data[].familyOfferId | Int | Family offer identifier | T_PRODUIT.ID_FAMILLE_OFFRE |
data[].languages | Array[String] | Available languages | P_API_GET_PRODUCTS → product extension mapping |
data[].cities | Array[String] | Available cities | P_API_GET_PRODUCTS → session cities aggregation |
data[].availableCpfCities | Array[String] | Cities available for CPF | P_API_GET_PRODUCTS → CPF-enabled cities filtering |
data[].level | ElementResponse | Product difficulty level | T_NIVEAU → ElementResponse |
data[].professionalChallengesId | Int | Professional challenges identifier | T_PRODUIT.ID_ENJEU |
data[].bestSeller | Boolean | Best seller flag | T_PRODUIT.TOP_BEST |
data[].picto4Real | Boolean | Picto4Real flag (0 → 0, 1 → 1) | T_PRODUIT.TOP_PICTO_4REAL |
data[].titles | Array[TitleResponse] | Product titles (only if hydrate=true) | P_API_GET_TITLES stored procedure |
data[].formula | Array[FormulaResponse] | Product formula (only if hydrate=true) | P_API_GET_FORMULA → T_CHAINAGE_PRODUIT |
data[].catalogTopicRelations | Array[CatalogTopicRelationResponse] | Catalog topic relations (only if hydrate=true) | P_API_GET_PRODUCTS → T_PRODUIT_THEME, T_THEME |
data[].relatedProducts | Array[RelatedProductResponse] | List of related products | P_API_GET_RELATED_PRODUCTS stored procedure |
data[].range | ElementResponse | Product range/category | T_GAMME → ElementResponse |
data[].price | Double | Standard price (inter-enterprise) | PRIX.Prix_Standard (MAX with TOP_PRIX_INTERDEDIE=0) |
data[].iPackPrice | Double | iPack price (dedicated inter) | PRIX.Prix_InterDedie (MAX with TOP_PRIX_INTERDEDIE=1) |
data[].notice | NoticeDetailsResponse | Full product notice (only if hydrate=true) | T_NOTICE via P_SSIS_NEXTPAGE_CONTENU_NOTICES (NextPage XML import) |
data[].noticeUrl | String | Notice URL | T_NOTICE.LIEN_NOTICE via ProductDetailsExtension mapping |
data[].noticeUrlPdf | String | Notice PDF URL | T_NOTICE.LIEN_NOTICE_PDF via ProductDetailsExtension mapping |
data[].certificationInclude | Boolean | Is certification included | T_PRODUIT.TOP_CERTIFICATION_INCLUSE |
data[].internationalProduct | Boolean | Is international product | T_PRODUIT.TOP_PRODUIT_INTERNATIONAL |
data[].partners | Array[String] | Partners | T_PARTENAIRE.LIB_PARTENAIRE |
data[].certification | String | Certification | T_CERTIFICATION.LIB_CERTIFICATION |
data[].certifier | String | Certifier | T_CERTIFICATEUR.LIB_CERTIFICATEUR |
data[].jobSheetTitle | String | Job sheet title | T_PRODUIT.TITRE_FICHE_POSTE |
data[].jobSheetUrl | String | Job sheet URL | T_PRODUIT.URL_FICHE_POSTE |
data[].modalityTitle | String | Modality title | T_MODE_DELIVRANCE.LIB_MODE_DELIVRANCE |
data[].marketingTitle | String | Marketing title | T_PRODUIT.TITRE_MARKETING |
data[].deliveryMode | String | Delivery mode | T_MODE_DELIVRANCE.LIB_MODE_DELIVRANCE |
data[].commercialDuration | CommercialDurationResponse | Commercial duration information | T_PRODUIT fields mapping |
Field | Type | Description | Database Source |
---|---|---|---|
catalogTopicId | Int | Catalog topic identifier | T_THEME.ID_THEME_MVS |
order | Int | Display order of the topic relation | T_PRODUIT_THEME business logic |
relationType | String | Type of relation (Main, Secondary, etc.) | T_PRODUIT_THEME business logic mapping |
Field | Type | Description | Database Source |
---|---|---|---|
days | String | Duration in days | T_PRODUIT.DUREE_COM_J |
forcedValues | Boolean | Are commercial duration values forced | T_PRODUIT.DUREE_COM_CAST |
hours | String | Duration in hours | T_PRODUIT.DUREE_COM_H |
minutes | String | Duration in minutes | T_PRODUIT.DUREE_COM_M |
remoteActivityIncluded | Boolean | Is remote activity included in commercial duration | T_PRODUIT.DUREE_COM_ACTIVITE_CMPL |
Field | Type | Description | Database Source |
---|---|---|---|
id | Int | Formula identifier | T_CHAINAGE_PRODUIT.ID_CHAINAGE_PRODUIT |
label | String | Formula display name | T_CHAINAGE_PRODUIT.LIB_CODE_FORMULE |
modules | Array[ModuleResponse] | Formula modules | P_API_GET_FORMULA → T_CHAINAGE |
modules[].code | String | Module code (conditional: MODULE_GENERIQUE.CODE_MODULE if TOP_PRODUIT=0, else T_MODULE_PRODUIT.CODE_PRODUIT) | T_MODULE_GENERIQUE.CODE_MODULE | T_MODULE_PRODUIT.CODE_PRODUIT |
modules[].delayInDay | Decimal | Module delay in days (conditional: T_MODULE.DUREE_JOURS if TOP_PRODUIT=0, else T_MODULE_PRODUIT.DUREE_JOURS) | T_MODULE.DUREE_JOURS | T_MODULE_PRODUIT.DUREE_JOURS |
modules[].delayInHour | Decimal | Module delay in hours (conditional: T_MODULE.DUREE_HEURES if TOP_PRODUIT=0, else T_MODULE_PRODUIT.DUREE_HEURES) | T_MODULE.DUREE_HEURES | T_MODULE_PRODUIT.DUREE_HEURES |
modules[].delayInMinute | Int | Module delay in minutes (conditional: T_MODULE.DUREE_SEC/60 if TOP_PRODUIT=0, else T_MODULE_PRODUIT.DUREE_MINUTES) | T_MODULE.DUREE_SEC/60 | T_MODULE_PRODUIT.DUREE_MINUTES |
modules[].deliveryMode | String | Module delivery mode (conditional: T_MODULE_MODE_DELIVRANCE.LIB_MODE_DELIVRANCE if TOP_PRODUIT=0, else T_MODULE_PRODUIT.LIB_MODE_DELIVRANCE) | T_MODULE_MODE_DELIVRANCE.LIB_MODE_DELIVRANCE | T_MODULE_PRODUIT.LIB_MODE_DELIVRANCE |
modules[].id | Int | Module identifier (conditional: T_MODULE.ID_MODULE if TOP_PRODUIT=0, else T_MODULE_PRODUIT.ID_PRODUIT) | T_MODULE.ID_MODULE | T_MODULE_PRODUIT.ID_PRODUIT |
modules[].isProduct | Boolean | Is module a product (determines conditional field logic) | T_CHAINAGE.TOP_PRODUIT |
modules[].label | String | Module display name (conditional: T_MODULE_GENERIQUE.LIB_MODULE if TOP_PRODUIT=0, else T_MODULE_PRODUIT.TITRE) | T_MODULE_GENERIQUE.LIB_MODULE | T_MODULE_PRODUIT.TITRE |
modules[].optional | Boolean | Is module optional | T_CHAINAGE.OPTIONNEL |
modules[].order | Int | Module order in formula | T_CHAINAGE.NUM_ORDRE |
Field | Type | Description | Database Source |
---|---|---|---|
id | Int | Level identifier | T_NIVEAU.ID_NIVEAU |
label | String | Level display name | T_NIVEAU.LIB_NIVEAU |
Field | Type | Description | Database Source |
---|---|---|---|
applicationProcedure | String | Application procedure (optional, only if not empty) | T_NOTICE.MODALITE_APPLICATION_HTML |
bonus | String | Bonus information | T_NOTICE.BONUS_HTML |
certificationTitleOptionalOrIncluded | String | Certification title information | T_NOTICE.TITRE_CERTIF_OPTION_OU_INCLUSE_HTML |
cpfPopup | String | CPF popup content | T_NOTICE.POP_UP_CPF_HTML |
cpfText | String | CPF specific text | T_NOTICE.CPF_TEXTE_HTML |
evaluation | String | Evaluation method | T_NOTICE.EVALUATION_HTML |
expectedResults | String | Expected results | T_NOTICE.RESULTATS_ATTENDUS_HTML |
financing | String | Financing information | T_NOTICE.FINANCEMENT_HTML |
financingAssistance | String | Financing assistance information | T_NOTICE.AIDES_AU_FINANCEMENT_HTML |
firstMinute | String | First minute content | T_NOTICE.LA_PREMIERE_MINUTE_HTML |
forWho | String | Target audience description | T_NOTICE.POUR_QUI_HTML |
highlights | String | Program highlights | T_NOTICE.LES_PLUS_POINTS_FORTS_HTML |
imageProgramDesktop | String | Desktop program image URL | T_NOTICE.IMAGE_PROGRAMME_DESKTOP_HTML |
imageProgramMobile | String | Mobile program image URL | T_NOTICE.IMAGE_PROGRAMME_MOBILE_HTML |
imageSocialNetworks | String | Social networks image URL | T_NOTICE.IMAGE_RESEAUX_SOCIAUX |
introduction | String | Introduction text | T_NOTICE.INTRODUCTION_HTML |
introductionTitle | String | Introduction title (optional, only if not empty) | T_NOTICE.TITRE_INTRODUCTION |
morePrecisely | String | More precise information | T_NOTICE.PLUS_PRECISEMENT_HTML |
objective | String | Training objectives | T_NOTICE.OBJECTIFS_HTML |
participantBenefits | String | Participant benefits | T_NOTICE.BENEFICES_PARTICIPANT_HTML |
pedagogy | String | Pedagogy information | T_NOTICE.DISPOSITIF_PEDAGOGIQUE_HTML |
prerequisite | String | Prerequisites | T_NOTICE.PRE_REQUIS_HTML |
program | String | Program details | T_NOTICE.PROGRAMME_HTML |
programContent | ProgramContentResponse | Program content details | T_NOTICE structured program fields |
programContent.after | ContentSectionResponse | After program content | T_NOTICE.TITRE_APRES_HTML + TEXTE_APRES_HTML |
programContent.after.text | String | After section text | T_NOTICE.TEXTE_APRES_HTML |
programContent.after.title | String | After section title | T_NOTICE.TITRE_APRES_HTML |
programContent.before | ContentSectionResponse | Before program content | T_NOTICE.TITRE_AVANT_HTML + TEXTE_AVANT_HTML |
programContent.before.text | String | Before section text | T_NOTICE.TEXTE_AVANT_HTML |
programContent.before.title | String | Before section title | T_NOTICE.TITRE_AVANT_HTML |
programContent.duringTitle | String | During program title | T_NOTICE.TITRE_PENDANT_HTML |
programContent.parts | Array[String] | Program parts (P1-P10) | T_NOTICE.TITRE_P1_HTML...TITRE_P10_HTML aggregated |
programContent.upstream | String | Upstream content | T_NOTICE.EN_AMONT_HTML |
rncpText | String | RNCP specific text | T_NOTICE.RNCP_TEXTE_HTML |
theMostPartnerText | String | Partner specific text | T_NOTICE.TEXTE_PARTENAIRE_HTML |
video | String | Video content | T_NOTICE.VIDEO_HTML |
visioTrainingProcedure | String | Visio training procedure | T_NOTICE.MODALITE_VISIO_FORMATION_HTML |
Field | Type | Description | Database Source |
---|---|---|---|
id | Int | Range identifier | T_GAMME.ID_GAMME |
label | String | Range display name | T_GAMME.LIB_GAMME |
Field | Type | Description | Database Source |
---|---|---|---|
lengthMaximum | Int | Maximum title length | T_TYPE_TITRE.LONGUEUR_MAX |
text | String | Title text content | T_TITRE.TITRE |
type | String | Title type | T_TYPE_TITRE.LIB_TYPE_TITRE |
{
"data": [
{
"productCode": "61072",
"yearlyProductCode": "202561072",
"offerYear": 2025,
"title": "Management : les fondamentaux",
"evolutionType": "Evolution",
"cpf": true,
"rsCode": "RS001",
"rncpCode": "RNCP12345",
"cpfCode": "CPF789",
"trainingMethod": "Présentiel",
"familyOfferId": 10,
"moduleDuration": "2 jours",
"languages": ["Français"],
"cities": ["Paris", "Lyon"],
"availableCpfCities": ["Paris"],
"level": {
"id": 1,
"label": "Découverte"
},
"professionalChallengesId": 5,
"bestSeller": true,
"picto4Real": false,
"titles": [
{
"type": "Main",
"text": "Management : les fondamentaux",
"lengthMaximum": 50
}
],
"formula": [
{
"id": 1,
"label": "Formule standard",
"modules": [
{
"id": 101,
"code": "MOD1",
"order": 1,
"optional": false,
"isProduct": true,
"label": "Introduction au management",
"delayInDay": 0,
"delayInHour": 0,
"delayInMinute": 0,
"deliveryMode": "Présentiel"
}
]
}
],
"catalogTopicRelations": [
{
"catalogTopicId": 15,
"relationType": "Main",
"order": 1
}
],
"relatedProducts": [
{
"relatedProductCode": "61073",
"type": "After",
"order": 1
}
],
"range": {
"id": 5,
"label": "Management"
},
"price": 1350.0,
"iPackPrice": 1200.0,
"notice": {
"introductionTitle": "Une formation pour découvrir le management",
"introduction": "Cette formation vous permet de...",
"forWho": "Managers débutants",
"applicationProcedure": "Inscription directe",
"prerequisite": "Aucun",
"visioTrainingProcedure": "Via Teams",
"objective": "Acquérir les bases du management",
"evaluation": "QCM final",
"programContent": {
"before": {
"title": "Avant la formation",
"text": "Autodiagnostic"
},
"duringTitle": "Pendant la formation",
"parts": ["Module 1", "Module 2"],
"after": {
"title": "Après la formation",
"text": "Suivi individualisé"
},
"upstream": "Préparation en amont"
},
"participantBenefits": "Certification incluse",
"program": "Programme détaillé",
"highlights": "Points forts",
"morePrecisely": "Plus précisément",
"firstMinute": "Première minute",
"cpfText": "Éligible CPF",
"rncpText": "Certification RNCP",
"expectedResults": "Résultats attendus",
"theMostPartnerText": "Texte partenaire",
"financingAssistance": "Aide au financement",
"certificationTitleOptionalOrIncluded": "Certification incluse",
"bonus": "Bonus formation",
"video": "Vidéo présentation",
"financing": "Financement",
"cpfPopup": "Popup CPF",
"imageProgramDesktop": "image-desktop.jpg",
"imageProgramMobile": "image-mobile.jpg",
"imageSocialNetworks": "image-social.jpg",
"pedagogy": "Pédagogie active"
},
"certificationInclude": true,
"internationalProduct": false,
"partners": ["Partenaire A", "Partenaire B"],
"certification": "Certification Management",
"certifier": "Cegos",
"jobSheetTitle": "Fiche métier Manager",
"jobSheetUrl": "https://fiche-metier.cegos.fr/manager",
"modalityTitle": "Formation présentielle",
"marketingTitle": "Formation Management Premium",
"deliveryMode": "Présentiel",
"commercialDuration": {
"days": "2",
"hours": "14",
"minutes": "0",
"forcedValues": false,
"remoteActivityIncluded": true
}
}
],
"pageNumber": 1,
"pageSize": 100,
"totalItems": 1247,
"totalPages": 13
}
/v1/Products/{yearlyProductCode}
/v1/Products/{yearlyProductCode}
Catalog Database
P_API_GET_PRODUCTS (filtered by specific product), P_API_GET_FORMULA (product formulas/modules), P_API_GET_RELATED_PRODUCTS (cross-selling products), P_API_GET_TITLES (product titles), P_API_GET_NOTICES (detailed product content)
T_PRODUIT, T_OFFRE, T_TITRE, T_NIVEAU, T_GAMME, T_PARTENAIRE, T_PRIX, T_CERTIFICATION, T_DISPOSITIF_FORMATION, T_MODE_DELIVRANCE, T_CERTIFICATEUR, T_TYPE_EVOLUTION, T_FAMILLE_OFFRE, T_NOTICE, T_CHAINAGE_PRODUIT, T_CHAINAGE, T_MODULE, T_MODULE_GENERIQUE, T_TYPE_MODULE, T_PRESTATION_COMPLEMENTAIRE, T_TYPE_PRESTATION_COMPLEMENTAIRE, T_PRODUIT_THEME, T_THEME, T_CATALOGUE, T_PRODUIT_LANGUE, T_PRODUIT_GAMME
Field | Type | Description | Database Source |
---|---|---|---|
data | ProductDetailsResponse | Product details | SessionService aggregation |
data[].productCode | String | Product identifier code | T_PRODUIT.CODE_PRODUIT |
data[].yearlyProductCode | String | Yearly product identifier (computed: OfferYear + ProductCode) | T_OFFRE.LIB_OFFRE + T_PRODUIT.CODE_PRODUIT |
data[].offerYear | Int | Product offer year | T_OFFRE.LIB_OFFRE |
data[].title | String | Product title | T_TITRE.TITRE |
data[].evolutionType | String | Product evolution type | T_TYPE_EVOLUTION.LIB_TYPE_EVOLUTION |
data[].cpf | Boolean | Eligible for CPF (Compte Personnel de Formation) | T_PRODUIT.TOP_ELIGIBLE_CPF |
data[].rsCode | String | RS (Répertoire Spécifique) code | T_PRODUIT.CODE_RS |
data[].rncpCode | String | RNCP (Répertoire National des Certifications Professionnelles) code | T_PRODUIT.CODE_RNCP |
data[].cpfCode | String | CPF specific code | T_PRODUIT.CODE_CPF |
data[].trainingMethod | String | Training method label | T_DISPOSITIF_FORMATION.LIB_DISPOSITIF_FORMATION |
data[].familyOfferId | Int | Family offer identifier | T_PRODUIT.ID_FAMILLE_OFFRE |
data[].moduleDuration | String | Module duration formatted as string | dbo.Convert_Sec_JHM(T_PRODUIT.DUREE_DIST_INDIV_SEC) |
data[].languages | Array[String] | Available delivery languages | T_PRODUIT_LANGUE via LanguageRepository.GetDeliveranceLanguagesAsync() |
data[].cities | Array[String] | Available session cities | T_SESSION via SessionService |
data[].availableCpfCities | Array[String] | CPF-eligible session cities | T_SESSION with CPF filtering |
data[].level | LevelResponse | Product level information | T_NIVEAU via level mapping |
data[].professionalChallengesId | Int | Professional challenges identifier | T_PRODUIT.ID_ENJEU |
data[].bestSeller | Boolean | Is product a best seller | T_PRODUIT.TOP_BEST_SELLER |
data[].picto4Real | Boolean | 4Real picto indicator | T_PRODUIT.PICTO_4REAL |
data[].partners | Array[String] | Partners | T_PARTENAIRE.LIB_PARTENAIRE |
data[].range | RangeResponse | Product range information | T_GAMME via range mapping |
data[].price | Decimal | Product price | T_PRIX.PRIX via PriceRepository.GetAllAsync() |
data[].iPackPrice | Decimal | iPack price (package price) | T_PRIX.PRIX_IPACK via PriceRepository.GetAllAsync() |
data[].noticeUrl | String | URL to product notice page | Generated: https://www.cegos.fr/{productCode} |
data[].noticeUrlPdf | String | URL to product notice PDF | Generated: https://static.cegos.fr/pdf/{offerYear}_{productCode.PadLeft(4, '0')}.pdf |
data[].certificationInclude | Boolean | Is certification included | T_PRODUIT.TOP_CERTIF_INCLUSE |
data[].internationalProduct | Boolean | Is international product | T_PRODUIT.TOP_PRODUIT_INTERNATIONAL |
data[].deliveryMode | String | Product delivery mode | T_MODE_DELIVRANCE.LIB_MODE_DELIVRANCE |
data[].commercialDuration | CommercialDurationResponse | Commercial duration breakdown | T_PRODUIT.DUREE_COM_J/H/M/CAST/ACTIVITE_CMPL fields |
data[].notice | NoticeResponse | Detailed product notice content (only included when hydrate=true) | T_NOTICE via NoticeService, mapped through MapDetails() |
data[].relatedProducts | Array[RelatedProductResponse] | Related products for cross-selling (only included when hydrate=true) | SessionService.GetRelatedProductsAsync() with YearlyProductCode grouping |
data[].catalogTopicRelations | Array[CatalogTopicRelationResponse] | Catalog topic relationships (only included when hydrate=true) | Product.CatalogTopicRelations with RelationType enum mapping |
data[].titles | Array[TitleResponse] | Product titles with type and length constraints (only included when hydrate=true) | TitleService.GetAllAsync() with YearlyProductCode grouping |
data[].formula | Array[FormulaResponse] | Product formulas and modules (only included when hydrate=true) | FormulaService.GetAllAsync() with YearlyProductCode grouping |
Field | Type | Description | Database Source |
---|---|---|---|
catalogTopicId | Int | Catalog topic identifier | T_PRODUIT_THEME.ID_THEME_MVS |
order | Int | Relation order | Business logic based on relation type |
relationType | String | Relation type (Main, Secondary, etc.) | T_PRODUIT_THEME.ID_TYPE_RATTACHEMENT with enum mapping |
Field | Type | Description | Database Source |
---|---|---|---|
id | Int | Formula identifier | T_CHAINAGE.ID_CHAINAGE |
label | String | Formula label | T_CHAINAGE.LIB_CHAINAGE |
modules[].code | String | Module code | T_MODULE.CODE_MODULE |
modules[].delayInDay | Int | Delay in days | T_CHAINAGE_PRODUIT.DELAI_J |
modules[].delayInHour | Int | Delay in hours | T_CHAINAGE_PRODUIT.DELAI_H |
modules[].delayInMinute | Int | Delay in minutes | T_CHAINAGE_PRODUIT.DELAI_M |
modules[].deliveryMode | String | Module delivery mode | T_MODE_DELIVRANCE.LIB_MODE_DELIVRANCE |
modules[].id | Int | Module identifier | T_MODULE.ID_MODULE |
modules[].isProduct | Boolean | Is module a product | T_CHAINAGE.TOP_PRODUIT |
modules[].label | String | Module label | T_MODULE.LIB_MODULE |
modules[].optional | Boolean | Is module optional | T_CHAINAGE.OPTIONNEL |
modules[].order | Int | Module order in sequence | T_CHAINAGE_PRODUIT.ORDRE |
Field | Type | Description | Database Source |
---|---|---|---|
applicationProcedure | String | Application procedure details | T_NOTICE.MODALITE_INSCRIPTION_HTML |
bonus | String | Bonus information | T_NOTICE.BONUS_HTML |
certificationTitleOptionalOrIncluded | String | Certification title inclusion information | T_NOTICE.TITRE_CERTIFICATION_OPTION_OU_INCLUS_HTML |
cpfPopup | String | CPF popup content | T_NOTICE.CPF_POPUP_HTML |
cpfText | String | CPF specific text | T_NOTICE.TEXTE_CPF_HTML |
evaluation | String | Evaluation methods | T_NOTICE.EVALUATION_HTML |
expectedResults | String | Expected results | T_NOTICE.RESULTATS_ATTENDUS_HTML |
financing | String | Financing options | T_NOTICE.FINANCEMENT_HTML |
financingAssistance | String | Financing assistance information | T_NOTICE.AIDE_FINANCEMENT_HTML |
firstMinute | String | First minute information | T_NOTICE.PREMIERE_MINUTE_HTML |
forWho | String | Target audience description | T_NOTICE.POUR_QUI_HTML |
highlights | String | Program highlights | T_NOTICE.POINTS_FORTS_HTML |
imageProgramDesktop | String | Desktop program image URL | T_NOTICE.IMAGE_PROGRAMME_DESKTOP_HTML |
imageProgramMobile | String | Mobile program image URL | T_NOTICE.IMAGE_PROGRAMME_MOBILE_HTML |
imageSocialNetworks | String | Social networks image URL | T_NOTICE.IMAGE_RESEAUX_SOCIAUX_HTML |
introduction | String | Notice introduction content | T_NOTICE.INTRODUCTION_HTML |
introductionTitle | String | Notice introduction title | T_NOTICE.TITRE_INTRODUCTION_HTML |
morePrecisely | String | More precise details | T_NOTICE.PLUS_PRECISEMENT_HTML |
objective | String | Training objectives | T_NOTICE.OBJECTIF_HTML |
participantBenefits | String | Benefits for participants | T_NOTICE.BENEFICE_PARTICIPANT_HTML |
pedagogy | String | Pedagogy information | T_NOTICE.PEDAGOGIE_HTML |
prerequisite | String | Prerequisites | T_NOTICE.PRE_REQUIS_HTML |
program | String | Program details | T_NOTICE.PROGRAMME_HTML |
programContent | ProgramContentResponse | Detailed program content structure | T_NOTICE various PROGRAMME fields |
programContent.after.text | String | After training content | T_NOTICE.PROGRAMME_APRES_HTML |
programContent.after.title | String | After training title | T_NOTICE.PROGRAMME_APRES_TITRE_HTML |
programContent.before.text | String | Before training content | T_NOTICE.PROGRAMME_AVANT_HTML |
programContent.before.title | String | Before training title | T_NOTICE.PROGRAMME_AVANT_TITRE_HTML |
programContent.downstream | String | Downstream program information | T_NOTICE.PROGRAMME_AVAL_HTML |
programContent.duringTitle | String | During training title | T_NOTICE.PROGRAMME_PENDANT_TITRE_HTML |
programContent.parts | Array[String] | Training program parts | T_NOTICE.PROGRAMME_PENDANT_HTML (parsed as array) |
programContent.upstream | String | Upstream program information | T_NOTICE.PROGRAMME_AMONT_HTML |
rncpText | String | RNCP specific text | T_NOTICE.TEXTE_RNCP_HTML |
theMostPartnerText | String | Partner specific text | T_NOTICE.TEXTE_LE_PLUS_PARTENAIRE_HTML |
video | String | Video URL or information | T_NOTICE.VIDEO_HTML |
visioTrainingProcedure | String | Visio training procedure | T_NOTICE.MODALITE_VISIO_HTML |
Field | Type | Description | Database Source |
---|---|---|---|
lengthMaximum | Int | Maximum length for the title | Business rule based on title type |
text | String | Title text content | T_TITRE.TITRE |
type | String | Title type (e.g., TITRE) | T_TYPE_TITRE.LIB_TYPE_TITRE |
{
"data": {
"productCode": "38",
"yearlyProductCode": "202500038",
"offerYear": 2025,
"title": "Pratique de la consolidation des comptes - Niv. 1",
"evolutionType": "Reconduit",
"cpf": false,
"trainingMethod": "Stage",
"familyOfferId": 1,
"languages": ["Français"],
"cities": ["A DISTANCE", "PARIS"],
"availableCpfCities": [],
"level": {
"id": 1,
"label": "Fondamental"
},
"professionalChallengesId": 3,
"bestSeller": false,
"picto4Real": true,
"titles": [
{
"type": "BALISE TITRE",
"text": "Formation consolidation des comptes - Cegos",
"lengthMaximum": 128
},
{
"type": "TITRE",
"text": "Pratique de la consolidation des comptes - Niv. 1",
"lengthMaximum": 256
},
{
"type": "SOUS TITRE",
"text": "Produire et présenter les comptes consolidés",
"lengthMaximum": 256
}
],
"formula": [
{
"id": 22666,
"label": "F1",
"modules": [
{
"id": 32428,
"code": "P01",
"order": 1,
"optional": false,
"isProduct": false,
"label": "Partie 1",
"delayInDay": 3,
"delayInHour": 21,
"delayInMinute": 1260,
"deliveryMode": "Présentiel"
},
{
"id": 21280,
"code": "PRAC102_FR",
"order": 2,
"optional": false,
"isProduct": true,
"label": "Practips générique : un défi par semaine pendant 7 semaines (1er pas : réservez 30 minutes…)",
"delayInDay": 0.07,
"delayInHour": 0.5,
"delayInMinute": 30,
"deliveryMode": "A distance"
},
{
"id": 13949,
"code": "EXP030_FR",
"order": 3,
"optional": false,
"isProduct": true,
"label": "Les états financiers en normes IFRS",
"delayInDay": 0.04,
"delayInHour": 0.3,
"delayInMinute": 15,
"deliveryMode": "A distance"
}
]
}
],
"catalogTopicRelations": [
{
"catalogTopicId": 928100,
"relationType": "Main",
"order": 4
}
],
"partners": ["Cegos"],
"relatedProducts": [
{
"relatedProductCode": "6464",
"type": "After",
"order": 1
},
{
"relatedProductCode": "7833",
"type": "After",
"order": 2
}
],
"range": {
"id": 219,
"label": "Comptabilité"
},
"price": 2250,
"iPackPrice": 5850,
"notice": {
"introductionTitle": "Formation consolidation des comptes",
"introduction": "Cette formation vous permet de maîtriser la consolidation...",
"forWho": "Consolideurs et responsables comptables",
"applicationProcedure": "Inscription directe",
"prerequisite": "Aucun",
"visioTrainingProcedure": "Via Teams",
"objective": "Maîtriser la consolidation des comptes",
"evaluation": "QCM final et mise en situation",
"programContent": {
"before": {
"title": "Avant la formation",
"text": "Questionnaire de positionnement"
},
"duringTitle": "Pendant la formation",
"parts": ["Module 1: Réglementation", "Module 2: Processus"],
"after": {
"title": "Après la formation",
"text": "Programme de renforcement"
},
"upstream": "Préparation en amont"
},
"participantBenefits": "Supports pédagogiques inclus",
"program": "Programme détaillé disponible",
"highlights": "Formation adaptée normes françaises et IFRS",
"morePrecisely": "Consolidation réalisée durant la formation",
"firstMinute": "Présentation des objectifs",
"cpfText": "Éligible CPF sous conditions",
"rncpText": "Certification professionnelle",
"expectedResults": "Autonomie en consolidation",
"theMostPartnerText": "Expertise Cegos",
"financingAssistance": "Prise en charge OPCO possible",
"certificationTitleOptionalOrIncluded": "Certification non incluse",
"bonus": "Accès ressources complémentaires",
"video": "Vidéo présentation disponible",
"financing": "Financement entreprise ou OPCO",
"cpfPopup": "Plus d'infos sur le CPF",
"imageProgramDesktop": "image-consolidation-desktop.jpg",
"imageProgramMobile": "image-consolidation-mobile.jpg",
"imageSocialNetworks": "image-consolidation-social.jpg",
"pedagogy": "Pédagogie active et participative"
},
"noticeUrl": "https://www.cegos.fr/38",
"noticeUrlPdf": "https://static.cegos.fr/pdf/2025_0038.pdf",
"certificationInclude": false,
"internationalProduct": false,
"deliveryMode": "Mixte",
"commercialDuration": {
"days": "3",
"hours": "21",
"minutes": "0",
"forcedValues": false,
"remoteActivityIncluded": true
}
}
}
/v1/Referentials/centers
/v1/Referentials/centers
HABILITATIONS (Authorizations DB - External dependency)
Direct SQL query (no stored procedure)
T_CENTRE, T_ADRESSE_GS, T_PAYS, T_SALLE, T_BERSP, T_BERSV, T_BERS, T_PARTIE_DE_SESSION_DE_STAGE, T_SESSION, T_PARTIE_STAGE, T_FORMULE_STAGE, T_CATALOGUE_FORMULE_STAGE, T_CATALOGUE
Field | Type | Description | Database Source |
---|---|---|---|
data[].code | String? | Center unique code identifier (optional, only if not null) | T_CENTRE.ADV_ID_CENTRE |
data[].name | String? | Center name (optional, only if not null) | T_CENTRE.LIB_CENTRE |
data[].address | Array[String] | Address lines array (combines Address1 and Address2 if not empty) | T_ADRESSE_GS.ADRESSE1 + T_ADRESSE_GS.ADRESSE2 (filtered non-empty) |
data[].city | String? | Center city (optional, only if not null) | T_ADRESSE_GS.VILLE |
data[].postalCode | String? | Center postal code (optional, only if not null) | T_ADRESSE_GS.CODE_POSTALE |
data[].country | String? | Center country (optional, only if not null) | T_PAYS.LIB_PAYS |
{
"data": [
{
"code": "679",
"name": "ib-Cegos Nantes",
"address": [
"2 Impasse Augustin Fresnel - Imm Atalante 2"
],
"city": "ST HERBLAIN",
"postalCode": "44800",
"country": "FRANCE"
},
{
"code": "AJ4",
"name": "GARE SNCF TOURS",
"address": [
"Place du Général Leclerc",
"Porte 11"
],
"city": "TOURS",
"postalCode": "37000",
"country": "FRANCE"
}
]
}
/v1/Sessions
/v1/Sessions
Offre_Vente
P_API_GET_SESSION_BY_PRODUCT
T_SESSION, T_PRODUIT, T_SESSION_COMPOSANT, T_COMPOSANT, T_PRIX_PAYS, T_VILLE, T_STATUT_SESSION, T_GAMME
Field | Type | Description | Database Source |
---|---|---|---|
pageNumber | Int | Current page number (default: 1) | Controller logic |
pageSize | Int | Items per page (fixed: 100) | Controller logic |
totalItems | Int | Total number of sessions | data.Count |
totalPages | Int | Total number of pages | Math.Ceiling(totalItems / 100) |
data | Array[SessionResponse] | Array of session details | SessionService aggregation |
data[].yearlySessionCode | String | Unique session identifier combining year, product code and session number | T_PRODUIT.ANNEE_OFFRE + T_PRODUIT.CODE_PRODUIT + T_SESSION.NUM_SESSION |
data[].sessionNumber | Int | Session number within the product | T_SESSION.NUM_SESSION |
data[].yearlyProductCode | String | Yearly product code | T_PRODUIT.ANNEE_OFFRE + T_PRODUIT.CODE_PRODUIT |
data[].productCode | String | Product code identifier | T_PRODUIT.CODE_PRODUIT |
data[].price | Double | Session price | T_PRIX_PAYS.PRIX |
data[].componentCount | Int? | Number of components in the session (optional, only if not null) | COUNT(T_SESSION_COMPOSANT.ID_COMPOSANT) excluding 'Visio formation' |
data[].interDiscountPrice | Double? | Inter-enterprise discount price (optional, only if not null) | Calculated inter-discount pricing logic |
data[].startDate | DateTime | Session start date and time | MIN(T_SESSION_COMPOSANT.DATE_DEBUT) via sessions_datemin CTE |
data[].endDate | DateTime | Session end date and time | MAX(T_SESSION_COMPOSANT.DATE_FIN) via sessions_datemax CTE |
data[].durationInDays | Double | Session duration in days (calculated from hours) | SUM(T_COMPOSANT.DUREE) / 60 / 60 / 7 with RoundHelper.AdjustDuration |
data[].guaranteedSession | Boolean | Whether the session is guaranteed to run | T_SESSION.TOP_SESSION_GARANTIE |
data[].isRemote | Boolean | Whether the session is remote/online | T_VILLE.LIB_VILLE is 'A distance' or null |
data[].city | String? | Session city name (optional, only if not empty) | T_VILLE.LIB_VILLE (transformed to 'A DISTANCE' if remote) |
data[].isFull | Boolean | Whether the session is full (calculated dynamically) | Business logic: RegistrationCount >= LimitMax for specific conditions |
data[].isLastPlaceAvailable | Boolean | Whether last place is available (calculated dynamically) | Business logic: LimitMax - 4 < RegistrationCount < LimitMax for non-Paris/non-remote |
data[].isHighProbability | Boolean | Whether session has high probability to run (calculated dynamically) | Business logic: RegistrationCount >= LimitMin for sessions |
data[].registrationCount | Int? | Number of current registrations (optional, only if not null) | T_SESSION.NB_INSCRIPTIONS |
data[].limitMin | Int? | Minimum participants required (optional, only if not null) | T_SESSION.SEUIL_MINI |
data[].limitMax | Int? | Maximum participants allowed (optional, only if not null) | T_SESSION.SEUIL_MAXI |
data[].status | SessionStatusResponse | Session status enum (Open=0, Valid=100, Invited=200, Cancel=900) | T_SESSION.ID_STATUT_SESSION mapped to enum |
data[].topCpf | Boolean? | Whether session is CPF eligible (optional, only if not null) | T_SESSION.TOP_CPF |
data[].parts | Array[SessionPartResponse] | Session parts/components with detailed scheduling (only if hydrate=true) | SessionPartService.GetSessionPartAsync() + CenterService mapping |
Field | Type | Description | Database Source |
---|---|---|---|
centerId | String? | Center identifier for this part (optional, only if not null) | CenterService.GetAllCenterBySessionsAsync() mapping |
durationInDay | Double | Part duration in days | T_COMPOSANT.DUREE converted to days |
endDate | DateTime? | Part end date (optional, only if not null) | T_SESSION_COMPOSANT.DATE_FIN |
endTimeHour | Int? | Part end hour (optional, only if not null) | T_SESSION_COMPOSANT end time extraction |
endTimeMinute | Int? | Part end minute (optional, only if not null) | T_SESSION_COMPOSANT end time extraction |
isRemote | Boolean | Whether this part is remote | T_SESSION_COMPOSANT remote logic |
number | Int | Part number/sequence | T_SESSION_COMPOSANT part numbering |
startDate | DateTime? | Part start date (optional, only if not null) | T_SESSION_COMPOSANT.DATE_DEBUT |
startTimeHour | Int? | Part start hour (optional, only if not null) | T_SESSION_COMPOSANT start time extraction |
startTimeMinute | Int? | Part start minute (optional, only if not null) | T_SESSION_COMPOSANT start time extraction |
{
"pageNumber": 1,
"pageSize": 100,
"totalItems": 2847,
"totalPages": 29,
"data": [
{
"yearlySessionCode": "2025-61072-PAR-001",
"sessionNumber": 1,
"yearlyProductCode": "2025-61072",
"productCode": "61072",
"price": 1350.00,
"componentCount": 2,
"interDiscountPrice": 1200.00,
"startDate": "2025-03-15T09:00:00",
"endDate": "2025-03-16T17:00:00",
"durationInDays": 2.0,
"guaranteedSession": true,
"isRemote": false,
"city": "Paris",
"isFull": false,
"isLastPlaceAvailable": false,
"isHighProbability": true,
"registrationCount": 8,
"limitMin": 5,
"limitMax": 12,
"status": "Open",
"topCpf": true,
"parts": [
{
"isRemote": false,
"startTimeHour": 9,
"startTimeMinute": 0,
"endTimeHour": 17,
"endTimeMinute": 0,
"startDate": "2025-03-15T09:00:00",
"endDate": "2025-03-15T17:00:00",
"durationInDay": 1.0,
"number": 1,
"centerId": "PAR-001"
},
{
"isRemote": false,
"startTimeHour": 9,
"startTimeMinute": 0,
"endTimeHour": 17,
"endTimeMinute": 0,
"startDate": "2025-03-16T09:00:00",
"endDate": "2025-03-16T17:00:00",
"durationInDay": 1.0,
"number": 2,
"centerId": "PAR-001"
}
]
}
]
}
/v1/Sessions/{yearlySessionCode}
/v1/Sessions/{yearlySessionCode}
Offre_Vente
P_API_GET_SESSION_BY_PRODUCT
T_SESSION, T_PRODUIT, T_SESSION_COMPOSANT, T_COMPOSANT, T_STATUT_SESSION, T_PRIX_PAYS, T_GAMME, T_VILLE
Field | Type | Description | Database Source |
---|---|---|---|
yearlySessionCode | String | Yearly session code identifier (format: YYYY-NNNNN-XXX - calculated from ANNEE_OFFRE + CODE_PRODUIT + NUM_SESSION) | T_PRODUIT.ANNEE_OFFRE + T_PRODUIT.CODE_PRODUIT + T_SESSION.NUM_SESSION |
sessionNumber | Integer | Session number within the year | T_SESSION.NUM_SESSION |
yearlyProductCode | String | Associated product yearly code | T_PRODUIT.ANNEE_OFFRE + T_PRODUIT.CODE_PRODUIT |
productCode | String | Base product code without year | T_PRODUIT.CODE_PRODUIT |
price | Decimal | Session price in specified currency | T_PRIX_PAYS.PRIX |
componentCount | Integer | Number of session components/parts (excluding 'Visio formation' components) | COUNT(T_SESSION_COMPOSANT) where T_COMPOSANT.FAMILLE_OFFRE <> 'Visio formation' |
interDiscountPrice | Decimal | Inter-company discount price (calculated from base price) | Calculated from T_PRIX_PAYS.PRIX |
startDate | DateTime | Session start date (minimum date from all session components) | MIN(T_SESSION_COMPOSANT.DATE_DEBUT) |
endDate | DateTime | Session end date (maximum date from all session components) | MAX(T_SESSION_COMPOSANT.DATE_FIN) |
durationInDays | Integer | Total session duration in days (sum of component durations) | SUM(T_COMPOSANT.DUREE) from session components |
guaranteedSession | Boolean | Whether the session is guaranteed to run | T_SESSION.TOP_SESSION_GARANTIE |
isRemote | Boolean | Whether the session is conducted remotely (derived from session data) | Calculated from session location and delivery mode |
city | String | Session location city name | T_VILLE.LIB_VILLE |
isFull | Boolean | Whether the session is full (calculated dynamically) | Business logic: T_SESSION.NB_INSCRIPTIONS >= T_SESSION.SEUIL_MAXI |
isLastPlaceAvailable | Boolean | Whether only the last place is available | Business logic: T_SESSION.NB_INSCRIPTIONS == T_SESSION.SEUIL_MAXI - 1 |
isHighProbability | Boolean | Whether the session has high probability to run | Business logic based on T_SESSION.NB_INSCRIPTIONS vs T_SESSION.SEUIL_MINI |
registrationCount | Integer | Current number of registrations | T_SESSION.NB_INSCRIPTIONS |
limitMin | Integer | Minimum registrations required for the session to run | T_SESSION.SEUIL_MINI |
limitMax | Integer | Maximum registrations allowed | T_SESSION.SEUIL_MAXI |
status | String | Session status (Open, Closed, Cancelled, etc.) | T_STATUT_SESSION.LIB_STATUT_SESSION via T_SESSION.ID_STATUT_SESSION |
topCpf | Boolean | Whether the session is CPF (Compte Personnel de Formation) eligible | T_SESSION.TOP_CPF |
parts[] | Array | Array of session parts/components with detailed scheduling information | T_SESSION_COMPOSANT joined with T_COMPOSANT |
Field | Type | Description | Database Source |
---|---|---|---|
centerId | String | Training center identifier for this part (dynamically assigned via service layer) | CenterService.GetAllCenterBySessionsAsync() - matched by YearlySessionCode and part number, not directly from T_VILLE.CODE_VILLE |
durationInDay | Decimal | Part duration in days (can be fractional) | T_COMPOSANT.DUREE (component duration) |
endDate | DateTime | Part end date and time | T_SESSION_COMPOSANT.DATE_FIN |
endTimeHour | Integer | Part end hour (24-hour format, extracted from end datetime) | HOUR(T_SESSION_COMPOSANT.DATE_FIN) |
endTimeMinute | Integer | Part end minute (extracted from end datetime) | MINUTE(T_SESSION_COMPOSANT.DATE_FIN) |
isRemote | Boolean | Whether this specific part is conducted remotely | Derived from component delivery mode and location data |
number | Integer | Part sequence number for ordering | Component sequence from T_SESSION_COMPOSANT |
startDate | DateTime | Part start date and time | T_SESSION_COMPOSANT.DATE_DEBUT |
startTimeHour | Integer | Part start hour (24-hour format, extracted from start datetime) | HOUR(T_SESSION_COMPOSANT.DATE_DEBUT) |
startTimeMinute | Integer | Part start minute (extracted from start datetime) | MINUTE(T_SESSION_COMPOSANT.DATE_DEBUT) |
{
"data": {
"yearlySessionCode": "2025-61072-PAR-001",
"sessionNumber": 1,
"yearlyProductCode": "2025-61072",
"productCode": "61072",
"price": 1890.00,
"componentCount": 2,
"interDiscountPrice": 1701.00,
"startDate": "2025-09-15T09:00:00Z",
"endDate": "2025-09-16T17:30:00Z",
"durationInDays": 2,
"guaranteedSession": true,
"isRemote": false,
"city": "Paris",
"isFull": false,
"isLastPlaceAvailable": false,
"isHighProbability": true,
"registrationCount": 8,
"limitMin": 6,
"limitMax": 12,
"status": "Open",
"topCpf": true,
"parts": [
{
"isRemote": false,
"startTimeHour": 9,
"startTimeMinute": 0,
"endTimeHour": 17,
"endTimeMinute": 30,
"startDate": "2025-09-15T09:00:00Z",
"endDate": "2025-09-15T17:30:00Z",
"durationInDay": 1.0,
"number": 1,
"centerId": "PAR"
},
{
"isRemote": false,
"startTimeHour": 9,
"startTimeMinute": 0,
"endTimeHour": 17,
"endTimeMinute": 30,
"startDate": "2025-09-16T09:00:00Z",
"endDate": "2025-09-16T17:30:00Z",
"durationInDay": 1.0,
"number": 2,
"centerId": "PAR"
}
]
}
}