Introduction

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.

Démarrage rapide

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.

Authentification

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.

Erreurs d'authentification

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."
}

Includes

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.

Filtres

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.

Syntaxe générale

?filter[champ]=valeur

Types de filtres disponibles

Filtres partiels

Recherche les enregistrements contenant la valeur fournie.

Exemple : ?filter[nom]=Jean trouvera "Jean Dupont", "Jean-Paul", etc.

Filtres multiples

Vous pouvez appliquer plusieurs filtres simultanément.

Exemple : ?filter[nom]=Jean&filter[statut]=actif

Filtres de date

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

Valeurs ignorées

Les valeurs suivantes sont automatiquement ignorées dans les filtres :

  • null
  • "" (chaîne vide)
  • [] (tableau vide)

Combinaison avec d'autres paramètres

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.

Tri

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

Pagination

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.

Traçabilité

Les ressources retournées par l'API incluent automatiquement des champs de traçabilité qui permettent de connaître l'historique des modifications.

Champs de base

Toutes les ressources incluent ces champs temporels :

  • created_at : Date et heure de création de la ressource
  • updated_at : Date et heure de la dernière modification
  • deleted_at : Date et heure de suppression (si la ressource supporte la suppression logique)

Dates et fuseau horaire

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 :

  • les horodatages techniques (created_at, updated_at, deleted_at et les autres champs en _at) sont en heure de Paris (Europe/Paris), heure d'été comprise ;
  • les dates et heures saisies dans Dendreo, comme le début et la fin d'une action de formation, sont l'heure locale du centre de formation, telle qu'elle a été saisie.

Les filtres de date attendent leurs valeurs dans le même fuseau que le champ filtré.

Champs d'audit avancés

Pour certaines ressources, des informations supplémentaires sur l'auteur des actions sont disponibles :

Informations sur les administrateurs

  • administrateur_add : Détails de l'administrateur qui a créé la ressource
  • administrateur_edit : Détails de l'administrateur qui a effectué la dernière modification
  • administrateur_delete : Détails de l'administrateur qui a supprimé la ressource

Inclusion des informations d'audit

Pour accéder aux informations détaillées des administrateurs, utilisez le paramètre include :

?include=administrateurAdd,administrateurEdit,administrateurDelete

Exemple de réponse

{
  "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.

Erreurs

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é."
        ]
    }
}

Limites de débit

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.

Actions commerciales

Lister les actions commerciales

GET
https://api.dendreo.com
/v2/actions-commerciales

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[date_action]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[date_relance]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[compte_rendu]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[priorite]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes (8)
  • entreprise
  • interlocuteurs
  • administrateurAdd
  • administrateurEdit
  • categorie
  • commerciaux
  • devis
  • parent
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.

Doit correspondre aux valeurs suivantes (12)
  • id
  • -id
  • id_action_commerciale
  • -id_action_commerciale
  • date_action
  • -date_action
  • date_relance
  • -date_relance
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Actions Commerciales\" (key = 'Ma clé')."
    ]
}

Récupérer une action commerciale

GET
https://api.dendreo.com
/v2/actions-commerciales/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes (8)
  • entreprise
  • interlocuteurs
  • administrateurAdd
  • administrateurEdit
  • categorie
  • commerciaux
  • devis
  • parent
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Actions Commerciales\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Actions de Formation

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é.

Règles de saisie (1)#
  • Les champs additionnels de type date s'écrivent et se lisent au format YYYY-MM-DD, sans partie horaire.

Lister les actions de formation

GET
https://api.dendreo.com
/v2/actions-de-formation

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.

filter[id_externe]
string

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[numero_complet]
string

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[search]
string

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.

filter[type]
string

Type de l'ADF. Toute autre valeur ne retourne aucune ADF.

Doit correspondre aux valeurs suivantes
  • inter
  • intra
  • hors_formation
filter[id_entreprise]
integer

Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.

filter[id_externe_entreprise]
string

Identifiant externe de l'entreprise. Plusieurs valeurs séparées par des virgules.

filter[id_etape_process]
integer

Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.

filter[id_module]
integer

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é.

filter[id_salle_de_formation]
integer

Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.

filter[id_formateur]
integer

Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.

filter[id_centre_de_formation]
integer

Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune ADF.

filter[date_debut]
string

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.

filter[date_fin]
string

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.

filter[trashed]
string

Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.

Doit correspondre aux valeurs suivantes
  • with
  • only
filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

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.

Doit correspondre aux valeurs suivantes
  • etapeProcess
  • visuel
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.

Doit correspondre aux valeurs suivantes (12)
  • date_debut
  • -date_debut
  • date_fin
  • -date_fin
  • intitule
  • -intitule
  • numero_complet
  • -numero_complet
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Actions de Formation\" (key = 'Ma clé')."
    ]
}

Récupérer une action de formation

GET
https://api.dendreo.com
/v2/actions-de-formation/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres de requête

include
string

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.

Doit correspondre aux valeurs suivantes
  • etapeProcess
  • visuel
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Actions de Formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer une action de formation

POST
https://api.dendreo.com
/v2/actions-de-formation

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.

Type et entreprise (4)#
  • 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.
  • L'entreprise se désigne par l'un de ces champs, lus dans cet ordre de priorité : 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.
Ajouter un module (5)#
  • 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.
  • Si le module a un formateur, un formateur sous-traitant ou une salle par défaut, 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.
