Ein Mandat bei Peppol registrieren
Anwendungsfall Schritt für Schritt, um die Voraussetzungen zu prüfen, ein Mandat über die API im Peppol-Netzwerk zu registrieren, seine Aktivierung zu verfolgen und den Empfang der Dokumente einzustellen.
NovaFisko registriert ein Mandat über den Access Point B2Brouter im Peppol-Netzwerk. Dieser Leitfaden prüft die Voraussetzungen, startet die Registrierung, verfolgt die Aktivierung und stellt die empfangenen Dokumenttypen ein. Das ist der Ablauf des Reiters Peppol in der Anwendung.
Voraussetzungen: ein Token mit den Berechtigungen read und write sowie das public_token des Mandats.
Die Peppol-Registrierung ist eine reale externe Wirkung: Das Mandat wird im Netzwerk erreichbar. Sie ist in der Demo-Kanzlei blockiert (403, Code demo_mode). Testen Sie sie mit einem echten Mandat.
Schritt 1: Zustand und Voraussetzungen lesen
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
}
| Feld | Beschreibung |
|---|---|
status |
none, pending, active, inactive, error, external oder deleted |
participant_id |
Peppol-Kennung, berechnet aus der Unternehmensnummer oder der MwSt.-Nummer |
can_register |
true, wenn kein Hindernis die Registrierung verhindert |
blocker_codes |
Stabile Codes der Hindernisse. blockers liefert deren übersetzten Text |
registered_elsewhere |
Der Teilnehmer existiert bereits bei einem anderen Access Point |
managed_by_novadesko |
Die bestehende Registrierung wird aus Novadesko verwaltet |
Mögliche Hindernisse
| Code | Bedeutung | Korrektur |
|---|---|---|
provider_not_configured |
Der Access Point ist auf der Plattform nicht konfiguriert | Den Support kontaktieren |
vat_number_missing |
Weder eine MwSt.-Nummer noch eine verwertbare Unternehmensnummer | Die Stammdaten des Mandats ergänzen |
address_missing |
Adresse unvollständig | address, postal_code, city angeben |
email_missing |
Keine Kontakt-E-Mail-Adresse | email angeben |
managed_by_novadesko |
Bereits über Novadesko registriert | Nichts zu tun, der Empfang ist bereits sichergestellt |
registered_elsewhere |
Bereits bei einem anderen Anbieter registriert | Siehe Bereits anderswo registriert |
Schritt 2: das Mandat registrieren
Die gesendeten Felder ergänzen oder ersetzen für die Registrierung die Kontaktdaten des Mandats.
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"
}'
| Feld | Beschreibung |
|---|---|
email |
Kontaktadresse, max. 190 Zeichen |
phone |
Telefon, max. 40 Zeichen |
address, postal_code, city, province |
Adresse des Sitzes |
options.round_before_sum, options.apply_taxes_per_line, options.registered_for_empl_tax |
Berechnungsoptionen des Kontos beim Access Point, optionale boolesche Werte |
Die Antwort ist 201 bei einer neuen Registrierung, 200, wenn das Mandat bereits aktiv war. Der Body hat dieselbe Form wie in Schritt 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
}
Die Route ist auf 6 Aufrufe pro Minute begrenzt.
Bei einer Ablehnung
Eine Ablehnung liefert 422 (oder den vom Anbieter übermittelten Status) mit den Hindernissen und dem aktuellen Zustand:
{
"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"}
}
Ein Problem auf Seiten des Access Points trägt den Code provider_error. Versuchen Sie es später erneut.
Schritt 3: die Aktivierung verfolgen
Die Veröffentlichung im Peppol-Verzeichnis kann einige Minuten dauern. Erzwingen Sie eine Prüfung:
curl -X POST https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/peppol/refresh \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"
Das Mandat ist erreichbar, wenn status den Wert active und smp.published den Wert true hat. Die Route ist auf 12 Aufrufe pro Minute begrenzt.
Statt refresh in einer Schleife abzufragen, abonnieren Sie mit einem Webhook das Ereignis peppol.status_changed.
Schritt 4: den Empfang einstellen
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 | Aufgabe |
|---|---|
enabled |
Peppol-Transport aktiv |
reception |
Empfang eingehender Dokumente |
standard_documents |
Standardsatz an Dokumenten |
invoice, credit_note |
Rechnungen und Gutschriften |
self_billing |
Selbstfakturierung |
order |
Bestellungen |
application_response |
Anwendungsantworten |
Senden Sie nur die Optionen, die Sie ändern möchten. Die übrigen bleiben unverändert. Die vollständige Liste der Dokumenttypen erhalten Sie mit GET peppol/document-types.
Einen Partner prüfen
So erfahren Sie, ob ein Kunde oder ein Lieferant über Peppol erreichbar ist:
curl "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/peppol/lookup?vat=BE0999900233&country=BE" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"
Sie können auch identifier=0208:0999900233 übergeben. Für einen Geschäftspartner des Mandats liefert GET third-parties/{id}/peppol den zwischengespeicherten Status, und ?refresh=1 erzwingt eine neue Prüfung.
Das Mandat abmelden
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 hat den Wert expensive, accountant oder other. custom_reason ist bei other Pflicht. Die Antwort liefert die Identität ein letztes Mal mit dem Status deleted.
Technisches Protokoll
GET peppol/logs?limit=50 liefert die letzten Austausche mit dem Access Point (Methode, URI, Status, Dauer, Fehler), höchstens 200. Nützlich, um einen provider_error zu diagnostizieren.