Skip to content
Log in

Verifactu

Das Anti-Betrugsgesetz (Gesetz 11/2021) verpflichtet Unternehmen dazu, sicherzustellen, dass ihre Rechnungsstellungs- und Buchhaltungssysteme strenge technische Standards erfüllen, um Datenmanipulation zu verhindern. Das Königliche Dekret 1007/2023 definiert darüber hinaus die technischen Anforderungen an digitale Abrechnungssysteme und betont die Notwendigkeit standardisierter Rechnungsformate, auf die Steuerbehörden einfach zugreifen können.

Diese Vorschriften verpflichten Unternehmen, Systeme einzuführen, die in der Lage sind, Rechnungen und Steuerberichte sicher zu erstellen, zu speichern und zu übermitteln. Die REST API von B2Brouter ist eine technische Lösung, mit der Ihr Unternehmen problemlos 100 % konform sein kann, indem die Komplexität an B2Brouter ausgelagert wird und Sie sich auf die Geschäftslogik Ihres Systems konzentrieren können.

Verifactu ist ein Compliance-System, das darauf ausgelegt ist, die Erfüllung der im Anti-Betrugsgesetz festgelegten Rechnungsstellungsanforderungen zu vereinfachen. Es stellt sicher, dass alle von Unternehmen ausgestellten Rechnungen sicher an die Steuerbehörde übermittelt werden, um von der Steuerbehörde und dem Kunden auf Integrität und Authentizität überprüft zu werden. Die spanische Steuerbehörde ist die AEAT („Agencia Estatal de Administración Tributaria”).

Verifactu beinhaltet die sofortige Echtzeitübermittlung von Rechnungsdaten an die AEAT, sobald die Rechnung ausgestellt wird. Dadurch wird sichergestellt, dass nach der Ausstellung keine Änderungen vorgenommen werden können, was die Sicherheit der Rechnung garantiert. Außerdem enthält die Rechnung einen QR-Code, mit dem der Empfänger die Steuerkonformität über die Plattform der AEAT überprüfen kann.

In der Praxis erfordert Verifactu:

  • Das Erstellen einer XML-Datei für den Steuerbericht.
  • Das Berechnen eines digitalen Fingerabdrucks für jeden Steuerbericht. Dazu gehört eine Hash-Kette, die eine manipulationssichere Nachverfolgung ermöglicht.
  • Das Zusammenstellen eines „Libro de Registro” (Ledger), das einen oder mehrere Steuerberichte enthalten kann.
  • Die authentifizierte Übermittlung des „Libro de Registro” an die AEAT mittels eines qualifizierten elektronischen Zertifikats.
  • Die Einhaltung der von der AEAT festgelegten ratenbegrenzten Anfragen (max. 1 Aufruf pro Minute, außer bei mehr als 1.000 Rechnungen).
  • Das Generieren eines QR-Codes zur Rechnungsverifikation, der in die ausgestellte Rechnung eingebunden werden muss.
  • Die Verarbeitung der Antworten der AEAT für jeden Steuerbericht.

Mit B2Brouter können Sie einen Großteil der Komplexität dieses Prozesses abstrahieren und durch nur wenige REST-Aufrufe an die API die Anti-Betrugsgesetzgebung einhalten. Sie benötigen kein eigenes qualifiziertes elektronisches Zertifikat, da B2Brouter ein Social Collaborator im Steuerbereich ist. Sie benötigen lediglich einen gültigen B2Brouter API-Schlüssel.

Testumgebungen: Verwenden Sie die Sandbox für erste API-Tests und Payload-Validierung — die Sandbox simuliert Verifactu-Einreichungen, sodass Sie den Rechnungslebenszyklus durchlaufen können, ohne die AEAT zu kontaktieren. Für vollständige End-to-End-Tests mit dem Test-Endpunkt der AEAT verwenden Sie die Staging-Umgebung (api-staging.b2brouter.net).

Einrichtung und Arbeiten mit der B2Brouter API

Section titled “Einrichtung und Arbeiten mit der B2Brouter API”

Der erste Schritt ist die Konfiguration von Verifactu für jedes Unternehmen, für das Sie Steuerberichte einreichen möchten. Eine vollständige Beschreibung des Prozesses finden Sie im Leitfaden zu den Steuerberichtseinstellungen. Der Aufruf zur Konfiguration eines Kontos lautet wie folgt:

Beispielanfrage