Dates (5)#
  • Sans module, l'ADF est créée sans dates. Ses dates sont ensuite calculées à partir de ses modules.
  • Avec un module, date_debut est obligatoire et date_fin facultative.
  • Module hors formation sans dates : date_debut devient facultative.
  • Module hors formation avec l'option « Produit ayant des dates », sauf e-learning asynchrone : date_fin devient obligatoire.
  • ADF en mode figé (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 et numéro (2)#
  • 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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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>\"
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Actions de Formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"type\" est obligatoire",
    "errors": {
        "type": [
            "Le champ \"type\" est obligatoire"
        ]
    }
}

Mettre à jour une action de formation

PATCH
https://api.dendreo.com
/v2/actions-de-formation/{id}

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.

Ajouter un module (4)#
  • 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.
  • Les dates obligatoires sont celles de la création. Le mode figé se lit sur has_dates_contractuelles s'il est envoyé, sinon sur l'ADF.
  • Les dates de l'ADF sont recalculées à partir de ses modules.
Champs réservés à la création (3)#
  • 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.
ADF supprimée ou inconnue (2)#
  • ADF supprimée : 404 avec le message L'ADF est désactivée.. La restaurer d'abord avec POST /{id}/restore.
  • ADF inconnue : 404 avec le message Entité non trouvée..

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres du body

Exemple de requête:
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>\"
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Actions de Formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"type\" est obligatoire",
    "errors": {
        "type": [
            "Le champ \"type\" est obligatoire"
        ]
    }
}

Supprimer une action de formation

DELETE
https://api.dendreo.com
/v2/actions-de-formation/{id}

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Actions de Formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Vous ne pouvez pas supprimer une ADF pour laquelle il y a des Financements, des Factures, des frais pédagogiques déjà facturés ou des Participants qui ne peuvent être désinscrits."
}

Restaurer une action de formation

POST
https://api.dendreo.com
/v2/actions-de-formation/{id}/restore

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9
Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Actions de Formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Administrateurs

Lister les administrateurs

GET
https://api.dendreo.com
/v2/administrateurs

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[nom]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[prenom]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[email]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[telephone]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[trashed]
string

Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.

Doit correspondre aux valeurs suivantes
  • with
  • only
filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
  • administrateurDelete
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.

Doit correspondre aux valeurs suivantes (14)
  • id
  • -id
  • id_administrateur
  • -id_administrateur
  • nom
  • -nom
  • prenom
  • -prenom
  • telephone
  • -telephone
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Administrateurs\" (key = 'Ma clé')."
    ]
}

Récupérer un administrateur

GET
https://api.dendreo.com
/v2/administrateurs/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
  • administrateurDelete
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Administrateurs\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer un administrateur

POST
https://api.dendreo.com
/v2/administrateurs

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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
        }
    ]
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Administrateurs\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"nom\" est obligatoire",
    "errors": {
        "nom": [
            "Le champ \"nom\" est obligatoire"
        ]
    }
}

Mettre à jour un administrateur

PATCH
https://api.dendreo.com
/v2/administrateurs/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres du body

Exemple de requête:
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
        }
    ]
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Administrateurs\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"adresse e-mail\" est obligatoire",
    "errors": {
        "email": [
            "Le champ \"adresse e-mail\" est obligatoire"
        ]
    }
}

Supprimer un administrateur

DELETE
https://api.dendreo.com
/v2/administrateurs/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Administrateurs\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Restaurer un administrateur

POST
https://api.dendreo.com
/v2/administrateurs/{id}/restore

Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9
Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Administrateurs\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Budgets

Ces endpoints sont en cours de développement

Lister les budgets

GET
https://api.dendreo.com
/v2/budgets

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_budget_type]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_action_de_formation]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[devis_detail_id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_module]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_lap]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_heure_type]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_laf]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_lmf]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[type]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[intitule]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[refacturable]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[parent_id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[expense_id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[formateur_facture_id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[categorie_operation]
string

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
  • parent
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.

Doit correspondre aux valeurs suivantes (8)
  • id_action_de_formation
  • -id_action_de_formation
  • id
  • -id
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Budgets\" (key = 'Ma clé')."
    ]
}

Récupérer un budget

GET
https://api.dendreo.com
/v2/budgets/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
  • parent
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Budgets\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer un budget

POST
https://api.dendreo.com
/v2/budgets

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Budgets\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"id action de formation\" est obligatoire",
    "errors": {
        "id_action_de_formation": [
            "Le champ \"id action de formation\" est obligatoire"
        ]
    }
}

Mettre à jour un budget

PATCH
https://api.dendreo.com
/v2/budgets/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres du body

Exemple de requête:
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
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Budgets\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"id lap\" est obligatoire",
    "errors": {
        "id_lap": [
            "Le champ \"id lap\" est obligatoire"
        ]
    }
}

Supprimer un budget

DELETE
https://api.dendreo.com
/v2/budgets/{id}

Refusée avec un code 422 si le budget est associé à des financements, ou si son type ne permet pas la suppression.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Budgets\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le budget est associé à des financements",
    "errors": {
        "id": [
            "Le budget est associé à des financements"
        ]
    }
}
{
    "message": "Le type de budget n'est pas supporté : remuneration",
    "errors": {
        "id": [
            "Le type de budget n'est pas supporté : remuneration"
        ]
    }
}

Catalogue public - prochaines sessions

Lister les prochaines sessions du catalogue public

