Zum Inhalt springen
Dokumentation
Deutsch
App öffnen

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.

Achtung

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.

Tipp

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.

Siehe auch