Terminal window
curl --request GET \
--url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/tax_report_settings \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'Content-Type: application/json' \
--data '{
"tax_report_setting": {
"code": "Verifactu",
"start_date": "2025-04-06",
"auto_generate": true,
"auto_send": true,
"reason_vat_exempt": "E1",
"special_regime_key": "01",
"reason_no_subject": "N1",
"credit_note_code": "R1"
}
}'

Wenn Sie B2Brouter sowohl für die Rechnungsausstellung als auch für die Meldung an die Steuerbehörde verwenden, können Sie nach der korrekten Konfiguration Ihres Kontos wie gewohnt Rechnungen ausstellen.

Die ausgestellten Rechnungen enthalten den obligatorischen QR-Code, und der Verifactu-Steuerbericht wird automatisch an die AEAT gesendet. Dies ist ein Beispiel für einen Aufruf zum Erstellen und Ausstellen einer Rechnung:

Beispielanfrage:

Terminal window
curl --request POST \
--url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/invoices \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'content-type: application/json' \
--data '{
"send_after_import": true,
"invoice": {
"date": "2025-04-15",
"due_date": "2025-05-15",
"number": 48,
"payment_method": 1,
"contact": {
"name": "contact.name",
"address": "contact.address",
"city": "contact.city",
"province": "contact.province",
"postalcode": "28938",
"country": "es",
"email": "john.doe@example.com",
"language": "es",
"currency": "EUR",
"terms": "15",
"payment_method": 1,
"tin_scheme": 9920,
"tin_value": "ESA28388510"
},
"invoice_lines_attributes": [
{
"quantity": 10.0,
"description": "line.description",
"price": 11.0,
"unit": 9,
"taxes_attributes": [
{
"name": "IVA",
"percent": 21.0,
"category": "S"
}
]
}
]
}
}'

In der Antwort des POST-REST-Aufrufs zum Erstellen einer Rechnung finden Sie, wenn send_after_import auf true gesetzt ist, einen Abschnitt tax_report_ids mit der ID des der Rechnung zugeordneten Steuerberichts.

Sie können auf den vollständigen Steuerbericht — einschließlich QR-Code, Bezeichner, Status und aller anderen Felder — zugreifen, indem Sie den Endpunkt zum Abrufen eines Steuerberichts mit der in der Antwort des Erstellungsaufrufs angegebenen Steuerbericht-ID aufrufen.

Der Status des Steuerberichts ist in der Antwort des POST-Aufrufs immer processing. Sie müssen den Lebenszyklus des Steuerberichts überwachen. Sie haben zwei Möglichkeiten:

Wenn Sie B2Brouter nicht für die Rechnungsausstellung verwenden, mehr Kontrolle über den Prozess der Generierung und Verarbeitung von Steuerberichten benötigen oder ein hohes Volumen an Steuerberichten erwarten, können Sie die neue Steuerbericht-API verwenden.

Diese API ist für maximale Benutzerkontrolle und hohe Verfügbarkeit ausgelegt. Sie können Steuerberichte entweder als JSON-Payload oder als gültiges Verifactu-XML einreichen.

Die Struktur des JSON-Formats für B2Brouter-Steuerberichte basiert auf PEPPOL Continuous Transaction Control (CTC). Die B2Brouter Steuerbericht-API ist eine universelle API, die nicht nur für Verifactu konzipiert ist, sondern für die Steuerberichterstattung weltweit.

Es ist wichtig zu beachten, dass Steuerberichte Steueraufgliederungen („desglose” auf Spanisch) haben, die die Summe der Originalrechnungspositionen mit derselben Steuer darstellen. Ihr System ist dafür verantwortlich, die Rechnungspositionen nach Steuertyp und -kategorie zu aggregieren und die notwendigen Steueraufgliederungen bereitzustellen. Das TaxReport-Modell führt keine Berechnungen durch.

Um einen Steuerbericht zu erstellen, müssen Sie den Endpunkt Steuerbericht erstellen aufrufen. Ein minimaler und gültiger Steuerbericht:

Beispielanfrage:

Terminal window
curl --request POST \
--url https://api-staging.b2brouter.net/accounts/{ACCOUNT_ID}/tax_reports \
--header 'X-B2B-API-Key: {YOUR_API_KEY}' \
--header 'X-B2B-API-Version: {YOUR_API_VERSION}' \
--header 'Content-Type: application/json' \
--data '{
"tax_report": {
"type": "Verifactu",
"invoice_date": "2025-04-03",
"invoice_number": "11",
"description": "Lorem ipsum...",
"customer_party_tax_id": "B12345678",
"customer_party_country": "es",
"customer_party_name": "Ejemplo S.L.",
"tax_inclusive_amount": 121.0,
"tax_amount": 21.0,
"invoice_type_code": "F1",
"currency": "EUR",
"tax_breakdowns": [
{
"name": "IVA",
"category": "S",
"non_exemption_code": "S1",
"percent": 21.0,
"taxable_base": 100.0,
"tax_amount": 21.0,
"special_regime_key": "01"
}
]
}
}'

Die Antwort auf diesen POST-Aufruf enthält bereits das Feld qr mit dem QR-Code (in Base64 kodiert), den Sie in die Rechnung für Ihren Kunden einbinden müssen. Der Inhalt dieses QR-Codes ist eine URL, mit der Ihr Kunde überprüfen kann, ob die AEAT den aus seiner Rechnung abgeleiteten Steuerbericht erhalten und verarbeitet hat.

Einen Steuerbericht aus einer Verifactu XML-Datei importieren

Section titled “Einen Steuerbericht aus einer Verifactu XML-Datei importieren”

Wenn Ihr System in der Lage ist, Verifactu-XML-Dateien zu generieren (ein RegistroAlta oder eine RegistroAnulacion aus dem Namespace SuministroInformacion), können Sie diese direkt über die API über den Import-Endpunkt importieren.

Wenn die Erstellung des Steuerberichts erfolgreich ist, enthält die Antwort bereits den QR-Code und den Bezeichner für den Steuerbericht. Beachten Sie, dass B2Brouter den Verkettungsprozess unabhängig von etwaigen Verkettungsinformationen in der importierten XML-Datei durchführt.

Das Feld state des Steuerberichts ist nach erfolgreicher Erstellung immer processing. Verfolgen Sie den Lebenszyklus über:

XML-Darstellung des Steuerberichts abrufen

Section titled “XML-Darstellung des Steuerberichts abrufen”

Verwenden Sie den Endpunkt zum Herunterladen eines Steuerberichts. B2Brouter enthält in der GET-Antwort auch ein Feld namens xml_base64. Beachten Sie, dass die XML-Datei nur nach der Verkettung des Steuerberichts generiert werden kann.

B2Brouter hat einen umfangreichen Satz an Validierungen von Verifactu-Steuerberichten implementiert, basierend auf den von der AEAT veröffentlichten Spezifikationen. Bei einem Validierungsfehler wird der Steuerbericht nicht erstellt. Sie erhalten eine Antwort 422: Unprocessable Entity mit allen Fehlern im JSON-Format.

Um einen Steuerbericht zu stornieren („anulación” auf Spanisch), verwenden Sie das Verb DELETE und rufen Sie den Annullierungsendpunkt auf.

Um einen Steuerbericht zu korrigieren („subsanación” auf Spanisch), verwenden Sie die Verben PATCH oder PUT und rufen Sie den Korrekturendpunkt auf.

Verifactu-Steuerberichte werden nicht einzeln an die AEAT übermittelt, sondern in einem „Libro de Registro” (in B2Brouter als Ledger bezeichnet) gebündelt, das bis zu 1.000 Steuerberichte enthält. Jeder Steuerbericht hat ein Feld ledger_id, das die interne ID des Ledgers identifiziert. Mit dieser ID können Sie:

Entsprechung zwischen internen B2Brouter-Steuerberichtsfeldern und Verifactu XML-Knoten