GET
https://api.dendreo.com
/v2/catalogue-prochaines-sessions

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 :

  • son module est dans le catalogue, a une catégorie, appartient à la catégorie de produit « formation », n'est pas supprimé et n'est pas à visibilité restreinte ;
  • son action de formation est visible sur le catalogue, avec l'inscription en ligne activée, et son étape de process est configurée pour s'afficher sur le catalogue ;
  • sa date de début n'est pas passée, et elle démarre au moins le nombre de jours du délai « empêcher l'inscription » du centre avant son début ;
  • elle n'est pas en mode stage ;
  • elle est de type INTER, ou INTRA si le centre affiche les INTRA sur son catalogue et, pour une INTRA rattachée à une entreprise, si le centre l'autorise aussi ;
  • elle n'est pas en e-learning asynchrone, sauf si le centre affiche ce mode sur son catalogue. Une session en e-learning asynchrone déjà commencée n'est listée que si le centre autorise l'inscription aux e-learning asynchrones en cours.

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)

  • Paramètres : 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).
  • Visibilité : les modules à visibilité restreinte sont exclus ; en multi-centre sans filtre de centre, seuls les centres du catalogue global sont listés (la V1 renvoyait tous les centres) ; 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].
  • Format : les valeurs sont typées (entiers, décimaux, 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.
  • Corrections : un module simple et un Module Composé de même identifiant ne s'écrasent plus, et la pagination porte sur la liste fusionnée ; remplissage et url_relative d'un Module Composé sont calculés comme pour un module simple.
  • Créneaux : les clés 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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

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.

filter[id_centre_de_formation]
integer

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.

Exemple
3
filter[id_module]
integer

Identifiant du module. Entiers séparés par des virgules : une valeur non entière, seule ou dans une liste, ne retourne aucune session.

filter[id_categorie]
integer

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.

filter[id_action_de_formation]
integer

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.

filter[type_module]
string

Filtre par type de session, une ou plusieurs valeurs séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • simple
  • compose
Exemple
simple
filter[type]
string

Filtre par type d'action de formation, une ou plusieurs valeurs séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • inter
  • intra
Exemple
inter
filter[mode_organisation]
string

Filtre par mode d'organisation, une ou plusieurs valeurs séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • presentiel
  • elearning_sync
  • elearning_async
  • mixte
Exemple
presentiel
filter[date_debut]
string

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. Les sessions passées restent exclues.

filter[date_fin]
string

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.

include
string

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.

Doit correspondre aux valeurs suivantes (9)
  • visuel
  • satisfaction
  • categorie_module
  • centre
  • creneaux
  • creneaux.salle
  • creneaux.formateurs
  • creneaux.suivi
  • creneaux.replays
sort
string

Champs 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.

Doit correspondre aux valeurs suivantes (8)
  • date_debut
  • -date_debut
  • date_fin
  • -date_fin
  • intitule
  • -intitule
  • prix_formation
  • -prix_formation
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "data": [
        {
            "id": 12,
            "type_module": "compose",
            "id_action_de_formation": 63,
            "id_module": 9,
            "intitule": "Parcours Bureautique",
            "date_debut": "2027-03-15 09:00:00",
            "date_fin": "2027-04-02 17:00:00",
            "categorie": "Bureautique",
            "id_categorie": 4,
            "url_categorie": "https://demo.dendreo.com/catalogue/categorie/4-bureautique",
            "mode_organisation": "mixte",
            "mode_organisation_libelle": "Présentiel / à distance",
            "total_participants": 3,
            "nb_participants_min": 2,
            "nb_participants_max": null,
            "remplissage": "3",
            "prix_formation": 2450,
            "prix_module": 2450,
            "url": "https://demo.dendreo.com/catalogue/formation/9-parcours-bureautique/12",
            "url_relative": "/catalogue/formation/9-parcours-bureautique/12",
            "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-04-05",
                "code_analytique": "ANA-002",
                "c_fichier_catalogue": 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": 1
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Catalogue prochaines sessions\" (key = 'Ma clé')."
    ]
}

Catégories de Module

Lister les catégories de module

GET
https://api.dendreo.com
/v2/module-categories

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[intitule]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[id_parent]
string

Filtre par catégorie parente. 0 ou null retourne uniquement les catégories racines.

Exemple
1
filter[status]
integer

Filtre par statut : 1 = actives, 0 = désactivées.

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
1
filter[trashed]
string

Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.

Doit correspondre aux valeurs suivantes
  • with
  • only
filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • parent
  • children
  • administrateurAdd
  • administrateurEdit
sort
string

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.

Doit correspondre aux valeurs suivantes (10)
  • id
  • -id
  • intitule
  • -intitule
  • order
  • -order
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Catégories de Module\" (key = 'Ma clé')."
    ]
}

Récupérer une catégorie de module

GET
https://api.dendreo.com
/v2/module-categories/{id}

Retourne également les catégories supprimées.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • parent
  • children
  • administrateurAdd
  • administrateurEdit
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Catégories de Module\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer une catégorie de module

POST
https://api.dendreo.com
/v2/module-categories

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Catégories de Module\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"intitule\" est obligatoire",
    "errors": {
        "intitule": [
            "Le champ \"intitule\" est obligatoire"
        ]
    }
}

Mettre à jour une catégorie de module

PATCH
https://api.dendreo.com
/v2/module-categories/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres du body

Exemple de requête:
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
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Catégories de Module\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"intitule\" est obligatoire",
    "errors": {
        "intitule": [
            "Le champ \"intitule\" est obligatoire"
        ]
    }
}

Supprimer une catégorie de module

