Spécification Fonctionnelle Détaillée (SFD)
Spécification Fonctionnelle Détaillée (SFD)
Intégration Passe Marché pour les plateformes de marchés publics
Version : 1.0.0 Date : 2026-02-03 Statut : Draft Auteur : Équipe Passe Marché
Table des matières
1. Introduction
1.1 Présentation de Passe Marché
Passe Marché est une plateforme gouvernementale française qui simplifie les candidatures aux marchés publics pour les petites et moyennes entreprises (PME). Elle s'intègre avec les plateformes de marchés publics pour offrir une expérience utilisateur fluide et conforme aux exigences réglementaires.
1.2 Objectifs de l'intégration
L'intégration avec Passe Marché permet aux plateformes de marchés publics de :
Créer des marchés publics via API pour leurs acheteurs
Gérer les candidatures des entreprises sur leurs plateformes
Recevoir des notifications en temps réel via webhooks
Télécharger les documents générés (attestations PDF, dossiers ZIP)
1.3 Périmètre du document
Ce document décrit les spécifications fonctionnelles et techniques nécessaires pour intégrer Passe Marché dans une plateforme de marchés publics, incluant :
Architecture et flux d'intégration
Authentification OAuth2
Endpoints API
Webhooks et callbacks
Gestion des documents
1.4 Public cible
Équipes techniques des plateformes de marchés publics
Architectes logiciels
Développeurs backend
1.5 Glossaire
Acheteur
Agent public responsable de la passation des marchés (buyer)
Candidat
Entreprise soumettant une offre à un marché public
Consultation
Synonyme de marché public (tender)
Éditeur
Plateforme tierce intégrant Passe Marché
Lot
Subdivision d'un marché public
Marché public
Appel d'offres lancé par un acheteur public
SIRET
Identifiant à 14 chiffres d'un établissement français
SIREN
Identifiant à 9 chiffres d'une entreprise française
OAuth2
Protocole d'autorisation standard
Client Credentials
Flux OAuth2 pour authentification machine-à-machine
Bearer Token
Token d'accès JWT utilisé dans les requêtes API
Webhook
Notification HTTP push vers un endpoint externe
HMAC-SHA256
Algorithme de signature cryptographique
1.6 Documents de référence
2. Vue d'ensemble de l'architecture
2.1 Diagramme d'architecture général
2.2 Flux d'intégration principal
2.3 Modes d'intégration
Passe Marché supporte deux modes d'intégration pour l'interface utilisateur :
Popup
Ouverture dans une nouvelle fenêtre
Intégration légère, UX séparée
iFrame
Intégration dans la page existante
Intégration profonde, UX unifiée
[À COMPLÉTER] : Spécifications détaillées pour l'intégration iFrame (dimensions, événements postMessage, CSP headers).
3. Authentification OAuth2
3.1 Vue d'ensemble
Passe Marché utilise le protocole OAuth 2.0 avec le flux Client Credentials pour l'authentification des plateformes de marchés publics. Ce flux est adapté à la communication machine-à-machine sans intervention utilisateur.
3.2 Prérequis
3.2.1 Enregistrement d'une plateforme de marchés publics
L'enregistrement d'une plateforme de marchés publics est effectué manuellement par un administrateur Passe Marché. La plateforme reçoit :
client_id
Identifiant unique OAuth2
Chaîne hexadécimale 32 caractères
client_secret
Clé secrète OAuth2
Chaîne hexadécimale 64 caractères
webhook_secret
Secret pour signature HMAC
Chaîne hexadécimale 64 caractères
3.2.2 Configuration plateforme de marchés publics
name
Oui
Nom de la plateforme de marchés publics
completion_webhook_url
Non
URL de réception des webhooks
redirect_url
Non
URL de redirection post-complétion
authorized
-
Statut d'autorisation (géré par admin)
active
-
Statut d'activation (géré par admin)
can_create_defense_markets
-
Autorisation marchés défense
3.3 Obtention du token d'accès
3.3.1 Endpoint
3.3.2 Requête
Headers :
Body :
3.3.3 Réponse succès (200 OK)
access_token
string
Token JWT à utiliser dans les requêtes
token_type
string
Toujours "Bearer"
expires_in
integer
Durée de validité en secondes (24h)
scope
string
Permissions accordées
3.3.4 Réponses d'erreur
400
invalid_request
Paramètres manquants ou malformés
400
unsupported_grant_type
Grant type non supporté
401
invalid_client
Credentials invalides ou éditeur non autorisé
Exemple d'erreur :
3.4 Utilisation du token
Inclure le token dans l'en-tête Authorization de toutes les requêtes API :
3.5 Cycle de vie du token
Durée de validité
24 heures
Révocation
Automatique à l'émission d'un nouveau token
Refresh token
Non supporté (nouvelle authentification requise)
3.6 Scopes disponibles
api_access
Scope par défaut recommandé
Toutes les opérations
api_read
Lecture seule
Consultation des données
api_write
Écriture
Création et modification
3.7 Bonnes pratiques
Stockage sécurisé : Ne jamais exposer le
client_secretcôté clientVariables d'environnement : Stocker les secrets dans des variables d'environnement
Renouvellement anticipé : Renouveler le token avant expiration (buffer de 5 min)
HTTPS obligatoire : Toutes les communications doivent utiliser HTTPS
Pas de logging des secrets : Ne jamais logger client_secret ou access_token
4. Parcours Acheteur
4.1 Vue d'ensemble
Le parcours acheteur permet la création et la configuration d'un marché public. Il se décompose en :
Création via API : L'éditeur crée le marché avec les informations de base
Configuration via interface : L'acheteur configure les champs requis
Notification webhook : L'éditeur est notifié de la complétion
4.2 Création du marché public
4.2.1 Endpoint
4.2.2 Requête
Headers :
Body :
4.2.3 Paramètres
name
string
Oui
Max 255 caractères
Nom du marché public
deadline
datetime
Oui
ISO 8601, futur
Date limite de candidature
siret
string
Oui
14 chiffres, validation Luhn
SIRET de l'organisation publique
market_type_codes
array
Oui
Min 1 élément
Types de marché
lot_name
string
Non
Max 255 caractères
Nom du lot spécifique
4.2.4 Types de marché
supplies
Fournitures (biens, consommables)
Peut être seul ou combiné
services
Services (prestations, maintenance)
Peut être seul ou combiné
works
Travaux (construction, BTP)
Peut être seul ou combiné
defense
Défense nationale
Doit être combiné avec un autre type
Règle : Le type defense ne peut pas être utilisé seul. Il doit toujours être combiné avec au moins un autre type de marché.
4.2.5 Réponse succès (201 Created)
identifier
Identifiant unique du marché (format: VR-YYYY-XXXXXXXXXXXX)
configuration_url
URL vers l'interface de configuration
4.2.6 Réponses d'erreur
401
Token invalide
{"error": "Not authorized"}
403
Éditeur non autorisé
{"error": "Forbidden"}
422
Validation échouée
{"errors": ["Name can't be blank"]}
4.3 Interface de configuration (Wizard)
L'acheteur est redirigé vers une interface multi-étapes pour configurer le marché.
4.3.1 Étape 1 : Setup initial
URL : /buyer/public_markets/{identifier}/setup
Objectifs :
Affichage des informations de base du marché
Validation du SIRET de l'organisation publique
Option d'ajout du type "défense" (si autorisé)
4.3.2 Étape 2 : Champs obligatoires
URL : /buyer/public_markets/{identifier}/required_fields
Objectifs :
Sélection des champs obligatoires pour les candidats
Champs générés automatiquement selon les types de marché
Groupement par catégories et sous-catégories
[À COMPLÉTER] : Liste exhaustive des champs obligatoires par type de marché.
4.3.3 Étape 3 : Champs optionnels
URL : /buyer/public_markets/{identifier}/additional_fields
Objectifs :
Sélection des champs complémentaires facultatifs
Filtrage selon la configuration existante
[À COMPLÉTER] : Liste exhaustive des champs optionnels disponibles.
4.3.4 Étape 4 : Résumé et validation
URL : /buyer/public_markets/{identifier}/summary
Objectifs :
Récapitulatif de la configuration complète
Validation finale par l'acheteur
Déclenchement de la complétion
4.4 Catégories de champs
identification
Informations d'identification de l'entreprise
capacite_economique_financiere
Capacités économiques et financières
capacite_technique_professionnelle
Capacités techniques et professionnelles
attestations
Attestations et certifications
declarations
Déclarations sur l'honneur
documents
Documents complémentaires
[À COMPLÉTER] : Sous-catégories détaillées et champs associés.
4.5 Callback de retour
Après complétion, l'acheteur est redirigé vers l'URL de redirection configurée avec les paramètres :
Exemple :
5. Parcours Candidat
5.1 Vue d'ensemble
Le parcours candidat permet aux entreprises de soumettre leur candidature à un marché public. Il comprend :
Création via API : L'éditeur crée la candidature
Saisie via interface : Le candidat complète son dossier
Génération des documents : Attestation PDF et dossier ZIP
Notification webhook : L'éditeur est notifié de la complétion
5.2 Création de la candidature
5.2.1 Endpoint
5.2.2 Requête
Headers :
Body :
5.2.3 Paramètres
market_identifier
string
Oui
Format VR-YYYY-XXXX
Identifiant du marché
siret
string
Non
14 chiffres, validation Luhn
SIRET de l'entreprise candidate
Note : Le SIRET peut être omis à la création et fourni lors de l'étape d'identification.
5.2.4 Réponse succès (201 Created)
identifier
Identifiant unique de la candidature (format: FT + date + hash)
application_url
URL vers l'interface de candidature
5.3 Identification par SIRET
5.3.1 Validation du SIRET
Le SIRET est validé selon les règles suivantes :
Format : Exactement 14 caractères numériques
Algorithme de Luhn : Validation du checksum
Cas spécial La Poste : Format
356000000XXXXX(règle spécifique)
5.3.2 Récupération automatique des données
Lors de la saisie du SIRET, Passe Marché interroge automatiquement les APIs gouvernementales pour pré-remplir les informations de l'entreprise :
INSEE
Dénomination, forme juridique, adresse, date création
RNE
Données du registre national des entreprises
DGFIP
Données financières (CA, résultats)
URSSAF
Attestation de vigilance
Qualibat
Qualifications BTP
Qualifelec
Qualifications électricité
OPQIBI
Qualifications ingénierie
RGE
Qualifications énergétiques
BODACC
Situation vis-à-vis des procédures collectives
[À COMPLÉTER] : Détail des champs récupérés par chaque API.
5.4 Interface de candidature (Wizard dynamique)
Les étapes sont générées dynamiquement selon la configuration du marché par l'acheteur.
5.4.1 Structure des étapes
5.4.2 Étapes fixes
company_identification
/candidate/market_applications/{id}/company_identification
Saisie du SIRET
api_data_recovery_status
/candidate/market_applications/{id}/api_data_recovery_status
Statut récupération données
market_information
/candidate/market_applications/{id}/market_information
Informations du marché (lecture seule)
summary
/candidate/market_applications/{id}/summary
Récapitulatif et validation
5.4.3 Étapes dynamiques
Générées selon les catégories de champs configurées par l'acheteur :
capacite_economique_financierecapacite_technique_professionnelleattestationsdeclarationsdocumentsetc.
5.5 Types de champs de saisie
TextInput
Champ texte simple
Non
Textarea
Zone de texte multiligne
Non
EmailInput
Adresse email (validation format)
Non
PhoneInput
Numéro de téléphone (validation format FR)
Non
UrlInput
URL (validation format)
Non
FileUpload
Upload de fichier simple
Oui
InlineFileUpload
Upload de fichier inline
Oui
CheckboxWithDocument
Case à cocher + document optionnel
Oui (conditionnel)
RadioWithFileAndText
Radio + fichier + texte
Oui
FileOrTextarea
Choix fichier OU texte
Oui (optionnel)
PresentationIntervenants
Champ répétable pour intervenants + CV
Oui
RealisationsLivraisons
Champ répétable pour références
Oui
CapaciteEconomiqueFinanciereChiffreAffairesGlobalAnnuel
CA sur 3 ans
Non
CapaciteEconomiqueFinanciereEffectifsMoyensAnnuels
Effectifs sur 3 ans
Non
5.6 Formats de fichiers acceptés
application/pdf
Document PDF
image/jpeg
.jpg, .jpeg
Image JPEG
image/png
.png
Image PNG
image/gif
.gif
Image GIF
application/msword
.doc
Document Word (legacy)
application/vnd.openxmlformats-officedocument.wordprocessingml.document
.docx
Document Word
application/vnd.ms-excel
.xls
Excel (legacy)
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xlsx
Excel
5.7 Contraintes de fichiers
Taille maximale par fichier
100 Mo
Longueur maximale du nom de fichier
255 caractères
5.8 Processus de complétion
Lors de la soumission finale à l'étape summary :
Validation complète : Vérification de tous les champs obligatoires
Attestation d'exclusion : Le candidat atteste ne pas être en situation d'exclusion
Marquage complété :
completed_atest définiGénération PDF : Attestation candidate et attestation acheteur
Génération ZIP : Dossier complet avec tous les documents
Envoi webhook : Notification à l'éditeur
5.9 Callback de retour
Après complétion, le candidat est redirigé vers :
Exemple :
6. Référence API
6.1 Base URL
Sandbox
https://sandbox.passemarche.data.gouv.fr
Staging
https://staging.passemarche.data.gouv.fr
Preprod
https://preprod.passemarche.data.gouv.fr
Production
https://passemarche.data.gouv.fr
Tous les endpoints API sont préfixés par /api/v1/.
6.2 Format des réponses
Content-Type :
application/json(sauf téléchargements binaires)Encoding : UTF-8
Format des dates : ISO 8601 (
YYYY-MM-DDTHH:MM:SSZ)
6.3 Codes de statut HTTP
200
OK
Requête réussie
201
Created
Ressource créée avec succès
400
Bad Request
Paramètres de requête invalides
401
Unauthorized
Token manquant ou invalide
403
Forbidden
Accès refusé
404
Not Found
Ressource non trouvée
422
Unprocessable Entity
Erreurs de validation
429
Too Many Requests
Rate limit dépassé
500
Internal Server Error
Erreur serveur
6.4 Format des erreurs
Erreur simple :
Erreurs multiples :
Erreurs par champ :
6.5 Endpoints
6.5.1 OAuth - Obtention du token
Voir section 3.3 pour les détails.
6.5.2 Marchés publics - Création
Voir section 4.2 pour les détails.
6.5.3 Candidatures - Création
Voir section 5.2 pour les détails.
6.5.4 Candidatures - Téléchargement attestation
Headers :
Conditions :
Candidature en statut
completedAttestation générée et disponible
Éditeur autorisé pour cette candidature
Réponse succès (200 OK) :
Erreurs :
404 : Candidature non trouvée
422 : Candidature non finalisée
404 : Attestation non disponible
6.5.5 Candidatures - Téléchargement dossier
Headers :
Conditions :
Candidature en statut
completedDossier généré et disponible
Éditeur autorisé pour cette candidature
Réponse succès (200 OK) :
Erreurs :
404 : Candidature non trouvée
422 : Candidature non finalisée
404 : Dossier non disponible
6.6 Rate limiting
Authentification
60 requêtes/heure
API générale
1000 requêtes/heure
Téléchargements
100 requêtes/heure
Headers de réponse :
Réponse 429 :
7. Webhooks
7.1 Vue d'ensemble
Les webhooks permettent à Passe Marché de notifier la plateforme de marchés publics en temps réel lors d'événements importants.
7.2 Configuration
Les webhooks sont configurés au niveau de la plateforme de marchés publics par l'administrateur :
completion_webhook_url
URL de réception des webhooks
webhook_secret
Secret HMAC-SHA256 (64 caractères hex)
7.3 Format des requêtes
Headers :
7.4 Événements
7.4.1 market.completed
Déclenché lorsqu'un acheteur finalise la configuration d'un marché.
7.4.2 market_application.completed
Déclenché lorsqu'un candidat finalise sa candidature.
7.5 Signature HMAC-SHA256
7.5.1 Algorithme de signature
7.5.2 Vérification côté récepteur
Extraire la signature de l'en-tête
X-Webhook-Signature-SHA256Supprimer le préfixe
sha256=Calculer
HMAC-SHA256(secret, body)avec le body brutComparer les signatures de manière sécurisée (timing-safe comparison)
Rejeter si les signatures ne correspondent pas
Exemple (pseudo-code) :
7.6 Mécanisme de retry
7.6.1 Configuration
Tentatives maximales
3
Délais
Backoff polynomial (1s, 4s, 9s)
Timeout par tentative
30 secondes
7.6.2 Codes de réponse et actions
200-299
Succès, pas de retry
400, 401, 403, 404, 405, 410, 422
Erreur permanente, pas de retry
408, 429
Retry avec délai
500-599
Retry avec délai
Timeout réseau
Retry avec délai
7.7 Statuts de synchronisation
sync_pending
En attente de traitement
sync_processing
Webhook en cours d'envoi
sync_completed
Webhook délivré avec succès
sync_failed
Tous les retries échoués
7.8 Idempotence
Les webhooks peuvent être reçus plusieurs fois. La plateforme de marchés publics doit implémenter une logique d'idempotence basée sur :
event+timestamp+identifierde l'objet
Recommandation : Stocker les événements traités avec un TTL de 24h.
8. Gestion des documents
8.1 Documents générés
8.1.1 Attestation candidat
Nom de fichier : attestation_FT{identifier}.pdf
Contenu :
En-tête République Française
Informations du marché public
Informations de l'entreprise candidate
Récapitulatif des informations saisies
Horodatage de soumission
Mention légale de certification
8.1.2 Attestation acheteur
Nom de fichier : buyer_attestation_FT{identifier}.pdf
Contenu :
En-tête République Française
Informations du marché public
Informations de l'entreprise candidate
Récapitulatif complet pour l'acheteur
Horodatage de soumission
8.2 Dossier documents (ZIP)
Nom de fichier : documents_package_FT{identifier}.zip
Structure :
8.3 Nomenclature des fichiers
Format : {source}_{response_index}_{doc_index}_{field_key}_{original_filename}
source
api_ pour documents API, user_ pour documents uploadés
response_index
Index de la réponse (01, 02, ...)
doc_index
Index du document dans la réponse (01, 02, ...)
field_key
Clé du champ de formulaire
original_filename
Nom original du fichier
Exemple : user_03_01_kbis_Kbis_Entreprise_2024.pdf
8.4 Génération PDF
Technologie : WickedPDF (wkhtmltopdf)
Format :
Taille : A4
Marges : 20mm (haut/bas), 15mm (gauche/droite)
Encodage : UTF-8
Style :
Police : Marianne (DSFR)
Couleur primaire : #000091 (Bleu France)
9. Sécurité et conformité
9.1 Exigences de sécurité
9.1.1 Transport
HTTPS obligatoire : Toutes les communications API et webhooks
TLS 1.2+ : Version minimale requise
9.1.2 Authentification
OAuth2 Client Credentials : Seul flux autorisé
Tokens de courte durée : 24h maximum
Révocation automatique : À chaque nouveau token
9.1.3 Webhooks
Signature HMAC-SHA256 : Obligatoire pour tous les webhooks
Vérification côté récepteur : Recommandée
9.2 Stockage des secrets
client_secret
Variables d'environnement, vault
webhook_secret
Variables d'environnement, vault
access_token
Mémoire uniquement, ne pas persister
9.3 Conformité RGPD
[À COMPLÉTER] :
Durée de conservation des données
Procédure de suppression
Transferts de données
Droits des personnes concernées
9.4 Données personnelles traitées
Entreprise
SIRET, dénomination, adresse
Exécution contrat
Contact
Nom, email, téléphone
Exécution contrat
Documents
Fichiers uploadés
Exécution contrat
[À COMPLÉTER] : Liste complète et durées de conservation.
10. Environnements
10.1 Tableau récapitulatif
Sandbox
sandbox.passemarche.data.gouv.fr
Simulées
Tests internes
Équipe PM
Staging
staging.passemarche.data.gouv.fr
Simulées
Intégration plateformes de marchés publics
Preprod
preprod.passemarche.data.gouv.fr
Réelles
Recette
plateformes de marchés publics autorisées
Production
passemarche.data.gouv.fr
Réelles
Production
plateformes de marchés publics validées
10.2 Staging
Cas d'usage : Développement et tests d'intégration
Caractéristiques :
Données API simulées (pas d'appels aux APIs réelles)
Accès public pour les plateformes de marchés publics
Environnement de référence pour les tests
Recommandation : Utiliser cet environnement pour le développement initial de l'intégration.
10.3 Preprod
Cas d'usage : Tests de recette avec données réelles
Caractéristiques :
Données API réelles
Accès restreint (credentials spécifiques)
Configuration iso-production
Recommandation : Valider l'intégration complète avant mise en production.
10.4 Production
Cas d'usage : Utilisation par les utilisateurs finaux
Caractéristiques :
Données API réelles
Haute disponibilité
Monitoring et alerting
Prérequis :
Validation complète en preprod
Credentials production obtenus
Webhook HTTPS configuré
Monitoring côté éditeur en place
10.5 Configuration recommandée
11. Annexes
11.1 Exemples de code
11.1.1 Authentification (cURL)
11.1.2 Création d'un marché (cURL)
11.1.3 Vérification signature webhook (Python)
11.1.4 Vérification signature webhook (Ruby)
11.2 Diagramme de séquence complet
11.3 Checklist d'intégration
Phase 1 : Développement (Staging)
Phase 2 : Recette (Preprod)
Phase 3 : Production
11.4 FAQ
Q: Combien de temps un token est-il valide ? R: 24 heures. Renouvelez le token avant expiration.
Q: Peut-on réutiliser un token révoqué ? R: Non. Une fois révoqué, le token ne peut plus être utilisé.
Q: Les webhooks sont-ils garantis ? R: Non. En cas d'échec après 3 retries, le statut passe à sync_failed. Un retry manuel est possible.
Q: Peut-on créer plusieurs candidatures pour le même SIRET ? R: [À COMPLÉTER] : Règle métier à préciser.
Q: Quelle est la taille maximale d'un fichier ? R: 100 Mo par fichier.
Q: Les données sont-elles chiffrées au repos ? R: [À COMPLÉTER] : Politique de chiffrement à préciser.
11.5 Contacts support technique
[À COMPLÉTER] :
Email support :
Documentation en ligne :
Canal Mattermost/Slack :
Historique des versions
1.0.0
2026-02-03
Équipe PM
Version initiale
Document généré pour l'intégration des plateformes de marchés publics avec Passe Marché.
Mis à jour
Ce contenu vous a-t-il été utile ?