Section titled “Entsprechung zwischen internen B2Brouter-Steuerberichtsfeldern und Verifactu XML-Knoten”
B2Brouter-Feld (basierend auf PEPPOL CTC)Verifactu XML-Knoten
invoice_dateIDFactura > FechaExpedicionFactura
invoice_numberIDFactura > NumSerieFactura
invoice_series_codeIDFactura > NumSerieFactura
supplier_party_nameNombreRazonEmisor
external_referenceRefExterna
correctionSubsanacion
annullationAnulación
previously_refusedRechazoPrevio
invoice_type_codeTipoFactura
amend_typeTipoFactura
amended_numberFacturasRectificadas > IDFacturaRectificada > NumSerieFactura
amended_series_codeFacturasRectificadas > IDFacturaRectificada > NumSerieFactura
amended_dateFacturasRectificadas > IDFacturaRectificada > FechaExpedicionFactura
amended_tax_exclusiveImporteRectificacion > BaseRectificada
amended_tax_amountImporteRectificacion > CuotaRectificada
tax_point_dateFechaOperacion
descriptionDescripcionOperacion
simplified_art7273FacturaSimplificadaArt7273
ticketFacturaSinIdentifDestinatarioArt61d
macrodataMacrodato
issued_by_third_party_or_receiverEmitidaPorTerceroODestinatario
third_party_nameTercero > NombreRazon
third_party_tax_idTercero > NIF
customer_party_nameDestinatarios > IDDestinatario > NombreRazon
customer_party_tax_idDestinatarios > IDDestinatario > NIF or IDOtro > IDType
customer_party_countryDestinatarios > IDDestinatario > IDOtro > CodigoPais
customer_party_tax_schemeDestinatarios > IDDestinatario > IDOtro > IDType
tax_breakdowns[].nameDesglose > DetalleDesglose > Impuesto
tax_breakdowns[].special_regime_keyDesglose > DetalleDesglose > ClaveRegimen
tax_breakdowns[].non_exemption_codeDesglose > DetalleDesglose > CalificacionOperacion
tax_breakdowns[].exemption_codeDesglose > DetalleDesglose > OperacionExenta
tax_breakdowns[].percentDesglose > DetalleDesglose > TipoImpositivo
tax_breakdowns[].taxable_baseDesglose > DetalleDesglose > BaseImponibleOimporteNoSujeto
tax_breakdowns[].taxable_base_at_costDesglose > DetalleDesglose > BaseImponibleACoste
tax_breakdowns[].tax_amountDesglose > DetalleDesglose > CuotaRepercutida
tax_amountCuotaTotal
tax_inclusive_amountImporteTotal
previous_idEncadenamiento > RegistroAnterior > NumSerieFactura
XSD-DateiBeschreibung
SuministroLR.xsdOperaciones de alta y anulación de los sistemas Verifactu y no Verifactu
RespuestaSuministro.xsdRespuesta de las operaciones de los sistemas Verifactu y no Verifactu
ConsultaLR.xsdOperación de consulta de registros de facturación Verifactu
RespuestaConsultaLR.xsdRespuesta de la operación de consulta de registros de facturación Verifactu
SuministroInformacion.xsdDefinición de tipos comunes

Parameter: invoice_type_code

CodeBeschreibung
F1Factura (art. 6, 7.2 y 7.3 del RD 1619/2012)
F2Factura Simplificada y Facturas sin identificación del destinatario (art. 6.1.d) RD 1619/2012
F3Factura emitida en sustitución de facturas simplificadas facturadas y declaradas
R1Factura Rectificativa (Error fundado en derecho y Art. 80 Uno Dos y Seis LIVA)
R2Factura Rectificativa (Art. 80.3)
R3Factura Rectificativa (Art. 80.4)
R4Factura Rectificativa (Resto)
R5Factura Rectificativa en facturas simplificadas

Parameter: special_regime_key

CodeBeschreibung
01Operación de régimen general.
02Exportación.
03Operaciones a las que se aplique el régimen especial de bienes usados, objetos de arte, antigüedades y objetos de colección.
04Régimen especial del oro de inversión.
05Régimen especial de las agencias de viajes.
06Régimen especial grupo de entidades en IVA (Nivel Avanzado)
07Régimen especial del criterio de caja.
08Operaciones sujetas al IPSI / IGIC.
17Operación acogida a alguno de los regímenes previstos en el Capítulo XI del Título IX (OSS e IOSS)
18Recargo de equivalencia.
19Operaciones de actividades incluidas en el Régimen Especial de Agricultura, Ganadería y Pesca (REAGYP)
20Régimen simplificado

Parameter: non_exemption_code

CodeBeschreibung
S1Operación Sujeta y No exenta - Sin inversión del sujeto pasivo.
S2Operación Sujeta y No exenta - Con Inversión del sujeto pasivo.

Parameter: no_subject_code

CodeBeschreibung
N1Operación No Sujeta artículo 7, 14, otros.
N2Operación No Sujeta por Reglas de localización.

Parameter: exemption_code

CodeBeschreibung
E1Exenta por el artículo 20
E2Exenta por el artículo 21
E3Exenta por el artículo 22
E4Exenta por los artículos 23 y 24
E5Exenta por el artículo 25
E6Exenta por otros

Parameter: customer_party_tax_scheme

CodeBeschreibung
02EU VAT ID (NIF-IVA)
03Passport
04Official ID issued by country of residence
05Certificate of residence
06Other supporting document
07Not registered