DELETE
https://api.dendreo.com
/v2/module-categories/{id}

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Catégories de Module\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Cette catégorie ne peut pas être supprimée car elle est utilisée par des modules."
}
{
    "message": "Cette catégorie ne peut pas être supprimée car elle contient des sous-catégories."
}

Restaurer une catégorie de module

POST
https://api.dendreo.com
/v2/module-categories/{id}/restore

Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1
Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Catégories de Module\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Centres de formation

La liste ne renvoie jamais le centre Global (0), même avec filter[id]=0. GET /0 le renvoie, sans clé id.

Lister les centres de formation

GET
https://api.dendreo.com
/v2/centres-de-formation

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[nom_commercial]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[hidden]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[raison_sociale]
string

Recherche partielle sur la raison sociale du centre.

filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.

Doit correspondre aux valeurs suivantes (6)
  • id
  • -id
  • nom_commercial
  • -nom_commercial
  • raison_sociale
  • -raison_sociale
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Centres de formation\" (key = 'Ma clé')."
    ]
}

Récupérer un centre de formation

GET
https://api.dendreo.com
/v2/centres-de-formation/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "data": {
        "hidden": false,
        "raison_sociale": null,
        "nom_commercial": "Berger",
        "created_at": null,
        "id_add": null,
        "updated_at": null,
        "id_edit": null
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Centres de formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Entreprises

Lister les entreprises

GET
https://api.dendreo.com
/v2/entreprises

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[trashed]
string

Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.

Doit correspondre aux valeurs suivantes
  • with
  • only
filter[type]
string

Clients, fournisseurs, ou ni l'un ni l'autre. Une autre valeur ne filtre rien.

Doit correspondre aux valeurs suivantes
  • clients
  • fournisseurs
  • nonclients
filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[particulier]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[entreprise_parente_id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[numero]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_complet]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_perso]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_compte_client]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_compte_client_auxiliaire]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_compte_fournisseur]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_compte_fournisseur_auxiliaire]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_comptable_adf]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_compte_charge_fp_formation]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[client_interne]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[legal_identifier]
string

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.

filter[num_tva_intra]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[num_tva_intra_auto]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[raison_sociale]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[nom]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[prenom]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[appellation]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[sigle]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[statut_juridique]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[statut_bpf_participants_entreprise]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[id_code_naf]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[telephone]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[fax]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[site_internet]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[email_standard]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[adresse]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[code_postal]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[ville]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[pays_alpha2]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[facturation_raison_sociale]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[facturation_adresse]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[facturation_code_postal]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[facturation_ville]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[facturation_pays_alpha2]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[id_opca]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_opca_interlocuteur]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[mode_financement_par_defaut]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[nb_employes]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[enjeu]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[id_administrateur]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[client]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[fournisseur]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[id_contact]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_contact_secondaire]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_contact_facturation]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[commentaires]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[post_it_commercial]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[id_externe]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[moyen_paiement_par_defaut]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[delai_paiement]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[tva_formation]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[tva_frais]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[tva_hors_formation]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[global_visible]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[infos_adf]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[formateurs_mode_remu]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[message_extranet]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[industrie]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[category_id]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[has_chorus_pro_invoices]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[reference_acheteur]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[auto_validate_inscriptions]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[financeur_type]
string

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[financeur_id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
  • administrateurDelete
  • centres
  • stats
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.

Doit correspondre aux valeurs suivantes (12)
  • raison_sociale
  • -raison_sociale
  • nom
  • -nom
  • prenom
  • -prenom
  • telephone
  • -telephone
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Entreprises\" (key = 'Ma clé')."
    ]
}

Récupérer une entreprise

GET
https://api.dendreo.com
/v2/entreprises/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
  • administrateurDelete
  • centres
  • stats
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Entreprises\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Financeurs

Lister les financeurs

GET
https://api.dendreo.com
/v2/financeurs

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[raison_sociale]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[trashed]
string

Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.

Doit correspondre aux valeurs suivantes
  • with
  • only
include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • contacts
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.

Doit correspondre aux valeurs suivantes
  • raison_sociale
  • -raison_sociale
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "data": [
        {
            "opca": false,
            "raison_sociale": "Berger SAS",
            "legal_scheme": "0009",
            "legal_identifier": "517 004 321 49022",
            "peppol_scheme": "0009",
            "peppol_identifier": "517 004 321 49022",
            "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
        },
        {
            "opca": false,
            "raison_sociale": "Meyer",
            "legal_scheme": "0009",
            "legal_identifier": "304 900 343 00522",
            "peppol_scheme": "0009",
            "peppol_identifier": "304 900 343 00522",
            "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
        }
    ],
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Financeurs\" (key = 'Ma clé')."
    ]
}

Récupérer un financeur

GET
https://api.dendreo.com
/v2/financeurs/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • contacts
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "data": {
        "opca": false,
        "raison_sociale": "Berger SAS",
        "legal_scheme": "0009",
        "legal_identifier": "517 004 321 49022",
        "peppol_scheme": "0009",
        "peppol_identifier": "517 004 321 49022",
        "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Financeurs\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Mettre à jour un financeur

PATCH
https://api.dendreo.com
/v2/financeurs/{id}

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éral
  • compte_client_auxiliaire — n° de compte tiers
  • numero_comptable_adf — n° de compte produit forcé
Le PATCH est partiel : seuls les champs envoyés sont modifiés. Les autres champs du Financeur (raison_sociale, legal_identifier — Numéro d'identification entreprise, etc.) ne sont pas modifiables ici.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres du body

Exemple de requête:
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\"
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Financeurs\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"compte client\" est obligatoire",
    "errors": {
        "compte_client": [
            "Le champ \"compte client\" est obligatoire"
        ]
    }
}

Opportunités

Sources d'Opportunités


Lister les sources

GET
https://api.dendreo.com
/v2/sources

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[name]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[status]
string

1 ou true pour les sources actives, 0 ou false pour les sources désactivées. Toute autre valeur ne renvoie rien.

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • opportunites
sort
string

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.

Doit correspondre aux valeurs suivantes
  • name
  • -name
  • order
  • -order
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Sources\" (key = 'Ma clé')."
    ]
}

