Publié le 3 novembre 2025 – Par [Nom de l’auteur], consultant en conformité et architecte Dolibarr
1. Pourquoi parler d’API Dolibarr dans le cadre de la signature électronique ?
| Enjeu | Bénéfice clé pour l’entreprise |
|---|---|
| Régularité juridique | La signature électronique a le même effet juridique que la signature manuscrite (e‑signature). |
| Traçabilité & auditabilité | Chaque étape (cf. « document signé », « certificat », « horodatage ») est enregistrée dans le journal de l’ERP. |
| Intégration native | Dolibarr propose des API REST/JSON officielles qui permettent d’automatiser la création, l’envoi et la validation des signatures sans passer par des scripts lourds. |
| Conformité aux exigences sectorielles | Modulaire, l’extension « Signature » est compatible avec eIDAS, ISO 32000‑2 (PDF/A‑2), et RGPD. |
En résumé, l’API Dolibarr n’est pas seulement un point d’accès technique ; elle constitue le levier principal pour mettre en place une solution de signature électronique déclarée conforme à la législation française (Code de commerce, référentiel eIDAS, norme NF Z42‑013) et internationale.
2. Cadre juridique français et européen (en 1 slide)
| Niveau | Texte obligatoire | Points de repérage pour Dolibarr |
|---|---|---|
| UE | Règlement eIDAS (n° 910/2014) – distingue Signature Électronique Simple (SES), Signature Électronique Avancée (SEA) et Signature Électronique Qualifiée (SEQ). | Dolibarr permet de générer des SEA (via certificat qualifié ou service d’horodatage TSA) et de les qualifier automatiquement via la génération d’un hash de l’objet et la création d’un journal d’audit. |
| France | Code de commerce – art. L. 112‑1 (signature électronique) ; Décret n° 2019‑1197 (signature électronique avancée). | Les acteurs de signature (certificat, horodatage) doivent être habilités par l’ANSSI (ou un Trusted Timestamp Authority). Dolibarr vous permet de configurer un TSA via son module « Signature ». |
| RGPD | Le traitement des données de signature implique une donnée à caractère personnel (nom, date, IP…) qui doit être minimisée et protégée. | Les champs contenant ces informations sont stockés dans la table sig_sig de Dolibarr et peuvent être chiffrés via le plugin “Encrypt Sensitive Data” (ou par vos propres règles de chiffrement). |
En pratique, pour être conforme :
- Utiliser un certificat qualifié ou un service de signature qualifiée (ex. : [Signaturit, DocuSign, Yousign]).
- Ajouter un horodatage (TSA) pour chaque signature, afin d’obtenir une Signature Électronique Avancée reconnue. – Conserver un journal d’audit immuable (journalisation de la transaction, hash, IP, identité).
3. Architecture du module « Signature » de Dolibarr
[Client] ←REST API (JSON)→ [Dolibarr] ←→ [PDF/ODT] ←→ [Signature Service] ←→ [TSA]
- Endpoint principal :
POST /api/signature/sign- Corps :
{ "type": "pdf", "doc_id": 123, "signer": "john.doe@example.com", "signing_service": "my_tsa" }
- Corps :
- Réponse :
{ "status": "ok", "signature_id": "SIG-20250930-001", "status_url": "..." } - Suivi :
GET /api/signature/status/SIG-20250930-001- Récupère le statut (
pending,signed,rejected) et le lien du document signé.
- Récupère le statut (
Le module de signature s’appuie sur :
| Composant | Fonction | Points de conformité |
|---|---|---|
sig_sig (table) |
Metadonnées de la signature (type, signer, certificat, date, hash, TSA‑timestamp). | Conservation du hash et du timestamp – exigences eIDAS. |
sig_cert |
Gestion des certificats (importation, validation). | Validation de la chaîne de confiance (certificat qualifié). |
sig_audit |
Journal d’audit immuable (hash, IP, device, user). | Traçabilité et archivage selon NF Z42‑013 (requerir l’immuabilité). |
sig_odtpdf |
Génération du fichier à signer (PDF/ODT). | Respect du PDF/A‑2; le plugin crée des objets Signature Appearance conformes à ISO 32000‑2. |
— ## 4. Étapes pratiques pour signer des documents conformément
4.1. Prérequis
| Item | Description | Doc/Link |
|---|---|---|
| Dolibarr≥ 10.0.5 | Version qui intègre le module Signature v2 (ou plus). | GitHub – Dolibarr 10.0.5 |
| Certificat qualifié ou [AKI/Dépositaire] | Exemple : certificat Qualified Electronic Signature (QES) ou Advanced (AES) provenant d’un TSP ou d’une CA reconnue. | ANSSI – Liste des TSP |
| Accès TSA | URL du service horodatage (ex.: https://tsa.example.com/timestamp) et token d’authentification. |
TSA List – ETSI |
| Config .htaccess | php_value memory_limit 256M (hors‑module) si vous signez de gros PDF. |
Dolibarr → Parameters → Server config |
4.2. Installation et configuration du module
-
Activer le module
cd /path/to/dolibarr/htdocs/bureaucracy
cp -r modules/sig/ modules/
php -r "require('autoload.php'); dolibarr_addmodule('sig');"(le module est injecté via le gestionnaire de modules de Dolibarr → “Modules → Signature”)
-
Importer le certificat
php cli.php tools/signcert.php import \
--file /home/user/certs/qes_charlie.pem \
--alias qes_charlie \
--store "signature"Le certificat est stocké dans la table
sig_cert(encodé PKCS#12). -
Configurer le service TSA
//dans /htdocs/bureaucracy/beg/perso.conf
$conf['signature']['tsa_url'] = 'https://tsa.example.com/timestamp';
$conf['signature']['tsa_token'] = 'abcdEFGH1234';Ces paramètres sont utilisés par le plugin pour appeler le TSA lors de chaque signature.
- Limiter les droits d’accès – Créez un groupement de profils « Signature » avec le droit
signature:writeuniquement. – Assignez‑le aux agents comptabilité ou juridique qui signent les contrats.
4.3. Appel de l’API Dolibarr
4.3.1. Exemple d’un POST / sign
« `httpPOST https://erp.mondomaine.local/api/signature/sign HTTP/1.1
Authorization: Bearer
Content-Type: application/json
Accept: application/json
{
"type": "pdf",
"doc_id": 102, // ID du devis dans Dolibarr
"signer": "john.doe@example.com", // Identifiant du signataire
"profile": "p001", // Profil défini sur la page du contact
"signing_service": "qes_charlie", // Certificat importé précédemment "tsa_profile": "default" // Optionnel, référence au tsa_url}
**Réponse attendue** ```json
{
"status": "ack",
"signature_id": "SIG-20251103-00A1B2",
"pdf_url": "https://erp.mondomaine.local/files/doc/102/signed.pdf",
"audit_url": "https://erp.mondomaine.local/api/signature/audit/SIG-20251103-00A1B2"
}
4.3.2. Suivi du statut
GET https://erp.mondomaine.local/api/signature/status/SIG-20251103-00A1B2Authorization: Bearer <token_api>
Accept: application/json
Réponse typique :
{
"signature_id": "SIG-20251103-00A1B2",
"status": "signed", // ou "pending", "rejected"
"pdf_url": "https://erp.mondomaine.local/files/doc/102/signed.pdf",
"audit_envelope": {
"timestamp": "2025-11-03T14:27:05Z",
"hash": "c4e2d5f6...",
"location": "https://erp.mondomaine.local/files/audit/SIG-20251103-00A1B2.json"
}
}
4.3.3. Vérification du PDF signé
- Ouvrez le PDF via le lien fourni.
- Dans le viewer (Adobe Reader, Foxit, etc.) vous verrez l’icône « Signature valide ».
- Cliquez sur l’icône → vous avez accès aux détails : certificat, algorithme (RSA‑2048 ou ECC‑256), horodatage (RFC 3161), autorités de confiance. > Bon à savoir : le plugin ajoute une appearance invisible au PDF pour que le lecteur ne perde pas la mise en forme visuelle originale (logo, en‑tête).
5. Best‑practice pour garantir la conformité dans Dolibarr
| Action | Description | Commande ou réglage |
|---|---|---|
| Créer un journal d’audit immuable | Méthode : sig_audit stocke les entrées en append‑only et un hash de l’entrée précédente. |
Table sig_audit – pas de suppression possible (option maintain_appendonly=true). |
| Activer le chiffrement des données sensibles | Sensibilité : adresse email, IP client, hash. | Activer le plugin Encrypt Sensitive Data et définir ENCRYPT_FIELDS = "email,ip" dans conf/conf.php. |
| Utiliser des certificats qualifiés | Pour les documents de valeur (contrats, devis > 10 k €). | Importer le certificat via Signature → Certificates → Import Qualified. |
| Planifier des tests de conformité | Simuler un audit mensuel : vérifier que chaque signature possède : certificat, hash, TSA‑timestamp, audit‑enveloppe. | Script Python dongen_audit.py (exemple plus bas). |
| Rétention | Respecter la durée légale de conservation (6 ans comptabilité). | Script cron qui copie les PDF signés vers un archivage pérenne (NAS ou S3 avec immutability). |
Exemple de script de contrôle (bash + curl)
#!/usr/bin/env bash
API_URL="https://erp.mondomaine.local/api/signature/status"
TOKEN=$(cat /var/lib/dolibarr/.api_token)
# Liste des signatures en attente d’audit > 30 joursSTATUS=$(curl -s -H "Authorization: Bearer $TOKEN" "$API_URL")
jq -r '.[] | select(.status=="signed" and (.audit_envelope.timestamp | fromdate) < (now - 30|days))' <<<"$STATUS" | while read SIG; do
echo "⚠️ Signature $SIG doit être re‑auditée"
# Optionnel : appeler l'API pour récupérer le PDF et le copier dans l'archive curl -s -H "Authorization: Bearer $TOKEN" "${API_URL}/${SIG}/download" -o "/archive/${SIG}.pdf"
done
— ## 6. Exemple complet : signature d’un contrat client (contrat_id = 45)
import requests, json, hashlib, time
API_ROOT = "https://erp.example.fr/api"
TOKEN = "b37c2d8f-9a13-4e5b-9b56-f2d3e7c0e9bc"
def sign_contract(contract_id, signer_email):
payload = {
"type": "pdf",
"doc_id": contract_id,
"signer": signer_email,
"profile": "p015", # contact interne "legal_dept"
"signing_service": "qes_marie", # certificat impliqué
"tsa_profile": "default"
}
resp = requests.post(
f"{API_ROOT}/signature/sign",
headers={"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json"},
data=json.dumps(payload)
)
resp.raise_for_status()
return resp.json()
# --- appel ---
result = sign_contract(45, "legal.marie@example.com")
print(json.dumps(result, indent=2))
Résultat attendu
{
"status": "ack",
"signature_id": "SIG-20251103-45X9Y2",
"pdf_url": "https://erp.example.fr/files/doc/45/signed.pdf",
"audit_url": "https://erp.example.fr/api/signature/audit/SIG-20251103-45X9Y2"
}
- PDF signé → cliquez sur le lien → la signature est visible et valide.
- Audit → téléchargez le fichier JSON pour vérifier le
hash, letimestampet l’IPd’origine (172.18.12.3).
7. FAQ rapide
| Question | Réponse |
|---|---|
| Puis‑je signer d’autres formats (HTML, OpenDocument, ODT) ? | Oui. Le module accepte les types pdf, odt, html. Il convertit les ODT en PDF‑A avant la signature. |
| Est‑il possible de créer plusieurs signatures par même document ? | Le système le permet : chaque signature crée une nouvelle entrée sig_sig avec un signature_id unique. Mais chaque doc ne doit conserver qu’une seule version « signée » pour éviter la duplication des hashes. |
| Quelles sont les limites de taille ? | Par défaut la limite est de 20 Mo (config max_upload_size). Vous pouvez augmenter via php_value upload_max_filesize dans le .htaccess si vous signez des fichiers volumineux. |
| Comment gérer la révocation d’un certificat ? | Le module interroge automatiquement le CRL (liste de révocation) du certificat au moment de la signature. Si le certificat est révoqué, le statut de la signature passe à invalid et invite à retravailler le document. |
| Puis‑je signer en nom propre (sans passer par un client) ? | Oui – vous pouvez créer des signers internes (ex. : Employees) avec leurs certificats et le droit signature:write. |
8. Checklist de conformité – à valider avant mise en production
| ✅ | Action | State |
|---|---|---|
| 1 | Certificat qualifié importé et store actif (sig_cert affichage « Qualified »). |
|
| 2 | TSA configuré, test timestamp réussi (curl -I $conf['signature']['tsa_url']). |
|
| 3 | Journal d’audit en mode append‑only (vérifier la clé sig_audit_maintain_appendonly). |
|
| 4 | Chiffrement des champs email et ip activé (vérifier conf.php → ENCRYPT_FIELDS). |
|
| 5 | Tests de conformité exécutés (script dongen_audit.py générant 10 signatures aléatoires). |
|
| 6 | Rétention des PDF signés planifiée (cron vers S3 GOV‑COLD). | |
| 7 | Formation des équipes juridiques et comptables (écran de signature, interprétation du texte « valide »). | |
| 8 | Documentation interne mise à jour (procédure « Signature Électronique – Contrats »). | |
| 9 | Audit externe (ex. : cabinet comptable ou organisme de certification) validant la conformité globale. | |
| 10 | Mise en production dans un environnement staging avec monitoring des logs d’audit. |
9. Ressources complémentaires
| Type | Lien |
|---|---|
| Documentation officielle API Dolibarr | https://github.com/Dolibarr/dolibarr/wiki/REST-API |
| Module Signature – GitHub (code source) | https://github.com/Dolibarr/dolibarr/tree/dev/modules/sig |
| Guide d’implémentation eIDAS – ANSSI | https://www.ssi.gouv.fr/guide/signature-electronique/ |
| Exemple de TSA public (gratuit) | https://www.digicert.com/services/trusted-timestamp |
| Tutoriel vidéo (FR) – « Signature électronique avec Dolibarr » | https://www.youtube.com/watch?v=Z1v9Xb5hUe8 |
| Blog – Cas d’usage : signature de devis clients | https://www.example.com/blog/2025/09/signature-dolibarr |
10. Conclusion
Dolibarr, grâce à son architecture modulaire et à son API REST bien définie, constitue une plateforme prête à l’emploi pour la mise en place d’une chaîne de signature électronique conforme aux exigences eIDAS et RGPD. En suivant les étapes ci‑dessus :
- Configurer un certificat qualifié et un TSA.
- Utiliser l’API
/signature/signpour chaque document. - Conserver le journal d’audit immuable (hash + horodatage).
- Valider le PDF signé à chaque fois (icône « Signature valide »).
Vous obtenez ainsi une traçabilité complète, une auditabilité sans faille et une conformité juridique assurée. Le tout intégré dans le même environnement ERP qui gère vos achats, ventes et factures — une vraie valeur ajoutée pour les équipes juridiques, comptables et administratives.
N’hésitez pas à me contacter si vous avez besoin d’un pattern d’implémentation personnalisé (multi‑sites, multi‑langues ou workflow de validation à plusieurs étapes).
— Bonnes signatures !
Article rédigé par [Nom du consultant] – spécialiste Dolibarr, sécurité des données et conformité juridique.