Inscrire un dossier sur Peppol
Cas d'usage pas à pas pour vérifier les prérequis, inscrire un dossier sur le réseau Peppol par l'API, suivre son activation et régler la réception des documents.
NovaFisko inscrit un dossier sur le réseau Peppol par l'intermédiaire du point d'accès B2Brouter. Ce guide vérifie les prérequis, lance l'inscription, suit l'activation et règle les types de documents reçus. C'est le parcours de l'onglet Peppol de l'application.
Prérequis : un jeton avec les capacités read et write et le public_token du dossier.
L'inscription Peppol est un effet externe réel : le dossier devient joignable sur le réseau. Elle est bloquée dans le cabinet de démonstration (403, code demo_mode). Testez-la sur un vrai dossier.
Étape 1 : lire l'état et les prérequis
curl https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/peppol \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"
{
"identity": null,
"participant_id": "0208:0999900134",
"status": "none",
"account": null,
"transport": null,
"smp": {"published": false, "checked_at": null},
"access_point": null,
"supported_documents": [],
"can_register": false,
"blockers": ["L'adresse e-mail de contact est manquante."],
"blocker_codes": ["email_missing"],
"managed_by_novadesko": false,
"registered_elsewhere": false,
"external_provider": null,
"provider_configured": true,
"environment": "production",
"contact": {"address": "Rue de Nimy 12", "postalcode": "7000", "city": "Mons", "province": null, "email": null, "phone": null},
"last_error": null
}
| Champ | Description |
|---|---|
status |
none, pending, active, inactive, error, external ou deleted |
participant_id |
Identifiant Peppol calculé à partir du numéro d'entreprise ou de TVA |
can_register |
true quand aucun blocage n'empêche l'inscription |
blocker_codes |
Codes stables des blocages. blockers en donne le texte traduit |
registered_elsewhere |
Le participant existe déjà chez un autre point d'accès |
managed_by_novadesko |
L'inscription existante est gérée depuis Novadesko |
Blocages possibles
| Code | Signification | Correction |
|---|---|---|
provider_not_configured |
Le point d'accès n'est pas configuré sur la plateforme | Contacter le support |
vat_number_missing |
Ni numéro de TVA ni numéro d'entreprise exploitable | Compléter la fiche du dossier |
address_missing |
Adresse incomplète | Fournir address, postal_code, city |
email_missing |
Pas d'adresse e-mail de contact | Fournir email |
managed_by_novadesko |
Déjà inscrit via Novadesko | Rien à faire, la réception est déjà assurée |
registered_elsewhere |
Déjà inscrit chez un autre fournisseur | Voir Déjà enregistré ailleurs |
Étape 2 : inscrire le dossier
Les champs envoyés complètent ou remplacent les coordonnées du dossier pour l'inscription.
curl -X POST https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/peppol/register \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "factures@comptoir-montois.example",
"phone": "+32 65 00 00 00",
"address": "Rue de Nimy 12",
"postal_code": "7000",
"city": "Mons",
"province": "Hainaut"
}'
| Champ | Description |
|---|---|
email |
Adresse de contact, 190 caractères max |
phone |
Téléphone, 40 caractères max |
address, postal_code, city, province |
Adresse du siège |
options.round_before_sum, options.apply_taxes_per_line, options.registered_for_empl_tax |
Options de calcul du compte chez le point d'accès, booléens facultatifs |
La réponse est 201 pour une nouvelle inscription, 200 si le dossier était déjà actif. Le corps a la même forme qu'à l'étape 1 :
{
"identity": {
"id": 57,
"scheme": "iso6523-actorid-upis",
"value": "0208:0999900134",
"full_id": "iso6523-actorid-upis::0208:0999900134",
"provider": "b2brouter",
"status": "active",
"incoming_enabled": true,
"activated_at": "2026-10-05T09:02:11.000000Z"
},
"participant_id": "0208:0999900134",
"status": "active",
"account": {"id": "184223", "name": "Le Comptoir Montois SRL", "archived": false},
"transport": {
"enabled": true,
"reception": true,
"standard_documents": true,
"invoice": true,
"credit_note": true,
"self_billing": false,
"order": false,
"application_response": false
},
"smp": {"published": true, "checked_at": "2026-10-05T09:02:14+00:00"},
"access_point": {"smp_host": "smp.b2brouter.net", "provider_name": "B2Brouter", "endpoint_url": null, "technical_contact": null},
"supported_documents": ["invoice", "credit_note"],
"can_register": false,
"blockers": ["Le dossier est déjà inscrit sur Peppol."],
"blocker_codes": ["already_registered"],
"registered_elsewhere": false,
"provider_configured": true,
"environment": "production",
"last_error": null
}
La route est limitée à 6 appels par minute.
En cas de refus
Un refus renvoie 422 (ou le statut transmis par le fournisseur) avec les blocages et l'état courant :
{
"message": "Le dossier ne peut pas être inscrit sur Peppol.",
"errors": {"peppol": ["Le dossier ne peut pas être inscrit sur Peppol."]},
"blockers": ["Ce numéro est déjà inscrit sur Peppol auprès d'un autre fournisseur."],
"blocker_codes": ["registered_elsewhere"],
"state": {"status": "external", "registered_elsewhere": true, "external_provider": "Autre point d'accès"}
}
Un problème côté point d'accès porte le code provider_error. Réessayez plus tard.
Étape 3 : suivre l'activation
La publication dans l'annuaire Peppol peut prendre quelques minutes. Forcez une vérification :
curl -X POST https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/peppol/refresh \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"
Le dossier est joignable quand status vaut active et smp.published vaut true. La route est limitée à 12 appels par minute.
Plutôt que d'interroger refresh en boucle, abonnez un webhook à l'événement peppol.status_changed.
Étape 4 : régler la réception
curl -X PATCH https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/peppol/transport \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reception": true, "invoice": true, "credit_note": true, "self_billing": true}'
| Option | Rôle |
|---|---|
enabled |
Transport Peppol actif |
reception |
Réception des documents entrants |
standard_documents |
Jeu standard de documents |
invoice, credit_note |
Factures et notes de crédit |
self_billing |
Autofacturation |
order |
Commandes |
application_response |
Réponses applicatives |
N'envoyez que les options à modifier. Les autres restent inchangées. La liste complète des types de documents est disponible avec GET peppol/document-types.
Vérifier un partenaire
Pour savoir si un client ou un fournisseur est joignable sur Peppol :
curl "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/peppol/lookup?vat=BE0999900233&country=BE" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"
Vous pouvez aussi passer identifier=0208:0999900233. Pour un tiers du dossier, GET third-parties/{id}/peppol renvoie le statut mis en cache et ?refresh=1 force une nouvelle vérification.
Désinscrire le dossier
curl -X DELETE https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/peppol \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"reason_type": "other", "custom_reason": "Changement de logiciel de facturation"}'
reason_type vaut expensive, accountant ou other. custom_reason est obligatoire avec other. La réponse renvoie une dernière fois l'identité avec le statut deleted.
Journal technique
GET peppol/logs?limit=50 renvoie les derniers échanges avec le point d'accès (méthode, URI, statut, durée, erreur), 200 au maximum. Utile pour diagnostiquer un provider_error.