Récupérer une source

GET
https://api.dendreo.com
/v2/sources/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • opportunites
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "data": {
        "name": "aut adipisci",
        "status": true,
        "order": 50
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Sources\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer une source

POST
https://api.dendreo.com
/v2/sources

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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
}"
Exemple de réponse:
{
    "data": {
        "name": "architecto eius",
        "status": true,
        "order": 7
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Sources\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"nom\" est obligatoire",
    "errors": {
        "name": [
            "Le champ \"nom\" est obligatoire"
        ]
    }
}

Mettre à jour une source

PATCH
https://api.dendreo.com
/v2/sources/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres du body

Exemple de requête:
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
}"
Exemple de réponse:
{
    "data": {
        "name": "architecto eius",
        "status": true,
        "order": 7
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Sources\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"nom\" est obligatoire",
    "errors": {
        "name": [
            "Le champ \"nom\" est obligatoire"
        ]
    }
}

Supprimer une source

DELETE
https://api.dendreo.com
/v2/sources/{id}

Refusée avec un code 422 si la source est liée à des opportunités.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Sources\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "La source est liée à des opportunités et ne peut pas être supprimée.",
    "errors": {
        "id": [
            "La source est liée à des opportunités et ne peut pas être supprimée."
        ]
    }
}

Étapes d'Opportunité


Lister les étapes d'opportunité

GET
https://api.dendreo.com
/v2/opportunite-etapes

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[name]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[status]
integer

Filtre par statut : 1 = actives, 0 = désactivées.

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
1
filter[created_at]
string

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.

filter[updated_at]
string

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.

sort
string

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.

Doit correspondre aux valeurs suivantes (6)
  • order
  • -order
  • success_chance
  • -success_chance
  • name
  • -name
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Étapes d'Opportunité\" (key = 'Ma clé')."
    ]
}

Récupérer une étape d'opportunité

