Cette documentation a pour but de fournir toutes les informations dont vous aurez besoin pour utiliser notre API. Les dates avec heure sont au format Y-m-d H:i:s, sans fuseau horaire : les horodatages techniques (created_at, updated_at, deleted_at et les autres champs en _at) sont en heure de Paris (Europe/Paris), les dates et heures saisies dans Dendreo (début d'une action de formation, par exemple) sont l'heure locale du centre de formation.
Chaque requête porte trois en-têtes :
Authorization : votre clé API, précédée de Bearer ;of : l'identifiant de votre compte, celui qui suit pro.dendreo.com/ dans l'adresse de votre espace ;Accept: application/json : sans lui, l'API répond avec un statut 406.curl "https://api.dendreo.com/v2/entreprises?per_page=1" \
-H "Authorization: Bearer {VOTRE_CLE_API}" \
-H "of: {votre_compte}" \
-H "Accept: application/json"
{
"data": [
{
"id": 42,
"raison_sociale": "Berger SAS",
"...": "..."
}
],
"links": {
"first": "https://api.dendreo.com/v2/entreprises?page=1&per_page=1",
"prev": null,
"next": "https://api.dendreo.com/v2/entreprises?page=2&per_page=1"
},
"meta": {
"current_page": 1,
"per_page": 1
}
}
Les requêtes POST et PATCH envoient leur body en JSON, avec un en-tête Content-Type: application/json en plus.
Pour authentifier les requêtes, incluez un en-tête Authorization avec la valeur "Bearer {VOTRE_CLE_API}" et un en-tête of avec l'identifiant de votre compte : celui qui suit pro.dendreo.com/ dans l'adresse de votre espace.
Dendreo vous permet de configurer plusieurs clés d'accès pour votre API depuis la page de configuration.
Cela peut vous être utile notamment si plusieurs entités et services utilisent votre API.
Si aucune clé API n'est transmise, l'API répond avec un statut 401 sous cette forme :
{
"error": "Unauthenticated."
}
Si la clé transmise est invalide ou révoquée, l'API répond avec un statut 401 sous une forme différente :
{
"status": "failure",
"errors": [
"..."
]
}
Si le header of est absent, l'API répond avec un statut 400 :
{
"code": 400,
"message": "Merci de renseigner le header \"of\" pour vos appels API."
}
Si le header of ne correspond à aucun organisme de formation, l'API répond avec un statut 404 :
{
"code": 404,
"message": "Aucun organisme de formation ne correspond au header \"of\" fourni."
}
Sur les requêtes GET, le champ include permet de charger des relations en plus de la ressource principale.
Exemple : ?include=commerciaux ou ?include=commerciaux,formateurs
Les valeurs autorisées sont listées dans le paramètre include de chaque endpoint. Une valeur non autorisée répond 400.
Sur les requêtes GET, le champ filter permet de filtrer les résultats selon des critères spécifiques. Les filtres suivent la spécification JSON API.
?filter[champ]=valeur
Recherche les enregistrements contenant la valeur fournie.
Exemple : ?filter[nom]=Jean trouvera "Jean Dupont", "Jean-Paul", etc.
Vous pouvez appliquer plusieurs filtres simultanément.
Exemple : ?filter[nom]=Jean&filter[statut]=actif
Les champs created_at et updated_at sont disponibles sur toutes les ressources qui possèdent des timestamps.
Recherche par préfixe sans opérateur :
?filter[created_at] = 2024-01
Avec opérateur préfixez la valeur avec >=, <=, >, <, = ou <> :
?filter[created_at] = >=2024-01-01
?filter[updated_at] = <=2025-01-01
Plage de dates passez un tableau de valeurs :
?filter[created_at][] = >=2024-01-01&filter[created_at][] = <=2024-12-31
Les valeurs suivantes sont automatiquement ignorées dans les filtres :
null"" (chaîne vide)[] (tableau vide)Les filtres peuvent être combinés avec les autres paramètres de requête :
?filter[nom]=Jean&include=commerciaux&per_page=25
Les filtres autorisés sont listés dans les paramètres filter[…] de chaque liste. Un filtre non autorisé répond 400.
Sur les requêtes GET, le champ sort trie la liste selon l'une des valeurs listées dans le paramètre sort de chaque liste. Préfixer la valeur par - inverse l'ordre. Une valeur non autorisée répond 400 :
?sort=-created_at
Les listes sont paginées par 15 résultats par défaut. Le paramètre per_page permet de choisir une autre taille de page, jusqu'à 100 résultats. Une valeur qui n'est pas un nombre entier positif est ignorée : la taille par défaut s'applique.
Les liens links.first, links.prev et links.next de la réponse reprennent les paramètres de votre requête (per_page, filter, sort, include) : suivez links.next jusqu'à ce qu'il vaille null pour parcourir tous les résultats.
Les ressources retournées par l'API incluent automatiquement des champs de traçabilité qui permettent de connaître l'historique des modifications.
Toutes les ressources incluent ces champs temporels :
created_at : Date et heure de création de la ressourceupdated_at : Date et heure de la dernière modificationdeleted_at : Date et heure de suppression (si la ressource supporte la suppression logique)Les dates sont renvoyées au format Y-m-d, les dates avec heure au format Y-m-d H:i:s, sans fuseau horaire :
created_at, updated_at, deleted_at et les autres champs en _at) sont en heure de Paris (Europe/Paris), heure d'été comprise ;Les filtres de date attendent leurs valeurs dans le même fuseau que le champ filtré.
Pour certaines ressources, des informations supplémentaires sur l'auteur des actions sont disponibles :
administrateur_add : Détails de l'administrateur qui a créé la ressourceadministrateur_edit : Détails de l'administrateur qui a effectué la dernière modification administrateur_delete : Détails de l'administrateur qui a supprimé la ressourcePour accéder aux informations détaillées des administrateurs, utilisez le paramètre include :
?include=administrateurAdd,administrateurEdit,administrateurDelete
{
"id": 123,
"nom": "Formation Excel",
"created_at": "2024-01-15 10:30:00",
"updated_at": "2024-01-20 14:45:00",
"deleted_at": null,
"administrateur_add": {
"id": 5,
"nom": "Martin",
"prenom": "Pierre"
},
"administrateur_edit": {
"id": 8,
"nom": "Dubois",
"prenom": "Marie"
}
}
Note : Ces champs sont automatiquement inclus dans les réponses et ne nécessitent aucune configuration particulière côté client.
Quand des attributs sont validés par l'API (présence, format, existence), si aucune erreur n'est détectée, un statut 200 (Success), 201 (Created) ou 204 (Deleted) sera retourné par l'API.
Dans le cas contraire, un statut 422 (Unprocessable Entity) sera retourné accompagné des messages d'erreurs associés aux validations qui ont échouée.
{
"message": "Cet email est déjà utilisé.",
"errors": {
"email": [
"Cet email est déjà utilisé."
]
}
}
L'API de Dendreo impose les limites suivantes :
Burst : 100 requêtes max par période de 10 secondes
Mensuelle : dépend de votre niveau d'abonnement
Quotidienne : 100 000 requêtes max par jour, quel que soit votre limite mensuelle
En cas de dépassement, vous recevrez une erreur 429 - HTTP_TOO_MANY_REQUESTS.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules.
entrepriseinterlocuteursadministrateurAddadministrateurEditcategoriecommerciauxdevisparentChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.
id-idid_action_commerciale-id_action_commercialedate_action-date_actiondate_relance-date_relancecreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/actions-commerciales" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"date_action": "2026-02-03",
"date_relance": "2027-03-23",
"compte_rendu": "Qui commodi incidunt iure odit. Et modi ipsum nostrum omnis autem et consequatur. Dolores enim non facere tempora.",
"priorite": 4,
"id_categorie_ac": 46,
"devis_id": 80,
"id_entreprise": 98,
"parent_id": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
},
{
"date_action": "2026-08-28",
"date_relance": "2027-02-01",
"compte_rendu": "Delectus fugit qui repudiandae laboriosam. Alias tenetur ratione nemo voluptate accusamus ut et. Modi rerum ex repellendus assumenda et tenetur.",
"priorite": 2,
"id_categorie_ac": 22,
"devis_id": 59,
"id_entreprise": 62,
"parent_id": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Relations à inclure dans la réponse, séparées par des virgules.
entrepriseinterlocuteursadministrateurAddadministrateurEditcategoriecommerciauxdevisparentcurl --request GET \
--get "https://api.dendreo.com/v2/actions-commerciales/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"date_action": "2026-02-03",
"date_relance": "2027-03-23",
"compte_rendu": "Qui commodi incidunt iure odit. Et modi ipsum nostrum omnis autem et consequatur. Dolores enim non facere tempora.",
"priorite": 4,
"id_categorie_ac": 46,
"devis_id": 80,
"id_entreprise": 98,
"parent_id": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
}
Les champs OGDPC (num_session_dpc, ogdpc_orientation…) ne sont renvoyés que si l'option OGDPC est active sur le centre de formation de l'ADF, et les champs LMS (dokeos_*, tslearning_group_id, riseup_*) que si le LMS correspondant est activé.
YYYY-MM-DD, sans partie horaire.Les champs additionnels non chiffrés du compte, hors fichiers, boutons et appels d'API, sont aussi filtrables par filter[<nom du champ>] : valeur exacte pour un champ relation, date ou liste, 0, 1, true ou false pour un booléen, recherche partielle sinon.
Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle littérale sur l'intitulé et le numéro complet (% et _ cherchés tels quels). Une valeur séparée par des virgules recherche chacun de ses termes.
Type de l'ADF. Toute autre valeur ne retourne aucune ADF.
interintrahors_formationEntiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.
Identifiant externe de l'entreprise. Plusieurs valeurs séparées par des virgules.
Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.
Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF. Trouve aussi les ADF qui contiennent le module dans un module composé.
Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.
Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.
Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[date_debut][]=>=2026-01-01&filter[date_debut][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[date_fin][]=>=2026-01-01&filter[date_fin][]=<=2026-12-31.
Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.
withonlyDate (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules. Les includes participants, satisfaction_lap, modules, formateurs, entreprises, creneaux, salles, stats, recettes ne sont plus acceptés : la réponse 400 indique l'endpoint qui les remplace. visuel ajoute le champ visuel et les champs additionnels de type fichier (PDF, image), absents de la réponse sans cet include même s'ils ont une valeur.
etapeProcessvisuelChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.
date_debut-date_debutdate_fin-date_finintitule-intitulenumero_complet-numero_completcreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/actions-de-formation" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"numero": null,
"numero_complet": "ADF_20260000",
"numero_perso": null,
"numero_comptable": null,
"type": "inter",
"formation": true,
"intitule": "Velit et est cum.",
"intitule_court": null,
"color": null,
"description": null,
"id_centre_de_formation": 1,
"id_salle_de_formation": null,
"id_entreprise": null,
"id_contact": null,
"id_contact_facturation": null,
"id_etape_process": 6,
"date_debut": null,
"date_fin": null,
"date_effective_debut": null,
"date_effective_fin": null,
"date_edit_etape": null,
"has_dates_contractuelles": false,
"nb_participants_min": null,
"nb_participants_max": null,
"objectif": null,
"objectif_pre_2017": null,
"nature": null,
"inscription_online": false,
"include_in_bpf": false,
"total_heures_participants": null,
"total_participants": null,
"satisfaction_disabled": false,
"id_responsable": null,
"id_commercial": null,
"mode_pricing": "par_participant",
"mode_organisation": null,
"commentaires": null,
"commentaires_agenda": null,
"tva_formation": null,
"tva_hors_formation": null,
"tva_frais": null,
"id_externe": null,
"esignature": false,
"remuneration_par_lmf": false,
"categorie_module_id": null,
"code_analytique": null,
"objectif_pedagogique": null,
"modalites_pedagogiques": null,
"moyens_supports_pedagogiques": null,
"public_vise": null,
"pre_requis": null,
"infos_admission": null,
"modalites_devaluation": null,
"accessibilite": null,
"profil_formateurs": null,
"message_libre_exp": null,
"message_libre_exe": null,
"message_libre_exf": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/gfxfqtd3my5hctspgjtfkwdwnjxAsslmm8bfcykslj7dg7sdmrxfswtwmqy24AjAhffwgpj5h37A5stxljvhcnrr42xwAAdzfnsx3wbwmvcfcpj8",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
},
{
"numero": null,
"numero_complet": "ADF_20260000",
"numero_perso": null,
"numero_comptable": null,
"type": "inter",
"formation": true,
"intitule": "Aliquam ad qui temporibus vitae.",
"intitule_court": null,
"color": null,
"description": null,
"id_centre_de_formation": 1,
"id_salle_de_formation": null,
"id_entreprise": null,
"id_contact": null,
"id_contact_facturation": null,
"id_etape_process": 6,
"date_debut": null,
"date_fin": null,
"date_effective_debut": null,
"date_effective_fin": null,
"date_edit_etape": null,
"has_dates_contractuelles": false,
"nb_participants_min": null,
"nb_participants_max": null,
"objectif": null,
"objectif_pre_2017": null,
"nature": null,
"inscription_online": false,
"include_in_bpf": false,
"total_heures_participants": null,
"total_participants": null,
"satisfaction_disabled": false,
"id_responsable": null,
"id_commercial": null,
"mode_pricing": "par_participant",
"mode_organisation": null,
"commentaires": null,
"commentaires_agenda": null,
"tva_formation": null,
"tva_hors_formation": null,
"tva_frais": null,
"id_externe": null,
"esignature": false,
"remuneration_par_lmf": false,
"categorie_module_id": null,
"code_analytique": null,
"objectif_pedagogique": null,
"modalites_pedagogiques": null,
"moyens_supports_pedagogiques": null,
"public_vise": null,
"pre_requis": null,
"infos_admission": null,
"modalites_devaluation": null,
"accessibilite": null,
"profil_formateurs": null,
"message_libre_exp": null,
"message_libre_exe": null,
"message_libre_exf": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/j87A7szAkvd298swkbrgczrzgbtAmstfgm6f1zdn3jgggmstm8jx3ndcnnvAgscpjqzdqpj5hjg2k5zy4A52Ay6gmrc2mz5y4nxAk8syh1zg4pj8",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Relations à inclure dans la réponse, séparées par des virgules. Les includes participants, satisfaction_lap, modules, formateurs, entreprises, creneaux, salles, stats, recettes ne sont plus acceptés : la réponse 400 indique l'endpoint qui les remplace. visuel ajoute le champ visuel et les champs additionnels de type fichier (PDF, image), absents de la réponse sans cet include même s'ils ont une valeur.
etapeProcessvisuelcurl --request GET \
--get "https://api.dendreo.com/v2/actions-de-formation/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"numero": null,
"numero_complet": "ADF_20260000",
"numero_perso": null,
"numero_comptable": null,
"type": "inter",
"formation": true,
"intitule": "Adipisci quidem nostrum qui commodi incidunt iure.",
"intitule_court": null,
"color": null,
"description": null,
"id_centre_de_formation": 1,
"id_salle_de_formation": null,
"id_entreprise": null,
"id_contact": null,
"id_contact_facturation": null,
"id_etape_process": 6,
"date_debut": null,
"date_fin": null,
"date_effective_debut": null,
"date_effective_fin": null,
"date_edit_etape": null,
"has_dates_contractuelles": false,
"nb_participants_min": null,
"nb_participants_max": null,
"objectif": null,
"objectif_pre_2017": null,
"nature": null,
"inscription_online": false,
"include_in_bpf": false,
"total_heures_participants": null,
"total_participants": null,
"satisfaction_disabled": false,
"id_responsable": null,
"id_commercial": null,
"mode_pricing": "par_participant",
"mode_organisation": null,
"commentaires": null,
"commentaires_agenda": null,
"tva_formation": null,
"tva_hors_formation": null,
"tva_frais": null,
"id_externe": null,
"esignature": false,
"remuneration_par_lmf": false,
"categorie_module_id": null,
"code_analytique": null,
"objectif_pedagogique": null,
"modalites_pedagogiques": null,
"moyens_supports_pedagogiques": null,
"public_vise": null,
"pre_requis": null,
"infos_admission": null,
"modalites_devaluation": null,
"accessibilite": null,
"profil_formateurs": null,
"message_libre_exp": null,
"message_libre_exe": null,
"message_libre_exf": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/jn7hAnlxgf6248ssk35vcA65kr32szsmkfz23l6hnj522wtrjqydsv5h4f3f4zks33yfspj5hjAA9rlxlb3dkt5lkjlw2v6d4vgwgvbvfn5vcpj8",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Les règles propres à un seul champ figurent dans la liste des paramètres ; celles ci-dessous combinent plusieurs champs. Une règle non respectée renvoie 422.
inter : aucune entreprise ni aucun contact ne peut être lié, et mode_pricing vaut toujours par_participant.intra : une entreprise est obligatoire. Avec un module hors formation et l'option multi-produits, l'ADF créée est hors formation.hors_formation : ADF INTRA dont aucun module n'est un module de formation. Elle exige l'option multi-produits et une entreprise. id_module reste facultatif, mais doit désigner un module hors formation. Elle prend les étapes du process INTRA. En lecture, type vaut hors_formation quand formation vaut false.id_entreprise, entreprise_raison_sociale, entreprise_id_externe (ou son alias id_externe_entreprise), entreprise_siret. Une entreprise introuvable ou désactivée est refusée.id_module ou id_externe_module ajoute un module à l'ADF.intitule, objectif et include_in_bpf reprennent les valeurs du module quand ils ne sont pas envoyés.prix, duree, date_debut, date_fin, date_acces_debut et date_acces_fin s'appliquent au module ajouté : ils sont refusés sans module.id_formateur (ou id_externe_formateur) et id_entreprise_formateur staffent le formateur sur le module ajouté. Sans module, ils sont validés mais ignorés.id_formateur, id_entreprise_formateur et id_salle_de_formation les remplacent au lieu de s'y ajouter : le module n'a jamais deux formateurs ni deux formateurs sous-traitants.date_debut est obligatoire et date_fin facultative.date_debut devient facultative.date_fin devient obligatoire.has_dates_contractuelles envoyé, sinon réglage du centre de formation) : date_debut et date_fin sont obligatoires, sauf pour un module hors formation sans dates ou e-learning asynchrone (où seule date_debut reste obligatoire).salle_client n'est accepté qu'avec type = intra, jamais avec id_salle_de_formation ou id_externe_salle_de_formation.numero_complet et numero : l'un ou l'autre, jamais les deux.curl --request POST \
"https://api.dendreo.com/v2/actions-de-formation" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"type\": \"intra\",
\"id_centre_de_formation\": 1,
\"id_externe\": \"crm-4512\",
\"numero_complet\": \"ADF_2025001\",
\"numero\": 42,
\"id_entreprise\": 1,
\"entreprise_raison_sociale\": \"ACME Formation\",
\"entreprise_id_externe\": \"ext_123\",
\"entreprise_siret\": \"73282932000074\",
\"id_contact\": 12,
\"salle_client\": true,
\"id_salle_de_formation\": 3,
\"id_module\": 10,
\"prix\": 1500,
\"duree\": 7.5,
\"date_acces_debut\": \"2026-09-01\",
\"date_acces_fin\": \"2026-09-30\",
\"has_dates_contractuelles\": false,
\"id_formateur\": 7,
\"id_etape_process\": 1,
\"nb_participants_min\": 2,
\"nb_participants_max\": 12,
\"mode_pricing\": \"par_jour\",
\"tva_formation\": \"20\",
\"tva_hors_formation\": \"20\",
\"tva_frais\": \"20\",
\"include_in_bpf\": true,
\"objectif\": \"autres\",
\"nature\": \"101\",
\"intitule\": \"Formation Laravel avancé\",
\"intitule_court\": \"Laravel avancé\",
\"color\": \"3498db\",
\"esignature\": true,
\"remuneration_par_lmf\": false,
\"inscription_online\": false,
\"automations\": [
16
],
\"date_debut\": \"2026-09-01 09:00:00\",
\"date_fin\": \"2026-09-05 17:00:00\",
\"description\": \"<p>Programme détaillé…<\\/p>\"
}"
{
"data": {
"numero": null,
"numero_complet": "ADF_20260000",
"numero_perso": null,
"numero_comptable": null,
"type": "inter",
"formation": true,
"intitule": "Et animi quos velit et fugiat.",
"intitule_court": null,
"color": null,
"description": null,
"id_centre_de_formation": 1,
"id_salle_de_formation": null,
"id_entreprise": null,
"id_contact": null,
"id_contact_facturation": null,
"id_etape_process": 6,
"date_debut": null,
"date_fin": null,
"date_effective_debut": null,
"date_effective_fin": null,
"date_edit_etape": null,
"has_dates_contractuelles": false,
"nb_participants_min": null,
"nb_participants_max": null,
"objectif": null,
"objectif_pre_2017": null,
"nature": null,
"inscription_online": false,
"include_in_bpf": false,
"total_heures_participants": null,
"total_participants": null,
"satisfaction_disabled": false,
"id_responsable": null,
"id_commercial": null,
"mode_pricing": "par_participant",
"mode_organisation": null,
"commentaires": null,
"commentaires_agenda": null,
"tva_formation": null,
"tva_hors_formation": null,
"tva_frais": null,
"id_externe": null,
"esignature": false,
"remuneration_par_lmf": false,
"categorie_module_id": null,
"code_analytique": null,
"objectif_pedagogique": null,
"modalites_pedagogiques": null,
"moyens_supports_pedagogiques": null,
"public_vise": null,
"pre_requis": null,
"infos_admission": null,
"modalites_devaluation": null,
"accessibilite": null,
"profil_formateurs": null,
"message_libre_exp": null,
"message_libre_exe": null,
"message_libre_exf": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/gmxvcrkAgrzAwttgh2xwk85fnblgytk43nkhg5bznrmg4zldjvrvk6cr475x3Asqg82Akpj5hj22m4ktnfwgc7cmlfxA256jmjcA5qszkjgAcpj8",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Seuls les champs envoyés sont modifiés. Un champ envoyé à "" ou null est vidé, sauf si sa description précise qu'il ne peut pas l'être. Les règles de validation de la création s'appliquent, avec les différences ci-dessous et celles indiquées champ par champ. Une règle non respectée renvoie 422.
id_module ou id_externe_module ajoute un module à l'ADF ; un module déjà présent ne se modifie pas avec cet endpoint.date_debut, date_fin, prix, duree, date_acces_debut et date_acces_fin s'appliquent au module ajouté : ils sont refusés sans id_module dans la même requête.has_dates_contractuelles s'il est envoyé, sinon sur l'ADF.type et mode_pricing.salle_client.id_formateur, id_externe_formateur (alias V1 formateur_id_externe) et id_entreprise_formateur : le formateur se staffe sur le module ajouté à la création.L'ADF est désactivée.. La restaurer d'abord avec POST /{id}/restore.Entité non trouvée..curl --request PATCH \
"https://api.dendreo.com/v2/actions-de-formation/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"type\": \"intra\",
\"id_centre_de_formation\": 1,
\"id_externe\": \"crm-4512\",
\"numero_complet\": \"ADF_2025001\",
\"numero\": 42,
\"id_entreprise\": 1,
\"entreprise_raison_sociale\": \"ACME Formation\",
\"entreprise_id_externe\": \"ext_123\",
\"entreprise_siret\": \"73282932000074\",
\"id_contact\": 12,
\"salle_client\": true,
\"id_salle_de_formation\": 3,
\"id_module\": 10,
\"prix\": 1500,
\"duree\": 7.5,
\"date_acces_debut\": \"2026-09-01\",
\"date_acces_fin\": \"2026-09-30\",
\"has_dates_contractuelles\": false,
\"id_formateur\": 7,
\"id_etape_process\": 1,
\"nb_participants_min\": 2,
\"nb_participants_max\": 12,
\"mode_pricing\": \"par_jour\",
\"tva_formation\": \"20\",
\"tva_hors_formation\": \"20\",
\"tva_frais\": \"20\",
\"include_in_bpf\": true,
\"objectif\": \"autres\",
\"nature\": \"101\",
\"intitule\": \"Formation Laravel avancé\",
\"intitule_court\": \"Laravel avancé\",
\"color\": \"3498db\",
\"esignature\": true,
\"remuneration_par_lmf\": false,
\"inscription_online\": false,
\"automations\": [
16
],
\"date_debut\": \"2026-09-01 09:00:00\",
\"date_fin\": \"2026-09-05 17:00:00\",
\"description\": \"<p>Programme détaillé…<\\/p>\"
}"
{
"data": {
"numero": null,
"numero_complet": "ADF_20260000",
"numero_perso": null,
"numero_comptable": null,
"type": "inter",
"formation": true,
"intitule": "Et animi quos velit et fugiat.",
"intitule_court": null,
"color": null,
"description": null,
"id_centre_de_formation": 1,
"id_salle_de_formation": null,
"id_entreprise": null,
"id_contact": null,
"id_contact_facturation": null,
"id_etape_process": 6,
"date_debut": null,
"date_fin": null,
"date_effective_debut": null,
"date_effective_fin": null,
"date_edit_etape": null,
"has_dates_contractuelles": false,
"nb_participants_min": null,
"nb_participants_max": null,
"objectif": null,
"objectif_pre_2017": null,
"nature": null,
"inscription_online": false,
"include_in_bpf": false,
"total_heures_participants": null,
"total_participants": null,
"satisfaction_disabled": false,
"id_responsable": null,
"id_commercial": null,
"mode_pricing": "par_participant",
"mode_organisation": null,
"commentaires": null,
"commentaires_agenda": null,
"tva_formation": null,
"tva_hors_formation": null,
"tva_frais": null,
"id_externe": null,
"esignature": false,
"remuneration_par_lmf": false,
"categorie_module_id": null,
"code_analytique": null,
"objectif_pedagogique": null,
"modalites_pedagogiques": null,
"moyens_supports_pedagogiques": null,
"public_vise": null,
"pre_requis": null,
"infos_admission": null,
"modalites_devaluation": null,
"accessibilite": null,
"profil_formateurs": null,
"message_libre_exp": null,
"message_libre_exe": null,
"message_libre_exf": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/kn6hs9dngnztgl6sjbmdg9lxnb7vgz6dgzgs9qzAjj1wqmdc3q7hcn633f5Aqzby4v6w9pj5hjyxA76xgjywk56jmnnfmzczj8l2qn63kjfx4pj8",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Suppression logique : l'ADF reste restaurable. Refusée (409) si l'ADF a des financements, des factures, des frais pédagogiques déjà facturés ou des participants qui ne peuvent pas être désinscrits.
curl --request DELETE \
"https://api.dendreo.com/v2/actions-de-formation/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non. Les emails programmés par les automatismes sont régénérés ; les échéances passées pendant la suppression ne sont pas rattrapées.
curl --request POST \
"https://api.dendreo.com/v2/actions-de-formation/9/restore" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"numero": null,
"numero_complet": "ADF_20260000",
"numero_perso": null,
"numero_comptable": null,
"type": "inter",
"formation": true,
"intitule": "Adipisci quidem nostrum qui commodi incidunt iure.",
"intitule_court": null,
"color": null,
"description": null,
"id_centre_de_formation": 1,
"id_salle_de_formation": null,
"id_entreprise": null,
"id_contact": null,
"id_contact_facturation": null,
"id_etape_process": 6,
"date_debut": null,
"date_fin": null,
"date_effective_debut": null,
"date_effective_fin": null,
"date_edit_etape": null,
"has_dates_contractuelles": false,
"nb_participants_min": null,
"nb_participants_max": null,
"objectif": null,
"objectif_pre_2017": null,
"nature": null,
"inscription_online": false,
"include_in_bpf": false,
"total_heures_participants": null,
"total_participants": null,
"satisfaction_disabled": false,
"id_responsable": null,
"id_commercial": null,
"mode_pricing": "par_participant",
"mode_organisation": null,
"commentaires": null,
"commentaires_agenda": null,
"tva_formation": null,
"tva_hors_formation": null,
"tva_frais": null,
"id_externe": null,
"esignature": false,
"remuneration_par_lmf": false,
"categorie_module_id": null,
"code_analytique": null,
"objectif_pedagogique": null,
"modalites_pedagogiques": null,
"moyens_supports_pedagogiques": null,
"public_vise": null,
"pre_requis": null,
"infos_admission": null,
"modalites_devaluation": null,
"accessibilite": null,
"profil_formateurs": null,
"message_libre_exp": null,
"message_libre_exe": null,
"message_libre_exf": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/4b2w4ml2pbyhmrc4jvcAAqzp376dcwlnnzbvqwlb3f627tdtjn1swA6r4nxhqwkc3j82spj5hj2A49t5kbyfq5cfjjyggzkdlbrvcsdmkv8g4pj8",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.
withonlyDate (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditadministrateurDeleteChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.
id-idid_administrateur-id_administrateurnom-nomprenom-prenomtelephone-telephonecreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/administrateurs" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"civilite": "Mme",
"nom": "Berger",
"prenom": "Suzanne",
"nom_complet": "Berger Suzanne",
"niveau": 40,
"fonction": "Etainier",
"email": "suzanne.berger_432@test.test",
"telephone": "+3302 39 54 84 77",
"date_derniere_connexion": "2026-03-05 04:06:59",
"use_email": false,
"use_signature": true,
"default_cdf_id": false,
"unread_notifications_count": 12,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
},
{
"civilite": "Mme",
"nom": "Collet",
"prenom": "Théodore",
"nom_complet": "Collet Théodore",
"niveau": 40,
"fonction": "Praticien dentaire",
"email": "theodore.collet_6432@test.test",
"telephone": "+3301 60 37 76 69",
"date_derniere_connexion": "2026-02-15 23:09:06",
"use_email": true,
"use_signature": false,
"default_cdf_id": false,
"unread_notifications_count": 11,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditadministrateurDeletecurl --request GET \
--get "https://api.dendreo.com/v2/administrateurs/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"civilite": "Mme",
"nom": "Berger",
"prenom": "Suzanne",
"nom_complet": "Berger Suzanne",
"niveau": 40,
"fonction": "Etainier",
"email": "suzanne.berger_432@test.test",
"telephone": "+3302 39 54 84 77",
"date_derniere_connexion": "2026-03-05 04:06:59",
"use_email": false,
"use_signature": true,
"default_cdf_id": false,
"unread_notifications_count": 12,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
curl --request POST \
"https://api.dendreo.com/v2/administrateurs" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"email\": \"jean.dupont@example.com\",
\"nom\": \"Dupont\",
\"prenom\": \"Jean\",
\"telephone\": \"+33612345678\",
\"fonction\": \"Directeur\",
\"civilite\": \"M.\",
\"niveau\": 20,
\"niveaux\": [
{
\"id_centre_de_formation\": 2,
\"niveau\": -1
}
]
}"
{
"data": {
"civilite": "Dr",
"nom": "Pages",
"prenom": "Raymond",
"nom_complet": "Pages Raymond",
"niveau": 40,
"fonction": "Géodésien",
"email": "raymond.pages_89365@test.test",
"telephone": "+3305 35 49 13 11",
"date_derniere_connexion": "2026-03-23 23:44:50",
"use_email": false,
"use_signature": true,
"default_cdf_id": false,
"unread_notifications_count": 10,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
curl --request PATCH \
"https://api.dendreo.com/v2/administrateurs/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"email\": \"jean.dupont@example.com\",
\"nom\": \"Dupont\",
\"prenom\": \"Jean\",
\"telephone\": \"+33612345678\",
\"fonction\": \"Directeur\",
\"civilite\": \"M.\",
\"niveau\": 20,
\"niveaux\": [
{
\"id_centre_de_formation\": 2,
\"niveau\": -1
}
]
}"
{
"data": {
"civilite": "Dr",
"nom": "Pages",
"prenom": "Raymond",
"nom_complet": "Pages Raymond",
"niveau": 40,
"fonction": "Géodésien",
"email": "raymond.pages_89365@test.test",
"telephone": "+3305 35 49 13 11",
"date_derniere_connexion": "2026-03-23 23:44:50",
"use_email": false,
"use_signature": true,
"default_cdf_id": false,
"unread_notifications_count": 10,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
curl --request DELETE \
"https://api.dendreo.com/v2/administrateurs/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.
curl --request POST \
"https://api.dendreo.com/v2/administrateurs/9/restore" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"civilite": "Mme",
"nom": "Berger",
"prenom": "Suzanne",
"nom_complet": "Berger Suzanne",
"niveau": 40,
"fonction": "Etainier",
"email": "suzanne.berger_432@test.test",
"telephone": "+3302 39 54 84 77",
"date_derniere_connexion": "2026-03-05 04:06:59",
"use_email": false,
"use_signature": true,
"default_cdf_id": false,
"unread_notifications_count": 12,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditparentChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.
id_action_de_formation-id_action_de_formationid-idcreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/budgets" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"id_budget_type": null,
"id_action_de_formation": 140,
"devis_detail_id": null,
"id_module": null,
"id_lap": null,
"id_heure_type": null,
"id_laf": null,
"id_lmf": null,
"type": "recette",
"intitule": "Adipisci quidem nostrum qui commodi incidunt iure.",
"prix_unitaire": 111.99,
"nb": 5,
"total": 0,
"tva": 3.7,
"refacturable": false,
"categorie_operation": null,
"parent_id": null,
"expense_id": null,
"date": null,
"formateur_facture_id": null,
"invoiced_at": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
},
{
"id_budget_type": null,
"id_action_de_formation": 141,
"devis_detail_id": null,
"id_module": null,
"id_lap": null,
"id_heure_type": null,
"id_laf": null,
"id_lmf": null,
"type": "recette",
"intitule": "Dolores enim non facere tempora.",
"prix_unitaire": 234.89,
"nb": 8,
"total": 0,
"tva": 3,
"refacturable": true,
"categorie_operation": null,
"parent_id": null,
"expense_id": null,
"date": null,
"formateur_facture_id": null,
"invoiced_at": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditparentcurl --request GET \
--get "https://api.dendreo.com/v2/budgets/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"id_budget_type": null,
"id_action_de_formation": 142,
"devis_detail_id": null,
"id_module": null,
"id_lap": null,
"id_heure_type": null,
"id_laf": null,
"id_lmf": null,
"type": "recette",
"intitule": "Adipisci quidem nostrum qui commodi incidunt iure.",
"prix_unitaire": 111.99,
"nb": 5,
"total": 0,
"tva": 3.7,
"refacturable": false,
"categorie_operation": null,
"parent_id": null,
"expense_id": null,
"date": null,
"formateur_facture_id": null,
"invoiced_at": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
}
curl --request POST \
"https://api.dendreo.com/v2/budgets" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"id_action_de_formation\": 16,
\"intitule\": \"n\",
\"type\": \"depense\",
\"prix_unitaire\": 84,
\"nb\": 12,
\"tva\": 8.1,
\"id_lap\": 16,
\"refacturable\": true,
\"categorie_operation\": \"services\",
\"refacturable_prix_coutant\": false,
\"prix_unitaire_depense\": 39
}"
{
"data": {
"id_budget_type": null,
"id_action_de_formation": 143,
"devis_detail_id": null,
"id_module": null,
"id_lap": null,
"id_heure_type": null,
"id_laf": null,
"id_lmf": null,
"type": "recette",
"intitule": "Et animi quos velit et fugiat.",
"prix_unitaire": 721.34,
"nb": 4,
"total": 0,
"tva": 8.1,
"refacturable": false,
"categorie_operation": null,
"parent_id": null,
"expense_id": null,
"date": null,
"formateur_facture_id": null,
"invoiced_at": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
}
curl --request PATCH \
"https://api.dendreo.com/v2/budgets/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"id_action_de_formation\": 16,
\"intitule\": \"n\",
\"type\": \"recette\",
\"prix_unitaire\": 84,
\"nb\": 12,
\"tva\": 8.5,
\"id_lap\": 16,
\"refacturable\": false,
\"categorie_operation\": \"biens\",
\"refacturable_prix_coutant\": false,
\"prix_unitaire_depense\": 39
}"
{
"data": {
"id_budget_type": null,
"id_action_de_formation": 144,
"devis_detail_id": null,
"id_module": null,
"id_lap": null,
"id_heure_type": null,
"id_laf": null,
"id_lmf": null,
"type": "recette",
"intitule": "Et animi quos velit et fugiat.",
"prix_unitaire": 721.34,
"nb": 4,
"total": 0,
"tva": 8.1,
"refacturable": false,
"categorie_operation": null,
"parent_id": null,
"expense_id": null,
"date": null,
"formateur_facture_id": null,
"invoiced_at": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
}
Refusée avec un code 422 si le budget est associé à des financements, ou si son type ne permet pas la suppression.
curl --request DELETE \
"https://api.dendreo.com/v2/budgets/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Retourne les prochaines sessions visibles sur le Catalogue public, triées par date de début (tri par défaut). Les modules simples et les Modules Composés programmés sur une action de formation sont mélangés dans la même liste : le couple type_module + id identifie une ligne. Les sessions permanentes ne sont pas retournées.
Règles de visibilité
Elles sont celles du Catalogue public et ne peuvent pas être désactivées. Une session n'est listée que si :
stage ;Une session dont le module est supprimé n'est jamais listée, quel que soit le réglage d'affichage des INTRA.
Filtre de centre
Sans filter[id_centre_de_formation], la liste est celle du Catalogue public global, avec les réglages globaux ; en multi-centre, seuls les centres choisis pour le catalogue global sont concernés. Avec filter[id_centre_de_formation], la liste est celle du catalogue de ce centre, avec les réglages de ce centre.
Différences avec l'API V1 (catalogue_prochaines_sessions)
limit est remplacé par per_page et page (100 résultats maximum par page) ; id_centre_de_formation, id_module et id_categorie passent en filter[...] ; show_inter_only=true est remplacé par filter[type]=inter, qui exclut toutes les INTRA (la V1 ne retirait que les INTRA sans entreprise).satisfaction vaut null quand la satisfaction est désactivée ou que le catalogue appelé masque la note moyenne : réglage du catalogue global sans filtre de centre, réglage du centre avec filter[id_centre_de_formation].null au lieu des chaînes vides, y compris dans lieux) ; mode_organisation porte la clé technique et le libellé passe dans mode_organisation_libelle, avec le libellé du Catalogue public (« Présentiel / à distance » là où la V1 renvoyait « Mixte ») ; id_lam n'est plus renvoyé : l'identifiant de la session est dans id, à lire avec type_module (pour un module simple, c'est l'ancien id_lam) ; categorie reste l'intitulé de la catégorie, l'objet catégorie est dans categorie_module (include) ; module_champs_additionnels est toujours présent (objet vide sans champ additionnel) ; slug, slug_categorie et slug_relatif, qui contiennent des URL, sont renommés url, url_categorie et url_relative ; url_categorie vaut null quand l'URL du catalogue du centre manque.remplissage et url_relative d'un Module Composé sont calculés comme pour un module simple.salle et formateurs remplacent salledeformation et formateurs_staffes, et salle a le même format que les éléments de lieux ; les créneaux d'un Module Composé sont triés par date de début et portent day comme ceux d'un module simple ; url_connexion et url_connexion_invite sont toujours présentes et valent null hors salle Whereby dotée d'une salle virtuelle ; les clés d'audit sont created_at, id_add, updated_at et id_edit au lieu de date_add et date_edit ; include=creneaux.salle (et chaque sous-include) suffit seul, sans creneaux.Identifiant de la session. Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune session.
Limite la liste au catalogue public de ce centre, avec les réglages du centre. 0 ou absent : catalogue public global. Un seul identifiant est accepté. Le mot de passe du catalogue de ce centre et l'absence de catalogue pour ce centre sont ignorés.
Identifiant du module. Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune session.
Identifiant de la catégorie directe du module, sans ses sous-catégories. Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune session.
Identifiant de l'action de formation. Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune session.
Filtre par type de session, une ou plusieurs valeurs séparées par des virgules.
simplecomposeFiltre par type d'action de formation, une ou plusieurs valeurs séparées par des virgules.
interintraFiltre par mode d'organisation, une ou plusieurs valeurs séparées par des virgules.
presentielelearning_syncelearning_asyncmixteDate (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[date_debut][]=>=2026-01-01&filter[date_debut][]=<=2026-12-31. Les sessions passées restent exclues.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[date_fin][]=>=2026-01-01&filter[date_fin][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules. visuel ajoute la clé visuel_module. centre vaut null pour une session du centre Global. creneaux.salle, creneaux.formateurs, creneaux.suivi et creneaux.replays incluent les créneaux et suffisent seuls, sans creneaux.
visuelsatisfactioncategorie_modulecentrecreneauxcreneaux.sallecreneaux.formateurscreneaux.suivicreneaux.replaysChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par date_debut croissant.
date_debut-date_debutdate_fin-date_finintitule-intituleprix_formation-prix_formationNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/catalogue-prochaines-sessions?filter%5Bid_centre_de_formation%5D=3&filter%5Btype_module%5D=simple&filter%5Btype%5D=inter&filter%5Bmode_organisation%5D=presentiel" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"id": 128,
"type_module": "simple",
"id_action_de_formation": 57,
"id_module": 5,
"intitule": "Excel - Niveau 1",
"date_debut": "2027-03-08 09:00:00",
"date_fin": "2027-03-09 17:00:00",
"categorie": "Bureautique",
"id_categorie": 4,
"url_categorie": "https://demo.dendreo.com/catalogue/categorie/4-bureautique",
"mode_organisation": "presentiel",
"mode_organisation_libelle": "Présentiel",
"total_participants": 6,
"nb_participants_min": 4,
"nb_participants_max": 12,
"remplissage": "6/12",
"prix_formation": 890,
"prix_module": 890,
"url": "https://demo.dendreo.com/catalogue/formation/5-excel-niveau-1/128",
"url_relative": "/catalogue/formation/5-excel-niveau-1/128",
"lieux": [
{
"intitule": "Centre Les Tilleuls",
"adresse": "12 rue des Lilas",
"ville": "Lyon",
"code_postal": "69003",
"pays_alpha2": "fr",
"pays": "France",
"lien_google_maps": "https://maps.google.com/?q=12+rue+des+Lilas+Lyon",
"acces": "Métro ligne B, station Place Guichard",
"telephone": "04 72 00 00 00",
"email": "accueil@tilleuls.example",
"accueil": null,
"nom_contact": "Claire Martin"
}
],
"module_champs_additionnels": {
"date_satisfaction_init": "2027-03-10",
"code_analytique": "ANA-001",
"c_fichier_catalogue": "https://demo.dendreo.com/fichiers/programme-excel.pdf"
}
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 1
}
}
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Filtre par catégorie parente. 0 ou null retourne uniquement les catégories racines.
Filtre par statut : 1 = actives, 0 = désactivées.
01Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.
withonlyDate (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules.
parentchildrenadministrateurAddadministrateurEditChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par order croissant.
id-idintitule-intituleorder-ordercreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/module-categories?filter%5Bid_parent%5D=1&filter%5Bstatus%5D=1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"intitule": "La sécurité de louer de manière sûre",
"description": "<p>Commodi incidunt iure odit.</p>",
"description_meta": "Et modi ipsum nostrum omnis autem et consequatur.",
"color": "#692b45",
"status": true,
"order": 16,
"id_parent": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
},
{
"intitule": "La liberté de changer en toute tranquilité",
"description": "<p>Voluptatem laboriosam praesentium quis adipisci.</p>",
"description_meta": "Fugit deleniti distinctio eum doloremque id aut libero.",
"color": "#c95afd",
"status": true,
"order": 75,
"id_parent": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Retourne également les catégories supprimées.
Relations à inclure dans la réponse, séparées par des virgules.
parentchildrenadministrateurAddadministrateurEditcurl --request GET \
--get "https://api.dendreo.com/v2/module-categories/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"intitule": "La sécurité de louer de manière sûre",
"description": "<p>Commodi incidunt iure odit.</p>",
"description_meta": "Et modi ipsum nostrum omnis autem et consequatur.",
"color": "#692b45",
"status": true,
"order": 16,
"id_parent": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
curl --request POST \
"https://api.dendreo.com/v2/module-categories" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"intitule\": \"Bureautique\",
\"description\": \"<p>Formations bureautiques<\\/p>\",
\"description_meta\": \"Toutes nos formations bureautiques\",
\"color\": \"#28a745\",
\"status\": true,
\"order\": 1
}"
{
"data": {
"intitule": "La sécurité d'atteindre vos buts avant-tout",
"description": "<p>Velit et fugiat sunt nihil accusantium.</p>",
"description_meta": "Mollitia modi deserunt aut ab provident perspiciatis quo.",
"color": "#99ea16",
"status": true,
"order": 33,
"id_parent": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
curl --request PATCH \
"https://api.dendreo.com/v2/module-categories/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"intitule\": \"Bureautique\",
\"description\": \"<p>Formations bureautiques<\\/p>\",
\"description_meta\": \"Toutes nos formations bureautiques\",
\"color\": \"#28a745\",
\"status\": true,
\"order\": 1
}"
{
"data": {
"intitule": "La sécurité d'atteindre vos buts avant-tout",
"description": "<p>Velit et fugiat sunt nihil accusantium.</p>",
"description_meta": "Mollitia modi deserunt aut ab provident perspiciatis quo.",
"color": "#99ea16",
"status": true,
"order": 33,
"id_parent": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Suppression logique. Refusée avec un code 409 si la catégorie est utilisée par des modules, ou si elle contient des sous-catégories.
curl --request DELETE \
"https://api.dendreo.com/v2/module-categories/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.
curl --request POST \
"https://api.dendreo.com/v2/module-categories/1/restore" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"intitule": "La sécurité de louer de manière sûre",
"description": "<p>Commodi incidunt iure odit.</p>",
"description_meta": "Et modi ipsum nostrum omnis autem et consequatur.",
"color": "#692b45",
"status": true,
"order": 16,
"id_parent": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
La liste ne renvoie jamais le centre Global (0), même avec filter[id]=0. GET /0 le renvoie, sans clé id.
Les champs additionnels non chiffrés du compte, hors fichiers, boutons et appels d'API, sont aussi filtrables par filter[<nom du champ>] : valeur exacte pour un champ relation, date ou liste, 0, 1, true ou false pour un booléen, recherche partielle sinon.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle sur la raison sociale du centre.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.
id-idnom_commercial-nom_commercialraison_sociale-raison_socialeNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/centres-de-formation" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"hidden": false,
"raison_sociale": null,
"nom_commercial": "Berger",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
},
{
"hidden": false,
"raison_sociale": null,
"nom_commercial": "AndreBourg",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditcurl --request GET \
--get "https://api.dendreo.com/v2/centres-de-formation/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"hidden": false,
"raison_sociale": null,
"nom_commercial": "Berger",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
}
Les champs additionnels non chiffrés du compte, hors fichiers, boutons et appels d'API, sont aussi filtrables par filter[<nom du champ>] : valeur exacte pour un champ relation, date ou liste, 0, 1, true ou false pour un booléen, recherche partielle sinon.
Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.
withonlyClients, fournisseurs, ou ni l'un ni l'autre. Une autre valeur ne filtre rien.
clientsfournisseursnonclientsValeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre. Numéro d'identification de l'entreprise.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditadministrateurDeletecentresstatsChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.
raison_sociale-raison_socialenom-nomprenom-prenomtelephone-telephonecreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/entreprises" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"entreprise_parente_id": null,
"numero": null,
"numero_complet": "ENT_2600000",
"numero_perso": null,
"client": false,
"numero_compte_client": null,
"numero_compte_client_auxiliaire": null,
"numero_comptable_adf": null,
"category_id": null,
"id_externe": 6227,
"particulier": false,
"nom": null,
"prenom": null,
"raison_sociale": "Berger SAS_432",
"appellation": null,
"sigle": null,
"statut_juridique": null,
"nb_employes": null,
"telephone": "+3303 22 55 88 76",
"fax": null,
"site_internet": null,
"email_standard": "zcollet@andre.com",
"adresse": "402, rue de Carre",
"code_postal": "47700",
"ville": "LA REUNION",
"pays": null,
"pays_alpha2": null,
"legal_scheme": "0009",
"legal_scheme_label": "SIRET",
"legal_identifier": "93759947004908",
"peppol_scheme": "0009",
"peppol_identifier": "93759947004908",
"num_tva_intra_auto": null,
"tva_formation": 20,
"tva_frais": 20,
"tva_hors_formation": 20,
"has_chorus_pro_invoices": false,
"reference_acheteur": null,
"moyen_paiement_par_defaut": null,
"delai_paiement": "30_j",
"fournisseur": false,
"statut_bpf_participants_entreprise": "salarie",
"mode_financement_par_defaut": "entreprise",
"financeur_type": null,
"financeur_id": null,
"global_visible": false,
"centre_de_formation_id": 0,
"importance": "Faible",
"id_administrateur": null,
"id_contact": null,
"id_contact_secondaire": null,
"id_contact_facturation": null,
"commentaires": null,
"post_it_commercial": null,
"infos_adf": null,
"unread_notifications_count": null,
"auto_validate_inscriptions": false,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/kmvx29ky4blA7q52nnj22A5qjrc2cttyhfyAs7tc48dxcAkwpbwgq8kfgvwx4qtzjbzdkv6vjzvx1nt2nn5wqz6ckb5f1A5w4fc23mr5hjxvkvdAgrkgqysgm8dfkAkqny7d44cppfrg4pj8",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
},
{
"entreprise_parente_id": null,
"numero": null,
"numero_complet": "ENT_2600000",
"numero_perso": null,
"client": false,
"numero_compte_client": null,
"numero_compte_client_auxiliaire": null,
"numero_comptable_adf": null,
"category_id": null,
"id_externe": 71679,
"particulier": false,
"nom": null,
"prenom": null,
"raison_sociale": "Lejeune S.A.R.L._72083",
"appellation": null,
"sigle": null,
"statut_juridique": null,
"nb_employes": null,
"telephone": "+3304 56 13 44 28",
"fax": null,
"site_internet": null,
"email_standard": "omarechal@laposte.net",
"adresse": "6, rue de Riou",
"code_postal": "71540",
"ville": "LUCENAY L EVEQUE",
"pays": null,
"pays_alpha2": null,
"legal_scheme": "0009",
"legal_scheme_label": "SIRET",
"legal_identifier": "66751372509454",
"peppol_scheme": "0009",
"peppol_identifier": "66751372509454",
"num_tva_intra_auto": null,
"tva_formation": 20,
"tva_frais": 20,
"tva_hors_formation": 20,
"has_chorus_pro_invoices": false,
"reference_acheteur": null,
"moyen_paiement_par_defaut": null,
"delai_paiement": "30_j",
"fournisseur": false,
"statut_bpf_participants_entreprise": "salarie",
"mode_financement_par_defaut": "entreprise",
"financeur_type": null,
"financeur_id": null,
"global_visible": false,
"centre_de_formation_id": 0,
"importance": "Faible",
"id_administrateur": null,
"id_contact": null,
"id_contact_secondaire": null,
"id_contact_facturation": null,
"commentaires": null,
"post_it_commercial": null,
"infos_adf": null,
"unread_notifications_count": null,
"auto_validate_inscriptions": false,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/k1ytg4klnv3xs7bv4nsAy6kwgjhvs8rvk8ww98t3gy5w9Atfkzdvq9ktmr7w755hpfww97bzjny2gsc5m8vg56zAmvgtgtlA48qA3Ar5hjtxqscymyztcz6vn8h2sndcjjxvkvts3v3fcpj8",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditadministrateurDeletecentresstatscurl --request GET \
--get "https://api.dendreo.com/v2/entreprises/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"entreprise_parente_id": null,
"numero": null,
"numero_complet": "ENT_2600000",
"numero_perso": null,
"client": false,
"numero_compte_client": null,
"numero_compte_client_auxiliaire": null,
"numero_comptable_adf": null,
"category_id": null,
"id_externe": 6227,
"particulier": false,
"nom": null,
"prenom": null,
"raison_sociale": "Berger SAS_432",
"appellation": null,
"sigle": null,
"statut_juridique": null,
"nb_employes": null,
"telephone": "+3303 22 55 88 76",
"fax": null,
"site_internet": null,
"email_standard": "zcollet@andre.com",
"adresse": "402, rue de Carre",
"code_postal": "54860",
"ville": "HAUCOURT MOULAINE",
"pays": null,
"pays_alpha2": null,
"legal_scheme": "0009",
"legal_scheme_label": "SIRET",
"legal_identifier": "93759947004908",
"peppol_scheme": "0009",
"peppol_identifier": "93759947004908",
"num_tva_intra_auto": null,
"tva_formation": 20,
"tva_frais": 20,
"tva_hors_formation": 20,
"has_chorus_pro_invoices": false,
"reference_acheteur": null,
"moyen_paiement_par_defaut": null,
"delai_paiement": "30_j",
"fournisseur": false,
"statut_bpf_participants_entreprise": "salarie",
"mode_financement_par_defaut": "entreprise",
"financeur_type": null,
"financeur_id": null,
"global_visible": false,
"centre_de_formation_id": 0,
"importance": "Faible",
"id_administrateur": null,
"id_contact": null,
"id_contact_secondaire": null,
"id_contact_facturation": null,
"commentaires": null,
"post_it_commercial": null,
"infos_adf": null,
"unread_notifications_count": null,
"auto_validate_inscriptions": false,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/g8527rd2pbldkrrvlblfct6j3qxA2r6bnq5h186h3vrs9k5npjmgy7kbkf3f46kvmAyf34dzkv3vc655mfqwkysffntdm65dpbrwgtj5hjt22q5ff8cf2mcpgbxwysryljkws8kppfyx4pj8",
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.
withonlyRelations à inclure dans la réponse, séparées par des virgules.
contactsChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.
raison_sociale-raison_socialeNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/financeurs" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"id": 1,
"opca": true,
"raison_sociale": "OPCO EP",
"legal_scheme": "0009",
"legal_identifier": "85322950900025",
"peppol_scheme": "0009",
"peppol_identifier": "85322950900025",
"num_tva_intra": "FR12853229509",
"tva": "20",
"description": null,
"cible": null,
"site_internet": "https://www.opcoep.fr",
"adresse": "1 rue de la Formation",
"code_postal": "75009",
"ville": "Paris",
"telephone": "01 23 45 67 89",
"pays_alpha2": "FR",
"pays": "France",
"compte_client": "411OPCOEP",
"compte_client_auxiliaire": null,
"numero_comptable_adf": null,
"contacts": [
{
"id": 12,
"id_entreprise": 0,
"civilite": "Mme",
"nom": "Martin",
"prenom": "Isabelle",
"fonction": "Conseillère formation",
"telephone_direct": "01 23 45 67 80",
"portable": "06 12 34 56 78",
"email": "isabelle.martin@opcoep.fr",
"commentaires": "Interlocutrice pour les accords de prise en charge",
"particulier": 0,
"id_externe": null,
"id_centre_de_formation": 0,
"created_at": "2025-03-12 09:15:00",
"id_add": 3,
"updated_at": "2025-06-02 14:40:00",
"id_edit": 3,
"deleted_at": null,
"id_delete": null
}
],
"created_at": "2024-01-08 10:00:00",
"updated_at": "2025-06-02 14:40:00",
"deleted_at": null
}
],
"links": {
"first": "https://api.dendreo.com/v2/financeurs?include=contacts&page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"path": "https://api.dendreo.com/v2/financeurs",
"per_page": 15,
"to": 1
}
}
Relations à inclure dans la réponse, séparées par des virgules.
contactscurl --request GET \
--get "https://api.dendreo.com/v2/financeurs/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"id": 1,
"opca": true,
"raison_sociale": "OPCO EP",
"legal_scheme": "0009",
"legal_identifier": "85322950900025",
"peppol_scheme": "0009",
"peppol_identifier": "85322950900025",
"num_tva_intra": "FR12853229509",
"tva": "20",
"description": null,
"cible": null,
"site_internet": "https://www.opcoep.fr",
"adresse": "1 rue de la Formation",
"code_postal": "75009",
"ville": "Paris",
"telephone": "01 23 45 67 89",
"pays_alpha2": "FR",
"pays": "France",
"compte_client": "411OPCOEP",
"compte_client_auxiliaire": null,
"numero_comptable_adf": null,
"contacts": [
{
"id": 12,
"id_entreprise": 0,
"civilite": "Mme",
"nom": "Martin",
"prenom": "Isabelle",
"fonction": "Conseillère formation",
"telephone_direct": "01 23 45 67 80",
"portable": "06 12 34 56 78",
"email": "isabelle.martin@opcoep.fr",
"commentaires": "Interlocutrice pour les accords de prise en charge",
"particulier": 0,
"id_externe": null,
"id_centre_de_formation": 0,
"created_at": "2025-03-12 09:15:00",
"id_add": 3,
"updated_at": "2025-06-02 14:40:00",
"id_edit": 3,
"deleted_at": null,
"id_delete": null
}
],
"created_at": "2024-01-08 10:00:00",
"updated_at": "2025-06-02 14:40:00",
"deleted_at": null
}
}
Met à jour les champs comptables d'un Financeur. Seuls les 3 champs comptables sont modifiables via cet endpoint :
compte_client — n° de compte généralcompte_client_auxiliaire — n° de compte tiersnumero_comptable_adf — n° de compte produit forcécurl --request PATCH \
"https://api.dendreo.com/v2/financeurs/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"compte_client\": \"C39000123\",
\"compte_client_auxiliaire\": \"AUX001\",
\"numero_comptable_adf\": \"707100\"
}"
{
"data": {
"opca": false,
"raison_sociale": "Maurice Lebrun et Fils",
"legal_scheme": "0009",
"legal_identifier": "829 656 255 63437",
"peppol_scheme": "0009",
"peppol_identifier": "829 656 255 63437",
"num_tva_intra": null,
"tva": null,
"description": null,
"cible": null,
"site_internet": null,
"adresse": null,
"code_postal": null,
"ville": null,
"telephone": null,
"pays_alpha2": "FR",
"pays": "countries.FR",
"compte_client": null,
"compte_client_auxiliaire": null,
"numero_comptable_adf": null,
"created_at": null,
"updated_at": null,
"deleted_at": null
}
}
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
1 ou true pour les sources actives, 0 ou false pour les sources désactivées. Toute autre valeur ne renvoie rien.
Relations à inclure dans la réponse, séparées par des virgules.
opportunitesChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par order croissant.
name-nameorder-orderNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/sources" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"name": "eum molestiae",
"status": true,
"order": 18
},
{
"name": "modi praesentium",
"status": true,
"order": 66
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Relations à inclure dans la réponse, séparées par des virgules.
opportunitescurl --request GET \
--get "https://api.dendreo.com/v2/sources/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"name": "aut adipisci",
"status": true,
"order": 50
}
}
curl --request POST \
"https://api.dendreo.com/v2/sources" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"name\": \"Recommandation\",
\"status\": true,
\"order\": 1
}"
{
"data": {
"name": "architecto eius",
"status": true,
"order": 7
}
}
curl --request PATCH \
"https://api.dendreo.com/v2/sources/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"name\": \"Recommandation\",
\"status\": true,
\"order\": 1
}"
{
"data": {
"name": "architecto eius",
"status": true,
"order": 7
}
}
Refusée avec un code 422 si la source est liée à des opportunités.
curl --request DELETE \
"https://api.dendreo.com/v2/sources/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Filtre par statut : 1 = actives, 0 = désactivées.
01Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par order croissant.
order-ordersuccess_chance-success_chancename-nameNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/opportunite-etapes?filter%5Bstatus%5D=1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"name": "aut",
"order": 2090933724,
"success_chance": 79,
"color": null,
"status": 1,
"created_at": null,
"updated_at": null,
"deleted_at": null
},
{
"name": "nostrum",
"order": 913548233,
"success_chance": 30,
"color": null,
"status": 1,
"created_at": null,
"updated_at": null,
"deleted_at": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
curl --request GET \
--get "https://api.dendreo.com/v2/opportunite-etapes/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"name": "aut",
"order": 2090933724,
"success_chance": 79,
"color": null,
"status": 1,
"created_at": null,
"updated_at": null,
"deleted_at": null
}
}
curl --request POST \
"https://api.dendreo.com/v2/opportunite-etapes" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"name\": \"Négociation\",
\"success_chance\": 60,
\"color\": \"#a3d4f7\"
}"
{
"data": {
"name": "architecto",
"order": 2137449171,
"success_chance": 87,
"color": null,
"status": 1,
"created_at": null,
"updated_at": null,
"deleted_at": null
}
}
curl --request PATCH \
"https://api.dendreo.com/v2/opportunite-etapes/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"name\": \"Négociation\",
\"success_chance\": 60,
\"color\": \"#a3d4f7\"
}"
{
"data": {
"name": "architecto",
"order": 2137449171,
"success_chance": 87,
"color": null,
"status": 1,
"created_at": null,
"updated_at": null,
"deleted_at": null
}
}
Refusée avec un code 400 pour les étapes dont la probabilité de succès vaut 0 ou 100 %.
curl --request DELETE \
"https://api.dendreo.com/v2/opportunite-etapes/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.
curl --request POST \
"https://api.dendreo.com/v2/opportunite-etapes/1/restore" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"name": "aut",
"order": 2090933724,
"success_chance": 79,
"color": null,
"status": 1,
"created_at": null,
"updated_at": null,
"deleted_at": null
}
}
Le bloc extranet (message_extranet, extranet_url, extranet_code, extranet_autologin_url) n'est renvoyé que si le participant a un accès extranet. Les identifiants LMS (*_user_id) ne sont renvoyés que pour les LMS activés sur le compte, et les champs OGDPC que si l'option OGDPC est active.
salarie, liberal, mixte, armee ou centre_conv.Les champs additionnels non chiffrés du compte, hors fichiers, boutons et appels d'API, sont aussi filtrables par filter[<nom du champ>] : valeur exacte pour un champ relation, date ou liste, 0, 1, true ou false pour un booléen, recherche partielle sinon.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Nom du pays de naissance (France). Plusieurs pays séparés par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Nom du pays (France). Plusieurs pays séparés par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.
withonlyDate (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules. media ajoute photo_url.
centresentreprisecontactformateur_liemediaChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par nom si le compte affiche les noms au format « Nom Prénom », par prénom sinon.
nom-nomprenom-prenomcreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/participants" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"civilite": "Mme.",
"nom": "Berger",
"prenom": "Suzanne",
"email": "suzanne.berger432@tele2.fr",
"commentaires": null,
"numero_compte_client": null,
"numero_compte_client_auxiliaire": null,
"infos_adf": null,
"portable": "+3306 49 52 22 39",
"fonction": null,
"statut_bpf": "salarie",
"niveau_diplome": null,
"date_de_naissance": "2002-12-26",
"ville_naissance": null,
"departement_naissance": null,
"adresse": "427, boulevard Richard",
"code_postal": "51120",
"ville": "MONDEMENT MONTGIVROUX",
"pays_alpha2": "FR",
"id_entreprise": 560,
"particulier": false,
"id_externe": null,
"global_visible": false,
"id_contact": null,
"formateur_lie_id": null,
"newsletter_optin": false,
"nom_naissance": null,
"pays_naissance_alpha2": null,
"num_forprev": null,
"numero_secu": null,
"langue_principale": null,
"langues_secondaires": [],
"post_it_commercial": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/kr7f1zck32xA2wls38wdc9kt4q5dq5rqgf6w7m54gb5f4s6f3yvsw8tkkn8248dl3fwAkmsn3vd22vbqkbww3rzl4jmhqzbw48nf39b5h37vgwl338gdqvdxgrmxAnjvjbmcwwdsl17x4pj8",
"id_centre_de_formation": "",
"pays": "countries.FR",
"pays_naissance": null,
"responsable_type": null,
"responsable_id": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
},
{
"civilite": "Mme.",
"nom": "Marques",
"prenom": "Astrid",
"email": "astrid.marques35933@noos.fr",
"commentaires": null,
"numero_compte_client": null,
"numero_compte_client_auxiliaire": null,
"infos_adf": null,
"portable": "+3306 29 27 89 79",
"fonction": null,
"statut_bpf": "salarie",
"niveau_diplome": null,
"date_de_naissance": "1974-09-16",
"ville_naissance": null,
"departement_naissance": null,
"adresse": "888, avenue Thibault Tessier",
"code_postal": "31370",
"ville": "LAUTIGNAC",
"pays_alpha2": "FR",
"id_entreprise": 561,
"particulier": false,
"id_externe": null,
"global_visible": false,
"id_contact": null,
"formateur_lie_id": null,
"newsletter_optin": false,
"nom_naissance": null,
"pays_naissance_alpha2": null,
"num_forprev": null,
"numero_secu": null,
"langue_principale": null,
"langues_secondaires": [],
"post_it_commercial": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/g7yd15dp3y7gc8krljj2m5bzjbwvqzkhg872yndymyyA3n5ngvdhAwkglbfA3nkbkbAwksswgz2wsv54481w38s4nbdf18tg3rbgkrz5h3yhgslkj25gm85wpblhky6xljqs95cvkAzh4pj8",
"id_centre_de_formation": "",
"pays": "countries.FR",
"pays_naissance": null,
"responsable_type": null,
"responsable_id": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Relations à inclure dans la réponse, séparées par des virgules. media ajoute photo_url.
centresentreprisecontactformateur_liemediacurl --request GET \
--get "https://api.dendreo.com/v2/participants/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"civilite": "Mme.",
"nom": "Berger",
"prenom": "Suzanne",
"email": "suzanne.berger432@tele2.fr",
"commentaires": null,
"numero_compte_client": null,
"numero_compte_client_auxiliaire": null,
"infos_adf": null,
"portable": "+3306 49 52 22 39",
"fonction": null,
"statut_bpf": "salarie",
"niveau_diplome": null,
"date_de_naissance": "2002-12-26",
"ville_naissance": null,
"departement_naissance": null,
"adresse": "427, boulevard Richard",
"code_postal": "39130",
"ville": "COGNA",
"pays_alpha2": "FR",
"id_entreprise": 562,
"particulier": false,
"id_externe": null,
"global_visible": false,
"id_contact": null,
"formateur_lie_id": null,
"newsletter_optin": false,
"nom_naissance": null,
"pays_naissance_alpha2": null,
"num_forprev": null,
"numero_secu": null,
"langue_principale": null,
"langues_secondaires": [],
"post_it_commercial": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/l2529864pfywkm5wnf3vqvdsjvsx4s5lnqyg4q54mnhdm7dbm8fts6ts48gw9AdfjvbfA5bzgrsgAyrwjf1vgA5d3zkgw8ldmfffmnz5hjttczdv4vgw555vnfh22qkq3rcdgtkmnnww4pj8",
"id_centre_de_formation": "",
"pays": "countries.FR",
"pays_naissance": null,
"responsable_type": null,
"responsable_id": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Attention : si votre participant est un Particulier (personne en recherche d'emploi, indépendant, CPF autonome), vous ne devriez pas utiliser cet endpoint, mais plutôt l'endpoint Particuliers.
Rattacher le participant à une entreprise
Il existe quatre façons de rattacher un participant à une entreprise, évaluées dans l'ordre de préférence suivant :id_entreprise : l'existence est vérifiéeentreprise_raison_sociale : une recherche est effectuée sur le champ raison_sociale, le premier résultat est pris en compteentreprise_id_externe : une recherche est effectuée sur le champ id_externe, seul un résultat exact est pris en compteentreprise_siret : une recherche est effectuée sur le champ legal_identifier (Numéro d'identification entreprise), le premier résultat est pris en comptecurl --request POST \
"https://api.dendreo.com/v2/participants" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"id_entreprise\": 1,
\"nom\": \"Dupont\",
\"prenom\": \"Jean\",
\"nom_naissance\": \"Martin\",
\"statut_bpf\": \"salarie\",
\"civilite\": \"M.\",
\"fonction\": \"Responsable formation\",
\"email\": \"jean.dupont@example.com\",
\"langue_principale\": \"fr\",
\"secondaries_languages\": \"[en, es]\",
\"newsletter_optin\": true,
\"portable\": \"+33612345678\",
\"id_contact\": 12,
\"formateur_lie_id\": 4,
\"date_de_naissance\": \"1990-12-31\",
\"pays_naissance_alpha2\": \"FR\",
\"ville_naissance\": \"Lyon\",
\"departement_naissance\": \"Rhône\",
\"niveau_diplome\": \"bac\",
\"adresse\": \"10 rue de la Paix\",
\"code_postal\": \"75002\",
\"ville\": \"Paris\",
\"pays_alpha2\": \"FR\",
\"commentaires\": \"Participant ayant des besoins spécifiques.\",
\"infos_adf\": \"Infos ADF\",
\"num_forprev\": \"FPV-2026-0001\",
\"numero_compte_client\": \"411DUPONT\",
\"numero_compte_client_auxiliaire\": \"AUX-411DUPONT\",
\"id_externe\": \"a3f7c2c1-1111-2222-3333-9f8e7d6c5b4a\",
\"numero_secu\": \"1900175123456 78\",
\"message_extranet\": \"Bienvenue sur votre extranet.\",
\"entreprise_raison_sociale\": \"ACME Formation\",
\"entreprise_id_externe\": \"ext_123\",
\"entreprise_siret\": \"73282932000074\"
}"
{
"data": {
"civilite": "M.",
"nom": "Pages",
"prenom": "Raymond",
"email": "raymond.pages89365@wanadoo.fr",
"commentaires": null,
"numero_compte_client": null,
"numero_compte_client_auxiliaire": null,
"infos_adf": null,
"portable": "+3306 44 52 25 35",
"fonction": null,
"statut_bpf": "salarie",
"niveau_diplome": null,
"date_de_naissance": "2002-01-26",
"ville_naissance": null,
"departement_naissance": null,
"adresse": "81, rue André Bazin",
"code_postal": "64300",
"ville": "SAULT DE NAVAILLES",
"pays_alpha2": "FR",
"id_entreprise": 563,
"particulier": false,
"id_externe": null,
"global_visible": false,
"id_contact": null,
"formateur_lie_id": null,
"newsletter_optin": false,
"nom_naissance": null,
"pays_naissance_alpha2": null,
"num_forprev": null,
"numero_secu": null,
"langue_principale": null,
"langues_secondaires": [],
"post_it_commercial": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/4v5swzcxgbzx4zc5g8yAw6tyjz1xs5tdpb6d3qscmvxf1rll4b2xmncmg3525ntvj36f1s6rkjc2y9spnrhf39ktm7yvmylgjb5vArr5hj725z6hgrhwcq6pkr5vcs5dgfbg986n4fzAcpj8",
"id_centre_de_formation": "",
"pays": "countries.FR",
"pays_naissance": null,
"responsable_type": null,
"responsable_id": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Attention : si votre participant est un Particulier (personne en recherche d'emploi, indépendant, CPF autonome), vous ne devriez pas utiliser cet endpoint, mais plutôt l'endpoint Particuliers.
Rattacher le participant à une entreprise
Il existe quatre façons de rattacher un participant à une entreprise, évaluées dans l'ordre de préférence suivant :id_entreprise : l'existence est vérifiéeentreprise_raison_sociale : une recherche est effectuée sur le champ raison_sociale, le premier résultat est pris en compteentreprise_id_externe : une recherche est effectuée sur le champ id_externe, seul un résultat exact est pris en compteentreprise_siret : une recherche est effectuée sur le champ legal_identifier (Numéro d'identification entreprise), le premier résultat est pris en comptecurl --request PATCH \
"https://api.dendreo.com/v2/participants/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"id_entreprise\": 1,
\"nom\": \"Dupont\",
\"prenom\": \"Jean\",
\"nom_naissance\": \"Martin\",
\"statut_bpf\": \"salarie\",
\"civilite\": \"M.\",
\"fonction\": \"Responsable formation\",
\"email\": \"jean.dupont@example.com\",
\"langue_principale\": \"fr\",
\"secondaries_languages\": \"[en, es]\",
\"newsletter_optin\": true,
\"portable\": \"+33612345678\",
\"id_contact\": 12,
\"formateur_lie_id\": 4,
\"date_de_naissance\": \"1990-12-31\",
\"pays_naissance_alpha2\": \"FR\",
\"ville_naissance\": \"Lyon\",
\"departement_naissance\": \"Rhône\",
\"niveau_diplome\": \"bac\",
\"adresse\": \"10 rue de la Paix\",
\"code_postal\": \"75002\",
\"ville\": \"Paris\",
\"pays_alpha2\": \"FR\",
\"commentaires\": \"Participant ayant des besoins spécifiques.\",
\"infos_adf\": \"Infos ADF\",
\"num_forprev\": \"FPV-2026-0001\",
\"numero_compte_client\": \"411DUPONT\",
\"numero_compte_client_auxiliaire\": \"AUX-411DUPONT\",
\"id_externe\": \"a3f7c2c1-1111-2222-3333-9f8e7d6c5b4a\",
\"numero_secu\": \"1900175123456 78\",
\"message_extranet\": \"Bienvenue sur votre extranet.\",
\"entreprise_raison_sociale\": \"ACME Formation\",
\"entreprise_id_externe\": \"ext_123\",
\"entreprise_siret\": \"73282932000074\",
\"date_changement_entreprise\": \"2026-01-01\",
\"date_changement_entreprise_id\": 10
}"
{
"data": {
"civilite": "M.",
"nom": "Pages",
"prenom": "Raymond",
"email": "raymond.pages89365@wanadoo.fr",
"commentaires": null,
"numero_compte_client": null,
"numero_compte_client_auxiliaire": null,
"infos_adf": null,
"portable": "+3306 44 52 25 35",
"fonction": null,
"statut_bpf": "salarie",
"niveau_diplome": null,
"date_de_naissance": "2002-01-26",
"ville_naissance": null,
"departement_naissance": null,
"adresse": "81, rue André Bazin",
"code_postal": "50480",
"ville": "BLOSVILLE",
"pays_alpha2": "FR",
"id_entreprise": 564,
"particulier": false,
"id_externe": null,
"global_visible": false,
"id_contact": null,
"formateur_lie_id": null,
"newsletter_optin": false,
"nom_naissance": null,
"pays_naissance_alpha2": null,
"num_forprev": null,
"numero_secu": null,
"langue_principale": null,
"langues_secondaires": [],
"post_it_commercial": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/mq6tgmzyj81vqmly3r8hAq62kr3xgnctmy6v26cgnvAAc6sn3rdtc6cppfbgqmcbnq524tzvnz3ggs6j4nftk7bxkbrAgtrxmrhdmnj5hj3Akn5tmnxhsncvgj5t2wkrgjnh4ylkm26vcpj8",
"id_centre_de_formation": "",
"pays": "countries.FR",
"pays_naissance": null,
"responsable_type": null,
"responsable_id": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
curl --request DELETE \
"https://api.dendreo.com/v2/participants/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.
curl --request POST \
"https://api.dendreo.com/v2/participants/9/restore" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"civilite": "Mme.",
"nom": "Berger",
"prenom": "Suzanne",
"email": "suzanne.berger432@tele2.fr",
"commentaires": null,
"numero_compte_client": null,
"numero_compte_client_auxiliaire": null,
"infos_adf": null,
"portable": "+3306 49 52 22 39",
"fonction": null,
"statut_bpf": "salarie",
"niveau_diplome": null,
"date_de_naissance": "2002-12-26",
"ville_naissance": null,
"departement_naissance": null,
"adresse": "427, boulevard Richard",
"code_postal": "70600",
"ville": "PERCEY LE GRAND",
"pays_alpha2": "FR",
"id_entreprise": 565,
"particulier": false,
"id_externe": null,
"global_visible": false,
"id_contact": null,
"formateur_lie_id": null,
"newsletter_optin": false,
"nom_naissance": null,
"pays_naissance_alpha2": null,
"num_forprev": null,
"numero_secu": null,
"langue_principale": null,
"langues_secondaires": [],
"post_it_commercial": null,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/gvwA7zkb3zv2AAsqjrlt4wdjlflAgqswpfk2mtjzn82w2wld4b2dm86hpf7w7wjlgbkA2m5znjgts4kn4vbt2skf4bsgsAzzjzgg9nr5hjAt3mczkb6hq4lcgf7xs6tzk76A2rtfkn5vcpj8",
"id_centre_de_formation": "",
"pays": "countries.FR",
"pays_naissance": null,
"responsable_type": null,
"responsable_id": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Une salle est interne (dans un centre de formation), externe (adresse libre), virtuelle (e-learning) ou chez le client (dans une entreprise, ou à l'extérieur pour son compte). emplacement_cible donne ce type et emplacement_id la référence associée : l'identifiant du centre pour une salle interne, celui de l'entreprise pour une salle chez le client.
emplacement_cible vide les champs sans objet pour le nouveau type : url_connexion pour une salle interne, externe ou chez le client ; adresse, code_postal, ville et pays_alpha2 pour une salle interne, virtuelle ou dans l'entreprise ; lien_google_maps pour une salle virtuelle.interne vide nom_contact, telephone et lien_google_maps, et ces champs sont ignorés sur une salle déjà interne.id_centre_de_formation, sauf si elle est visible dans tous les centres.id_centre_de_formation remplace la visibilité de la salle par les centres envoyés ; vide, la salle est visible dans tous les centres.lien_google_maps est normalisé et url_connexion est complétée en https:// si le protocole manque.Les champs additionnels non chiffrés du compte, hors fichiers, boutons et appels d'API, sont aussi filtrables par filter[<nom du champ>] : valeur exacte pour un champ relation, date ou liste, 0, 1, true ou false pour un booléen, recherche partielle sinon.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Filtre les salles internes (1) ou externes (0).
01Filtre les salles virtuelles (1) ou non (0).
01Filtre les salles masquées du Catalogue Public (1) ou visibles (0).
01Filtre les salles visibles dans ce(s) centre(s) de formation, séparés par des virgules. Une salle visible dans tous les centres est toujours retournée ; 0 seul ne retourne que ces salles.
Filtre par type d'emplacement.
CentresDeFormationEntrepriseRecherche sur l'intitulé, l'adresse, la ville et le code postal.
Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.
withonlyDate (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules. emplacement : le centre de formation ou l'entreprise de la salle, avec les champs additionnels de l'entreprise. centres : les centres dans lesquels la salle est visible, toujours sous forme de tableau.
emplacementcentresChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par intitule croissant.
intitule-intitulecapacite_max-capacite_maxcreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/salles-de-formation?filter%5Binside%5D=1&filter%5Belearning%5D=0&filter%5Binvisible_catalogue%5D=0&filter%5Bid_centre_de_formation%5D=1%2C2&filter%5Bemplacement_type%5D=CentresDeFormation&filter%5Bsearch%5D=Amphith%C3%A9%C3%A2tre" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"intitule": "Jaune de Naples",
"name": "Jaune de Naples",
"color": null,
"status": null,
"capacite_max": 25,
"id_externe": null,
"inside": true,
"elearning": false,
"no_conflits": false,
"invisible_catalogue": false,
"commentaires_internes": null,
"adresse": "133 Boulevard de la Croix Rousse",
"code_postal": "69004",
"ville": "LYON",
"pays": "France",
"pays_alpha2": "FR",
"nom_contact": null,
"telephone": "+33102030405",
"email": null,
"lien_google_maps": "",
"url_connexion": null,
"acces_handicapes": null,
"acces_handicapes_desc": "",
"acces": "",
"accueil": "",
"id_centre_de_formation": "",
"emplacement_cible": "interne",
"emplacement_type": "CentresDeFormation",
"emplacement_id": 2,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/m8mfcAscjy6tk7tv4j524v6jk76ds9s34zmAw8sAgn8hsk5cknjx18spk8dg9ntdgvzg9pj5hjscw8zq3jjhkl5hf8x25tc5j8wvmtbtgAyfcpj8",
"image_map": null,
"pdf_map": null,
"visuel": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
},
{
"intitule": "Mastic",
"name": "Mastic",
"color": null,
"status": null,
"capacite_max": 8,
"id_externe": null,
"inside": true,
"elearning": false,
"no_conflits": false,
"invisible_catalogue": false,
"commentaires_internes": null,
"adresse": "133 Boulevard de la Croix Rousse",
"code_postal": "69004",
"ville": "LYON",
"pays": "France",
"pays_alpha2": "FR",
"nom_contact": null,
"telephone": "+33102030405",
"email": null,
"lien_google_maps": "",
"url_connexion": null,
"acces_handicapes": null,
"acces_handicapes_desc": "",
"acces": "",
"accueil": "",
"id_centre_de_formation": "",
"emplacement_cible": "interne",
"emplacement_type": "CentresDeFormation",
"emplacement_id": 1,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/gnzw5ykcmrjA4k5c4yzAwq6jgfrf3qzvhbywyvkcljcws9sthfAdcslmjj2g7tcbm8vfkpj5hjAf18dhjbhwyrdngnbh1tsxfn1A77cm3Azw4pj8",
"image_map": null,
"pdf_map": null,
"visuel": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Retourne la salle même si elle a été supprimée, sans qu'il soit nécessaire de passer filter[trashed] (ce paramètre ne s'applique qu'à l'index).
Relations à inclure dans la réponse, séparées par des virgules. emplacement : le centre de formation ou l'entreprise de la salle, avec les champs additionnels de l'entreprise. centres : les centres dans lesquels la salle est visible, toujours sous forme de tableau.
emplacementcentrescurl --request GET \
--get "https://api.dendreo.com/v2/salles-de-formation/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"intitule": "Jaune de Naples",
"name": "Jaune de Naples",
"color": null,
"status": null,
"capacite_max": 25,
"id_externe": null,
"inside": true,
"elearning": false,
"no_conflits": false,
"invisible_catalogue": false,
"commentaires_internes": null,
"adresse": "133 Boulevard de la Croix Rousse",
"code_postal": "69004",
"ville": "LYON",
"pays": "France",
"pays_alpha2": "FR",
"nom_contact": null,
"telephone": "+33102030405",
"email": null,
"lien_google_maps": "",
"url_connexion": null,
"acces_handicapes": null,
"acces_handicapes_desc": "",
"acces": "",
"accueil": "",
"id_centre_de_formation": "",
"emplacement_cible": "interne",
"emplacement_type": "CentresDeFormation",
"emplacement_id": 2,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/jzcv3rdbl2vww7trgflwctsxj83gsl5zmvdxAmdbjfsw3q5vjby23tkb42zvA8ljnj5t3pj5hjqtqAzqjvwxqvrlgvyh25s53fkt18zx4blvcpj8",
"image_map": null,
"pdf_map": null,
"visuel": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Une règle non respectée renvoie 422.
elearning) est créée hors détection des conflits et masquée du Catalogue Public, sauf si no_conflits ou invisible_catalogue est envoyé.curl --request POST \
"https://api.dendreo.com/v2/salles-de-formation" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"emplacement_cible\": \"interne\",
\"emplacement_id\": 2,
\"intitule\": \"Salle A\",
\"id_externe\": \"ext-salle-01\",
\"color\": \"FF0000\",
\"capacite_max\": 20,
\"no_conflits\": false,
\"invisible_catalogue\": false,
\"commentaires_internes\": \"Salle au 2ème étage\",
\"nom_contact\": \"Jean Dupont\",
\"adresse\": \"10 rue de la Paix\",
\"code_postal\": \"75002\",
\"ville\": \"Paris\",
\"pays\": \"France\",
\"pays_alpha2\": \"FR\",
\"telephone\": \"+33612345678\",
\"email\": \"contact@example.com\",
\"lien_google_maps\": \"https:\\/\\/maps.google.com\\/?q=Paris\",
\"url_connexion\": \"https:\\/\\/meet.example.com\\/salle-a\",
\"acces_handicapes\": true,
\"acces_handicapes_desc\": \"Ascenseur disponible\",
\"acces\": \"Parking disponible\",
\"accueil\": \"Accueil au rez-de-chaussée\"
}"
{
"data": {
"intitule": "Maïs",
"name": "Maïs",
"color": null,
"status": null,
"capacite_max": 22,
"id_externe": null,
"inside": false,
"elearning": false,
"no_conflits": false,
"invisible_catalogue": false,
"commentaires_internes": null,
"adresse": null,
"code_postal": null,
"ville": null,
"pays": "countries.FR",
"pays_alpha2": "FR",
"nom_contact": null,
"telephone": null,
"email": null,
"lien_google_maps": null,
"url_connexion": null,
"acces_handicapes": null,
"acces_handicapes_desc": null,
"acces": null,
"accueil": null,
"id_centre_de_formation": "",
"emplacement_cible": "cdf_outside",
"emplacement_type": "CentresDeFormation",
"emplacement_id": 0,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/kjrtkmbtn8tvgnkcfm7w4At4335cwr6zn1vA9nt3k1z23Atkkbmd3scx3n6xc7dqn1yfspj5hjsggtlklfxxqwtsp1ydml6y38bgsyzymfww4pj8",
"image_map": null,
"pdf_map": null,
"visuel": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Seuls les champs envoyés sont modifiés. Une règle non respectée renvoie 422.
POST /{id}/restore.deleted_at est ignoré : la restauration ne passe que par POST /{id}/restore.no_conflits recalcule les conflits de la salle et de ses événements.curl --request PATCH \
"https://api.dendreo.com/v2/salles-de-formation/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"emplacement_cible\": \"interne\",
\"emplacement_id\": 2,
\"intitule\": \"Salle A\",
\"id_externe\": \"ext-salle-01\",
\"color\": \"FF0000\",
\"capacite_max\": 20,
\"no_conflits\": false,
\"invisible_catalogue\": false,
\"commentaires_internes\": \"Salle au 2ème étage\",
\"nom_contact\": \"Jean Dupont\",
\"adresse\": \"10 rue de la Paix\",
\"code_postal\": \"75002\",
\"ville\": \"Paris\",
\"pays\": \"France\",
\"pays_alpha2\": \"FR\",
\"telephone\": \"+33612345678\",
\"email\": \"contact@example.com\",
\"lien_google_maps\": \"https:\\/\\/maps.google.com\\/?q=Paris\",
\"url_connexion\": \"https:\\/\\/meet.example.com\\/salle-a\",
\"acces_handicapes\": true,
\"acces_handicapes_desc\": \"Ascenseur disponible\",
\"acces\": \"Parking disponible\",
\"accueil\": \"Accueil au rez-de-chaussée\"
}"
{
"data": {
"intitule": "Maïs",
"name": "Maïs",
"color": null,
"status": null,
"capacite_max": 22,
"id_externe": null,
"inside": false,
"elearning": false,
"no_conflits": false,
"invisible_catalogue": false,
"commentaires_internes": null,
"adresse": null,
"code_postal": null,
"ville": null,
"pays": "countries.FR",
"pays_alpha2": "FR",
"nom_contact": null,
"telephone": null,
"email": null,
"lien_google_maps": null,
"url_connexion": null,
"acces_handicapes": null,
"acces_handicapes_desc": null,
"acces": null,
"accueil": null,
"id_centre_de_formation": "",
"emplacement_cible": "cdf_outside",
"emplacement_type": "CentresDeFormation",
"emplacement_id": 0,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/g1zhsrkzgr7tmAjqgnghs7dqlb2xk86mk8hA4n6bnrldqtsygvf2g5jxkzjfkA5k3vxx4pj5h36wg76bjr7A5rk5kbtwsAjp4vkgqnzqgr72cpj8",
"image_map": null,
"pdf_map": null,
"visuel": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
La salle reste consultable par GET /{id} et avec filter[trashed]. Elle se restaure par POST /{id}/restore.
curl --request DELETE \
"https://api.dendreo.com/v2/salles-de-formation/9" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.
curl --request POST \
"https://api.dendreo.com/v2/salles-de-formation/9/restore" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"intitule": "Jaune de Naples",
"name": "Jaune de Naples",
"color": null,
"status": null,
"capacite_max": 25,
"id_externe": null,
"inside": true,
"elearning": false,
"no_conflits": false,
"invisible_catalogue": false,
"commentaires_internes": null,
"adresse": "133 Boulevard de la Croix Rousse",
"code_postal": "69004",
"ville": "LYON",
"pays": "France",
"pays_alpha2": "FR",
"nom_contact": null,
"telephone": "+33102030405",
"email": null,
"lien_google_maps": "",
"url_connexion": null,
"acces_handicapes": null,
"acces_handicapes_desc": "",
"acces": "",
"accueil": "",
"id_centre_de_formation": "",
"emplacement_cible": "interne",
"emplacement_type": "CentresDeFormation",
"emplacement_id": 2,
"ical_url": "https://public.dendreo.com/4rsxg81/ical/jzAx4qkmgvAv1slfkn2A3zbpjjz2AArlmfdv1nsggbrwwqtqjqzvm8dkk1vwy5t4jj62spj5hjgw2q54m8m2q6rvp3yw966b3n6wkm6lnf1vcpj8",
"image_map": null,
"pdf_map": null,
"visuel": null,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
duree_heures, en entrée comme en sortie.duree_heures: null restaure cet héritage.Les sessions dont le module est supprimé n'apparaissent pas, même avec filter[trashed] ; elles restent accessibles par GET /{id}.
Les champs additionnels non chiffrés du compte, hors fichiers, boutons et appels d'API, sont aussi filtrables par filter[<nom du champ>] : valeur exacte pour un champ relation, date ou liste, 0, 1, true ou false pour un booléen, recherche partielle sinon.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Filtre par identifiant(s) de centre de formation, séparés par des virgules. Une session portant le centre 0 (« Tous les centres ») reste toujours visible, quel que soit le centre demandé. 0 seul ne filtre rien (toutes les sessions sont retournées). Un élément non numérique est ignoré ; si aucun élément n'est numérique, le filtre ne s'applique pas.
Filtre par statut : 1 = ouverte, 0 = fermée.
01Filtre par visibilité dans le catalogue public : 1 = visible, 0 = masquée.
01Filtre par mode de tarification.
forfaitaireassiduiteSans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.
withonlyDate (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules. centre vaut null pour une session rattachée à « Tous les centres ».
responsablecentreChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant décroissant.
id-idcreated_at-created_atprix-prixactive-activeNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/sessions-permanentes?filter%5Bid_centre_de_formation%5D=1%2C2&filter%5Bactive%5D=1&filter%5Bvisible_cp%5D=1&filter%5Bmode_pricing%5D=forfaitaire" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"module_id": 168,
"salle_de_formation_id": 133,
"responsable_id": null,
"mode_pricing": "forfaitaire",
"rythmes": [],
"prix": null,
"duree_heures": 7,
"garantie": false,
"active": false,
"url_edof": null,
"id_centre_de_formation": 0,
"pre_requis": null,
"visible_cp": false,
"numero_complet": "P_",
"intitule": "P_ - Monteur-frigoriste",
"rythmes_readable": [],
"created_at": null,
"updated_at": null,
"deleted_at": null
},
{
"module_id": 169,
"salle_de_formation_id": 134,
"responsable_id": null,
"mode_pricing": "forfaitaire",
"rythmes": [],
"prix": null,
"duree_heures": 7,
"garantie": false,
"active": false,
"url_edof": null,
"id_centre_de_formation": 0,
"pre_requis": null,
"visible_cp": false,
"numero_complet": "P_",
"intitule": "P_ - Etancheur-bardeur",
"rythmes_readable": [],
"created_at": null,
"updated_at": null,
"deleted_at": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Retourne la session même si elle a été supprimée, sans qu'il soit nécessaire de passer filter[trashed] (ce paramètre ne s'applique qu'à l'index).
Relations à inclure dans la réponse, séparées par des virgules. centre vaut null pour une session rattachée à « Tous les centres ».
responsablecentrecurl --request GET \
--get "https://api.dendreo.com/v2/sessions-permanentes/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"module_id": 170,
"salle_de_formation_id": 135,
"responsable_id": null,
"mode_pricing": "forfaitaire",
"rythmes": [],
"prix": null,
"duree_heures": 7,
"garantie": false,
"active": false,
"url_edof": null,
"id_centre_de_formation": 0,
"pre_requis": null,
"visible_cp": false,
"numero_complet": "P_",
"intitule": "P_ - Monteur-frigoriste",
"rythmes_readable": [],
"created_at": null,
"updated_at": null,
"deleted_at": null
}
}
Le module et la salle de formation se désignent par leur identifiant (id_module, id_salle_de_formation) ou par leur identifiant externe (id_externe_module, id_externe_salle_de_formation). La réponse les renvoie sous les clés module_id et salle_de_formation_id.
curl --request POST \
"https://api.dendreo.com/v2/sessions-permanentes" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"id_module\": 1,
\"id_salle_de_formation\": 1,
\"id_centre_de_formation\": 0,
\"mode_pricing\": \"forfaitaire\",
\"active\": true,
\"visible_cp\": false,
\"rythmes\": [
7
]
}"
{
"data": {
"module_id": 171,
"salle_de_formation_id": 136,
"responsable_id": null,
"mode_pricing": "forfaitaire",
"rythmes": [],
"prix": null,
"duree_heures": 7,
"garantie": false,
"active": false,
"url_edof": null,
"id_centre_de_formation": 0,
"pre_requis": null,
"visible_cp": false,
"numero_complet": "P_",
"intitule": "P_ - Designer produit",
"rythmes_readable": [],
"created_at": null,
"updated_at": null,
"deleted_at": null
}
}
id_module et id_externe_module ne sont pas modifiables : ils sont ignorés sans erreur.
curl --request PATCH \
"https://api.dendreo.com/v2/sessions-permanentes/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"id_salle_de_formation\": 1,
\"id_centre_de_formation\": 0,
\"mode_pricing\": \"forfaitaire\",
\"active\": true,
\"visible_cp\": false,
\"rythmes\": [
4
]
}"
{
"data": {
"module_id": 172,
"salle_de_formation_id": 137,
"responsable_id": null,
"mode_pricing": "forfaitaire",
"rythmes": [],
"prix": null,
"duree_heures": 7,
"garantie": false,
"active": false,
"url_edof": null,
"id_centre_de_formation": 0,
"pre_requis": null,
"visible_cp": false,
"numero_complet": "P_",
"intitule": "P_ - Designer produit",
"rythmes_readable": [],
"created_at": null,
"updated_at": null,
"deleted_at": null
}
}
La session reste consultable par GET /{id} et, si son module n'est pas supprimé, avec filter[trashed]. Elle se restaure par POST /{id}/restore.
curl --request DELETE \
"https://api.dendreo.com/v2/sessions-permanentes/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.
curl --request POST \
"https://api.dendreo.com/v2/sessions-permanentes/1/restore" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"module_id": 173,
"salle_de_formation_id": 138,
"responsable_id": null,
"mode_pricing": "forfaitaire",
"rythmes": [],
"prix": null,
"duree_heures": 7,
"garantie": false,
"active": false,
"url_edof": null,
"id_centre_de_formation": 0,
"pre_requis": null,
"visible_cp": false,
"numero_complet": "P_",
"intitule": "P_ - Monteur-frigoriste",
"rythmes_readable": [],
"created_at": null,
"updated_at": null,
"deleted_at": null
}
}
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Filtre par statut : 1 = actifs, 0 = désactivés.
01Filtre par catégorie d'opération : services ou biens.
servicesbiensSans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.
withonlyDate (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditadministrateurDeleteChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.
id-idintitule-intitulestatus-statuscreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/produit-types?filter%5Bstatus%5D=1&filter%5Bcategorie_operation%5D=services" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"id": 21,
"id_categorie_produit": 21,
"intitule": "Certification",
"color": "#bd6da5",
"categorie_operation": "services",
"status": true,
"created_at": "2026-11-10 17:50:10",
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
},
{
"id": 69,
"id_categorie_produit": 69,
"intitule": "Location de salle",
"color": "#ca0f71",
"categorie_operation": "services",
"status": true,
"created_at": "2026-11-10 17:50:10",
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Retourne le type même s'il a été supprimé, sans qu'il soit nécessaire de passer filter[trashed] (ce paramètre ne s'applique qu'à l'index).
Relations à inclure dans la réponse, séparées par des virgules.
administrateurAddadministrateurEditadministrateurDeletecurl --request GET \
--get "https://api.dendreo.com/v2/produit-types/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"id": 99,
"id_categorie_produit": 99,
"intitule": "Licence e-learning",
"color": "#bd6da5",
"categorie_operation": "services",
"status": true,
"created_at": "2026-11-10 17:50:10",
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Nécessite l'option multi-produits sur le compte.
curl --request POST \
"https://api.dendreo.com/v2/produit-types" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"intitule\": \"Coaching\",
\"color\": \"#1b86d8\",
\"categorie_operation\": \"services\"
}"
{
"data": {
"id": 38,
"id_categorie_produit": 38,
"intitule": "Location de salle",
"color": "#0eed3d",
"categorie_operation": "services",
"status": true,
"created_at": "2026-11-10 17:50:10",
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Nécessite l'option multi-produits sur le compte. Un type supprimé n'est pas modifiable. Le type système « Formation » (identifiant 1) n'accepte que le changement de couleur : modifier son intitulé, son statut ou sa catégorie d'opération est refusé avec un code 403.
curl --request PATCH \
"https://api.dendreo.com/v2/produit-types/2" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"intitule\": \"Coaching\",
\"color\": \"#1b86d8\",
\"categorie_operation\": \"services\",
\"status\": true
}"
{
"data": {
"id": 92,
"id_categorie_produit": 92,
"intitule": "Matériel pédagogique",
"color": "#0eed3d",
"categorie_operation": "services",
"status": true,
"created_at": "2026-11-10 17:50:10",
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Suppression logique, nécessite l'option multi-produits sur le compte. Le type reste lisible par GET /{id} et par filter[trashed] à l'index. Refusée avec un code 403 pour le type système « Formation » (identifiant 1), et avec un code 409 pour un type relié à au moins un module non supprimé.
curl --request DELETE \
"https://api.dendreo.com/v2/produit-types/2" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]
Restaure un type supprimé (deleted_at remis à null), nécessite l'option multi-produits sur le compte. Renvoie 200 dans tous les cas où la ressource existe, qu'elle ait été supprimée ou non (idempotent).
curl --request POST \
"https://api.dendreo.com/v2/produit-types/2/restore" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"id": 68,
"id_categorie_produit": 68,
"intitule": "Licence e-learning",
"color": "#bd6da5",
"categorie_operation": "services",
"status": true,
"created_at": "2026-11-10 17:50:10",
"id_add": null,
"updated_at": null,
"id_edit": null,
"deleted_at": null,
"id_delete": null
}
}
Raccourci en lecture seule : pour un ou plusieurs Participants, remonte en un seul appel l'ensemble de leurs tâches extranet en attente — émargements électroniques, documents à signer, questionnaires de satisfaction et auto-positionnements. Cet endpoint ne supporte ni include ni sort.
data est toujours un tableau, y compris pour un seul Participant, et taches aussi (vide si rien n'est en attente). counts ne contient que les catégories demandées via types ; la catégorie satisfaction en est absente lorsque la satisfaction est désactivée sur l'organisme, même si types la demande. Le délai d'émargement est celui du centre de formation de l'action de formation, à défaut celui de la configuration globale. Un document à signer hors action de formation a id_action_de_formation à null.
Catégories de tâches à remonter, séparées par des virgules, parmi esignature, esignature-doc, satisfaction et auto-positionnement. Une valeur inconnue est ignorée ; si aucune catégorie valide ne subsiste, les quatre sont retournées. Max : 255 caractères.
À 1, suffixe chaque URL du code extranet du Participant pour une connexion automatique.
01curl --request GET \
--get "https://api.dendreo.com/v2/participants/9/taches?types=esignature%2Csatisfaction&autologin=1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"id_participant": 17,
"counts": {
"esignature": 1,
"esignature-doc": 1,
"satisfaction": {
"chaud": 1,
"froid": 0
},
"auto-positionnement": {
"pre": 1,
"post": 0
}
},
"taches": [
{
"type": "esignature",
"intitule": "Emargement électronique",
"id_action_de_formation": 42,
"id_lcp": 501,
"creneau_date_debut": "2026-03-02 09:00:00",
"creneau_date_fin": "2026-03-02 12:30:00",
"url": "https://client.dendreo.com/extranet/participants/emargement/501/creer?token=ABC123"
},
{
"type": "esignature-doc",
"intitule": "Signature électronique d'un document",
"id_media": 731,
"date": "2026-02-20 16:05:00",
"id_action_de_formation": 42,
"url": "https://client.dendreo.com/extranet/participants/signatures/XYZ789/731?token=ABC123"
},
{
"type": "satisfaction",
"intitule": "Questionnaire de Satisfaction",
"questionnaire_type": "Satisfaction \"à chaud\"",
"id_action_de_formation": 42,
"id_lap": 88,
"url": "https://client.dendreo.com/extranet/participants/satisfaction/88?token=ABC123"
},
{
"type": "auto-positionnement",
"intitule": "Questionnaire d'Auto-positionnement",
"positionnement_type": "Formulaire pré-formation",
"id_action_de_formation": 42,
"id_lap": 88,
"url": "https://client.dendreo.com/extranet/participants/formulaire/88/pre-formation?token=ABC123"
}
]
}
]
}
Identifiants de Participants, séparés par des virgules.
Identifiants externes de Participants, séparés par des virgules.
Codes extranet de Participants, séparés par des virgules. Les tirets sont facultatifs.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Numéro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
Catégories de tâches à remonter, séparées par des virgules, parmi esignature, esignature-doc, satisfaction et auto-positionnement. Une valeur inconnue est ignorée ; si aucune catégorie valide ne subsiste, les quatre sont retournées. Max : 255 caractères.
À 1, suffixe chaque URL du code extranet du Participant pour une connexion automatique.
01curl --request GET \
--get "https://api.dendreo.com/v2/taches?filter%5Bid_participant%5D=17%2C18&filter%5Bid_externe%5D=EXT-17%2CEXT-18&filter%5Bcode_extranet%5D=681-130-278%2C004-512-903&types=esignature%2Csatisfaction&autologin=1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"id_participant": 17,
"counts": {
"esignature": 1,
"esignature-doc": 1,
"satisfaction": {
"chaud": 1,
"froid": 0
},
"auto-positionnement": {
"pre": 1,
"post": 0
}
},
"taches": [
{
"type": "esignature",
"intitule": "Emargement électronique",
"id_action_de_formation": 42,
"id_lcp": 501,
"creneau_date_debut": "2026-03-02 09:00:00",
"creneau_date_fin": "2026-03-02 12:30:00",
"url": "https://client.dendreo.com/extranet/participants/emargement/501/creer?token=ABC123"
},
{
"type": "esignature-doc",
"intitule": "Signature électronique d'un document",
"id_media": 731,
"date": "2026-02-20 16:05:00",
"id_action_de_formation": 42,
"url": "https://client.dendreo.com/extranet/participants/signatures/XYZ789/731?token=ABC123"
},
{
"type": "satisfaction",
"intitule": "Questionnaire de Satisfaction",
"questionnaire_type": "Satisfaction \"à chaud\"",
"id_action_de_formation": 42,
"id_lap": 88,
"url": "https://client.dendreo.com/extranet/participants/satisfaction/88?token=ABC123"
},
{
"type": "auto-positionnement",
"intitule": "Questionnaire d'Auto-positionnement",
"positionnement_type": "Formulaire pré-formation",
"id_action_de_formation": 42,
"id_lap": 88,
"url": "https://client.dendreo.com/extranet/participants/formulaire/88/pre-formation?token=ABC123"
}
]
}
],
"links": {
"first": "https://api.dendreo.com/v2/taches?page=1",
"last": null,
"prev": null,
"next": "https://api.dendreo.com/v2/taches?page=2"
},
"meta": {
"current_page": 1,
"current_page_url": "https://api.dendreo.com/v2/taches?page=1",
"from": 1,
"path": "https://api.dendreo.com/v2/taches",
"per_page": 15,
"to": 1
}
}
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Statut de l'étape : confirmée, non confirmée ou annulée. Plusieurs valeurs séparées par des virgules.
confirmednot_confirmedcancelledValeur exacte. Plusieurs valeurs séparées par des virgules.
Valeur exacte. Plusieurs valeurs séparées par des virgules.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[created_at][]=>=2026-01-01&filter[created_at][]=<=2026-12-31.
Date (2026-01-31) ou date et heure (2026-01-31 09:00:00), précédée d'un opérateur >=, <=, >, <, = ou <>. Sans opérateur, recherche par préfixe (2026, 2026-01). Une valeur qui n'est pas une date ne renvoie rien. Pour encadrer une période, passer le filtre en tableau : filter[updated_at][]=>=2026-01-01&filter[updated_at][]=<=2026-12-31.
Relations à inclure dans la réponse, séparées par des virgules.
parentchildrenChamps de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par ordre croissant.
id-idintitule-intituleordre-ordrecible-ciblecreated_at-created_atupdated_at-updated_atNuméro de la page, à partir de 1.
Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.
curl --request GET \
--get "https://api.dendreo.com/v2/adf-etapes" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": [
{
"intitule": "aut adipisci",
"cible": "intra",
"id_parent": null,
"ordre": 91,
"icon": "nego",
"color": "#79ca4d",
"type": "not_confirmed",
"type_label": "Non confirmée",
"favorite": false,
"default_adf": false,
"alerte_jours": null,
"calendar": true,
"show_catalogue": false,
"show_extranet_participant": false,
"show_extranet_formateur": false,
"show_extranet_entreprise": false,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
},
{
"intitule": "incidunt iure",
"cible": "intra",
"id_parent": null,
"ordre": 45,
"icon": "delete",
"color": "#52576d",
"type": "not_confirmed",
"type_label": "Non confirmée",
"favorite": false,
"default_adf": false,
"alerte_jours": null,
"calendar": true,
"show_catalogue": false,
"show_extranet_participant": false,
"show_extranet_formateur": false,
"show_extranet_entreprise": false,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
],
"links": {
"first": "/?page=1",
"last": null,
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"current_page_url": "/?page=1",
"from": 1,
"path": "/",
"per_page": 15,
"to": 2
}
}
Relations à inclure dans la réponse, séparées par des virgules.
parentchildrencurl --request GET \
--get "https://api.dendreo.com/v2/adf-etapes/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" {
"data": {
"intitule": "aut adipisci",
"cible": "intra",
"id_parent": null,
"ordre": 91,
"icon": "nego",
"color": "#79ca4d",
"type": "not_confirmed",
"type_label": "Non confirmée",
"favorite": false,
"default_adf": false,
"alerte_jours": null,
"calendar": true,
"show_catalogue": false,
"show_extranet_participant": false,
"show_extranet_formateur": false,
"show_extranet_entreprise": false,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
}
curl --request POST \
"https://api.dendreo.com/v2/adf-etapes" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"intitule\": \"Confirmée\",
\"cible\": \"inter\",
\"ordre\": 1,
\"type\": \"confirmed\",
\"icon\": \"accept\",
\"color\": \"#28a745\",
\"favorite\": false,
\"default_adf\": false,
\"alerte_jours\": 30,
\"calendar\": true,
\"show_catalogue\": true,
\"show_extranet_participant\": true,
\"show_extranet_formateur\": true,
\"show_extranet_entreprise\": true
}"
{
"data": {
"intitule": "architecto eius",
"cible": "inter",
"id_parent": null,
"ordre": 53,
"icon": "delete",
"color": "#b35e11",
"type": "not_confirmed",
"type_label": "Non confirmée",
"favorite": false,
"default_adf": false,
"alerte_jours": null,
"calendar": true,
"show_catalogue": false,
"show_extranet_participant": false,
"show_extranet_formateur": false,
"show_extranet_entreprise": false,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
}
curl --request PATCH \
"https://api.dendreo.com/v2/adf-etapes/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" \
--data "{
\"intitule\": \"Confirmée\",
\"cible\": \"inter\",
\"ordre\": 1,
\"type\": \"confirmed\",
\"icon\": \"accept\",
\"color\": \"#28a745\",
\"favorite\": false,
\"default_adf\": false,
\"alerte_jours\": 30,
\"calendar\": true,
\"show_catalogue\": true,
\"show_extranet_participant\": true,
\"show_extranet_formateur\": true,
\"show_extranet_entreprise\": true
}"
{
"data": {
"intitule": "architecto eius",
"cible": "inter",
"id_parent": null,
"ordre": 53,
"icon": "delete",
"color": "#b35e11",
"type": "not_confirmed",
"type_label": "Non confirmée",
"favorite": false,
"default_adf": false,
"alerte_jours": null,
"calendar": true,
"show_catalogue": false,
"show_extranet_participant": false,
"show_extranet_formateur": false,
"show_extranet_entreprise": false,
"created_at": null,
"id_add": null,
"updated_at": null,
"id_edit": null
}
}
Refusée avec un code 409 si l'étape contient des sous-étapes, ou si elle est utilisée par des Actions de Formation.
curl --request DELETE \
"https://api.dendreo.com/v2/adf-etapes/1" \
--header "Authorization: Bearer {VOTRE_CLE_API}" \
--header "of: {votre_compte}" \
--header "Content-Type: application/json" [Réponse vide]