GET
https://api.dendreo.com
/v2/opportunite-etapes/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1
Exemple de requête:
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"
Exemple de réponse:
{
    "data": {
        "name": "aut",
        "order": 2090933724,
        "success_chance": 79,
        "color": null,
        "status": 1,
        "created_at": null,
        "updated_at": null,
        "deleted_at": null
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Étapes d'Opportunité\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer une étape d'opportunité

POST
https://api.dendreo.com
/v2/opportunite-etapes

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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\"
}"
Exemple de réponse:
{
    "data": {
        "name": "architecto",
        "order": 2137449171,
        "success_chance": 87,
        "color": null,
        "status": 1,
        "created_at": null,
        "updated_at": null,
        "deleted_at": null
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Étapes d'Opportunité\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"nom\" est obligatoire",
    "errors": {
        "name": [
            "Le champ \"nom\" est obligatoire"
        ]
    }
}

Mettre à jour une étape d'opportunité

PATCH
https://api.dendreo.com
/v2/opportunite-etapes/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres du body

Exemple de requête:
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\"
}"
Exemple de réponse:
{
    "data": {
        "name": "architecto",
        "order": 2137449171,
        "success_chance": 87,
        "color": null,
        "status": 1,
        "created_at": null,
        "updated_at": null,
        "deleted_at": null
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Étapes d'Opportunité\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"nom\" est obligatoire",
    "errors": {
        "name": [
            "Le champ \"nom\" est obligatoire"
        ]
    }
}

Supprimer une étape d'opportunité

DELETE
https://api.dendreo.com
/v2/opportunite-etapes/{id}

Refusée avec un code 400 pour les étapes dont la probabilité de succès vaut 0 ou 100 %.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "message": "Vous ne pouvez pas supprimer cette étape"
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Étapes d'Opportunité\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Restaurer une étape d'opportunité

POST
https://api.dendreo.com
/v2/opportunite-etapes/{id}/restore

Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1
Exemple de requête:
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"
Exemple de réponse:
{
    "data": {
        "name": "aut",
        "order": 2090933724,
        "success_chance": 79,
        "color": null,
        "status": 1,
        "created_at": null,
        "updated_at": null,
        "deleted_at": null
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Étapes d'Opportunité\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Participants

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.

Règles de saisie (3)#
  • ogdpc_adeli, ogdpc_rpps, ogdpc_id_specialite et mode_dexercice_dominant ne sont pris en compte que si l'option OGDPC est active ; sinon ils sont ignorés.
  • ogdpc_id_specialite : identifiant ou intitulé exact de la spécialité DPC ; une spécialité inconnue renvoie 422.
  • mode_dexercice_dominant : salarie, liberal, mixte, armee ou centre_conv.

Lister les participants

GET
https://api.dendreo.com
/v2/participants

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_externe]
string

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[nom]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[prenom]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[email]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[portable]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_compte_client]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[numero_compte_client_auxiliaire]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[nom_naissance]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[ville_naissance]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[departement_naissance]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[pays_naissance]
string

Nom du pays de naissance (France). Plusieurs pays séparés par des virgules.

filter[pays_naissance_alpha2]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[code_postal]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[ville]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[pays]
string

Nom du pays (France). Plusieurs pays séparés par des virgules.

filter[pays_alpha2]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[formateur_lie_id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_contact]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[responsable_id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[commentaires]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[infos_adf]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[ogdpc_adeli]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[ogdpc_rpps]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[trashed]
string

Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.

Doit correspondre aux valeurs suivantes
  • with
  • only
filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules. media ajoute photo_url.

Doit correspondre aux valeurs suivantes
  • centres
  • entreprise
  • contact
  • formateur_lie
  • media
sort
string

Champs 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.

Doit correspondre aux valeurs suivantes (8)
  • nom
  • -nom
  • prenom
  • -prenom
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Participants\" (key = 'Ma clé')."
    ]
}

Récupérer un participant

GET
https://api.dendreo.com
/v2/participants/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules. media ajoute photo_url.

Doit correspondre aux valeurs suivantes
  • centres
  • entreprise
  • contact
  • formateur_lie
  • media
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Participants\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer un participant

POST
https://api.dendreo.com
/v2/participants

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ée
  • entreprise_raison_sociale : une recherche est effectuée sur le champ raison_sociale, le premier résultat est pris en compte
  • entreprise_id_externe : une recherche est effectuée sur le champ id_externe, seul un résultat exact est pris en compte
  • entreprise_siret : une recherche est effectuée sur le champ legal_identifier (Numéro d'identification entreprise), le premier résultat est pris en compte

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
curl --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\"
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Participants\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"Entreprise\" est obligatoire",
    "errors": {
        "id_entreprise": [
            "Le champ \"Entreprise\" est obligatoire"
        ]
    }
}

Mettre à jour un participant

PATCH
https://api.dendreo.com
/v2/participants/{id}

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ée
  • entreprise_raison_sociale : une recherche est effectuée sur le champ raison_sociale, le premier résultat est pris en compte
  • entreprise_id_externe : une recherche est effectuée sur le champ id_externe, seul un résultat exact est pris en compte
  • entreprise_siret : une recherche est effectuée sur le champ legal_identifier (Numéro d'identification entreprise), le premier résultat est pris en compte

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres du body

Exemple de requête:
curl --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
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Participants\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"Entreprise\" est obligatoire",
    "errors": {
        "id_entreprise": [
            "Le champ \"Entreprise\" est obligatoire"
        ]
    }
}

Supprimer un participant

DELETE
https://api.dendreo.com
/v2/participants/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Participants\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Restaurer un participant

POST
https://api.dendreo.com
/v2/participants/{id}/restore

Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9
Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Participants\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Salles de formation

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.

Règles de saisie (5)#
  • Changer 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.
  • Une salle interne reprend le nom du contact, le téléphone et le lien Google Maps de son centre : passer en interne vide nom_contact, telephone et lien_google_maps, et ces champs sont ignorés sur une salle déjà interne.
  • En multi-centres, l'entreprise d'une salle chez le client doit être visible dans au moins un des centres de 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.

Lister les salles de formation

GET
https://api.dendreo.com
/v2/salles-de-formation

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_externe]
string

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[inside]
integer

Filtre les salles internes (1) ou externes (0).

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
1
filter[elearning]
integer

Filtre les salles virtuelles (1) ou non (0).

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
0
filter[invisible_catalogue]
integer

Filtre les salles masquées du Catalogue Public (1) ou visibles (0).

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
0
filter[id_centre_de_formation]
integer

Filtre 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.

Exemple
1,2
filter[emplacement_type]
string

Filtre par type d'emplacement.

Doit correspondre aux valeurs suivantes
  • CentresDeFormation
  • Entreprise
Exemple
CentresDeFormation
filter[search]
string

Recherche sur l'intitulé, l'adresse, la ville et le code postal.

Exemple
Amphithéâtre
filter[trashed]
string

Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.

Doit correspondre aux valeurs suivantes
  • with
  • only
filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

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.

Doit correspondre aux valeurs suivantes
  • emplacement
  • centres
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par intitule croissant.

Doit correspondre aux valeurs suivantes (8)
  • intitule
  • -intitule
  • capacite_max
  • -capacite_max
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Salles de formation\" (key = 'Ma clé')."
    ]
}

Récupérer une salle de formation

GET
https://api.dendreo.com
/v2/salles-de-formation/{id}

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).

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres de requête

include
string

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.

Doit correspondre aux valeurs suivantes
  • emplacement
  • centres
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Salles de formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer une salle de formation

POST
https://api.dendreo.com
/v2/salles-de-formation

Une règle non respectée renvoie 422.

Valeurs par défaut (1)#
  • Une salle virtuelle (elearning) est créée hors détection des conflits et masquée du Catalogue Public, sauf si no_conflits ou invisible_catalogue est envoyé.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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\"
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Salles de formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"emplacement cible\" est obligatoire",
    "errors": {
        "emplacement_cible": [
            "Le champ \"emplacement cible\" est obligatoire"
        ]
    }
}

Mettre à jour une salle de formation

PATCH
https://api.dendreo.com
/v2/salles-de-formation/{id}

Seuls les champs envoyés sont modifiés. Une règle non respectée renvoie 422.

Différences avec la création (3)#
  • Une salle supprimée n'est pas modifiable (422) : la restaurer d'abord par POST /{id}/restore.
  • deleted_at est ignoré : la restauration ne passe que par POST /{id}/restore.
  • Quand la détection des conflits de salles est activée, modifier no_conflits recalcule les conflits de la salle et de ses événements.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres du body

Exemple de requête:
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\"
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Salles de formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"emplacement cible\" est obligatoire",
    "errors": {
        "emplacement_cible": [
            "Le champ \"emplacement cible\" est obligatoire"
        ]
    }
}

Supprimer une salle de formation

DELETE
https://api.dendreo.com
/v2/salles-de-formation/{id}

La salle reste consultable par GET /{id} et avec filter[trashed]. Elle se restaure par POST /{id}/restore.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Salles de formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Restaurer une salle de formation

POST
https://api.dendreo.com
/v2/salles-de-formation/{id}/restore

Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9
Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Salles de formation\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Sessions permanentes

Règles de saisie (2)#
  • La durée s'exprime en heures via duree_heures, en entrée comme en sortie.
  • Sans durée propre, la session hérite de la durée du module ; duree_heures: null restaure cet héritage.

Lister les sessions permanentes

GET
https://api.dendreo.com
/v2/sessions-permanentes

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_module]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_salle_de_formation]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[id_centre_de_formation]
integer

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.

Exemple
1,2
filter[active]
integer

Filtre par statut : 1 = ouverte, 0 = fermée.

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
1
filter[visible_cp]
integer

Filtre par visibilité dans le catalogue public : 1 = visible, 0 = masquée.

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
1
filter[mode_pricing]
string

Filtre par mode de tarification.

Doit correspondre aux valeurs suivantes
  • forfaitaire
  • assiduite
Exemple
forfaitaire
filter[trashed]
string

Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.

Doit correspondre aux valeurs suivantes
  • with
  • only
filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules. centre vaut null pour une session rattachée à « Tous les centres ».

Doit correspondre aux valeurs suivantes
  • responsable
  • centre
sort
string

Champs 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.

Doit correspondre aux valeurs suivantes (8)
  • id
  • -id
  • created_at
  • -created_at
  • prix
  • -prix
  • active
  • -active
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Sessions permanentes\" (key = 'Ma clé')."
    ]
}

Récupérer une session permanente

GET
https://api.dendreo.com
/v2/sessions-permanentes/{id}

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).

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules. centre vaut null pour une session rattachée à « Tous les centres ».

Doit correspondre aux valeurs suivantes
  • responsable
  • centre
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Sessions permanentes\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer une session permanente

POST
https://api.dendreo.com
/v2/sessions-permanentes

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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
    ]
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Sessions permanentes\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"id module\" est obligatoire",
    "errors": {
        "id_module": [
            "Le champ \"id module\" est obligatoire"
        ]
    }
}

Mettre à jour une session permanente

PATCH
https://api.dendreo.com
/v2/sessions-permanentes/{id}

id_module et id_externe_module ne sont pas modifiables : ils sont ignorés sans erreur.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres du body

Exemple de requête:
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
    ]
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Sessions permanentes\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"id salle de formation\" est obligatoire",
    "errors": {
        "id_salle_de_formation": [
            "Le champ \"id salle de formation\" est obligatoire"
        ]
    }
}

Supprimer une session permanente

DELETE
https://api.dendreo.com
/v2/sessions-permanentes/{id}

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Sessions permanentes\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Restaurer une session permanente

POST
https://api.dendreo.com
/v2/sessions-permanentes/{id}/restore

Remet deleted_at à null. Idempotent : répond 200 dès que la ressource existe, qu'elle ait été supprimée ou non.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1
Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Sessions permanentes\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Types de produit

Lister les types de produit

GET
https://api.dendreo.com
/v2/produit-types

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[intitule]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[status]
integer

Filtre par statut : 1 = actifs, 0 = désactivés.

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
1
filter[categorie_operation]
string

Filtre par catégorie d'opération : services ou biens.

Doit correspondre aux valeurs suivantes
  • services
  • biens
Exemple
services
filter[trashed]
string

Sans ce filtre, les fiches supprimées sont exclues : with les inclut, only ne renvoie qu'elles.

Doit correspondre aux valeurs suivantes
  • with
  • only
filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
  • administrateurDelete
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par identifiant croissant.

Doit correspondre aux valeurs suivantes (10)
  • id
  • -id
  • intitule
  • -intitule
  • status
  • -status
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Catégories de produit\" (key = 'Ma clé')."
    ]
}

Récupérer un type de produit

GET
https://api.dendreo.com
/v2/produit-types/{id}

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).

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • administrateurAdd
  • administrateurEdit
  • administrateurDelete
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Catégories de produit\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer un type de produit

POST
https://api.dendreo.com
/v2/produit-types

Nécessite l'option multi-produits sur le compte.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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\"
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Catégories de produit\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"intitule\" est obligatoire",
    "errors": {
        "intitule": [
            "Le champ \"intitule\" est obligatoire"
        ]
    }
}

Mettre à jour un type de produit

PATCH
https://api.dendreo.com
/v2/produit-types/{id}

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.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
2

Paramètres du body

Exemple de requête:
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
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Catégories de produit\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"intitule\" est obligatoire",
    "errors": {
        "intitule": [
            "Le champ \"intitule\" est obligatoire"
        ]
    }
}

Supprimer un type de produit

DELETE
https://api.dendreo.com
/v2/produit-types/{id}

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é.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
2
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Catégories de produit\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Vous ne pouvez pas supprimer ce type de produit car 2 modules y sont reliés."
}
{
    "message": "L'option « Multi-Produits » doit être activée pour gérer les types de produit.",
    "errors": {
        "g_multi_produits": [
            "L'option « Multi-Produits » doit être activée pour gérer les types de produit."
        ]
    }
}

Restaurer un type de produit

POST
https://api.dendreo.com
/v2/produit-types/{id}/restore

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).

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
2
Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Catégories de produit\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "L'option « Multi-Produits » doit être activée pour gérer les types de produit.",
    "errors": {
        "g_multi_produits": [
            "L'option « Multi-Produits » doit être activée pour gérer les types de produit."
        ]
    }
}

Tâches

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.

Lister les tâches en attente d'un participant

GET
https://api.dendreo.com
/v2/participants/{id}/taches

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
9

Paramètres de requête

types
string

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.

Exemple
esignature,satisfaction
autologin
string

À 1, suffixe chaque URL du code extranet du Participant pour une connexion automatique.

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
1
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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"
                }
            ]
        }
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Tâches\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Lister les tâches en attente des participants

GET
https://api.dendreo.com
/v2/taches

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id_participant]
integer

Identifiants de Participants, séparés par des virgules.

Exemple
17,18
filter[id_externe]
string

Identifiants externes de Participants, séparés par des virgules.

Exemple
EXT-17,EXT-18
filter[code_extranet]
string

Codes extranet de Participants, séparés par des virgules. Les tirets sont facultatifs.

Exemple
681-130-278,004-512-903
filter[created_at]
string

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.

filter[updated_at]
string

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.

page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

types
string

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.

Exemple
esignature,satisfaction
autologin
string

À 1, suffixe chaque URL du code extranet du Participant pour une connexion automatique.

Doit correspondre aux valeurs suivantes
  • 0
  • 1
Exemple
1
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Tâches\" (key = 'Ma clé')."
    ]
}

Étapes ADF

Lister les étapes ADF

GET
https://api.dendreo.com
/v2/adf-etapes

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres de requête

filter[id]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[cible]
string

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[intitule]
string

Recherche partielle : le champ contient la valeur. Plusieurs valeurs séparées par des virgules, dont une au moins doit correspondre.

filter[id_parent]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[type]
string

Statut de l'étape : confirmée, non confirmée ou annulée. Plusieurs valeurs séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • confirmed
  • not_confirmed
  • cancelled
filter[favorite]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[default_adf]
integer

Valeur exacte. Plusieurs valeurs séparées par des virgules.

filter[created_at]
string

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.

filter[updated_at]
string

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.

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • parent
  • children
sort
string

Champs de tri, séparés par des virgules. Préfixer un champ par - pour un ordre décroissant. Sans sort, tri par ordre croissant.

Doit correspondre aux valeurs suivantes (12)
  • id
  • -id
  • intitule
  • -intitule
  • ordre
  • -ordre
  • cible
  • -cible
  • created_at
  • -created_at
  • updated_at
  • -updated_at
page
integer

Numéro de la page, à partir de 1.

per_page
integer

Nombre d'éléments par page, 15 par défaut et 100 au plus : une valeur supérieure est ramenée à 100.

Exemple de requête:
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"
Exemple de réponse:
{
    "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
    }
}
{
    "message": "Le(s) filtre(s) demandé(s) `filtre_invalide` ne sont pas autorisé(s)."
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Étapes ADF\" (key = 'Ma clé')."
    ]
}

Récupérer une étape ADF

GET
https://api.dendreo.com
/v2/adf-etapes/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres de requête

include
string

Relations à inclure dans la réponse, séparées par des virgules.

Doit correspondre aux valeurs suivantes
  • parent
  • children
Exemple de requête:
curl --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"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de lecture sur \"Étapes ADF\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}

Créer une étape ADF

POST
https://api.dendreo.com
/v2/adf-etapes

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres du body

Exemple de requête:
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
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Étapes ADF\" (key = 'Ma clé')."
    ]
}
{
    "message": "Le champ \"intitule\" est obligatoire",
    "errors": {
        "intitule": [
            "Le champ \"intitule\" est obligatoire"
        ]
    }
}

Mettre à jour une étape ADF

PATCH
https://api.dendreo.com
/v2/adf-etapes/{id}

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1

Paramètres du body

Exemple de requête:
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
}"
Exemple de réponse:
{
    "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
    }
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Étapes ADF\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Le champ \"intitule\" est obligatoire",
    "errors": {
        "intitule": [
            "Le champ \"intitule\" est obligatoire"
        ]
    }
}

Supprimer une étape ADF

DELETE
https://api.dendreo.com
/v2/adf-etapes/{id}

Refusée avec un code 409 si l'étape contient des sous-étapes, ou si elle est utilisée par des Actions de Formation.

En-têtes

Authorization
Exemple
Bearer {VOTRE_CLE_API}
of
Exemple
{votre_compte}
Content-Type
Exemple
application/json

Paramètres d'URL

id
integer
Obligatoire
Exemple
1
Exemple de requête:
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"
Exemple de réponse:
[Réponse vide]
{
    "status": "failure",
    "errors": [
        "La clef API fournie n'est pas valide."
    ]
}
{
    "status": "failure",
    "errors": [
        "La clef API fournie ne possède pas les droits de nécessaires sur \"Étapes ADF\" (key = 'Ma clé')."
    ]
}
{
    "message": "Entité non trouvée."
}
{
    "message": "Cette étape ne peut pas être supprimée car elle contient des sous-étapes."
}
{
    "message": "Cette étape ne peut pas être supprimée car elle est utilisée par des Actions de Formation."
}