eliDocs
Country Guides

Spain

What Beliq produces for Spain's Facturae 3.2.2 XML, and where the VeriFactu / FACe boundary sits.

Spain’s national Facturae format is XML defined by the Ministerio de Asuntos Económicos (MINECO) and published at facturae.gob.es. Beliq targets Facturae 3.2.2 (the sole current version; there is no 4.0). This is not EN 16931 UBL/CII and there are no BR-* Schematron rule IDs on Beliq’s validation path.

Spain runs a continuous-reporting model (VeriFactu real-time reporting plus the FACe B2G portal), so Beliq does not count it among its pinned, authority-verified live-coverage countries. The engine can emit and validate Facturae XML, as described below, but treat that as a document-layer capability rather than verified coverage: MINECO publishes no authority sample corpus, so validation is best-effort against the XSD. VeriFactu reporting and FACe submission always stay with your intermediary.

Where Beliq fits

  • Generate ordinaria Facturae 3.2.2 XML via standard: "facturae" and default profile ordinaria.
  • Validate and parse detected Facturae XML against the authority MINECO XSD vendored in the engine (bundle pin in API responses as spainFacturaeRuntimeVersion).

What Beliq does not do (VeriFactu / FACe boundary)

Beliq is not a VeriFactu reporting operator or a FACe submission operator. It does not:

  • Sign invoices (the XAdES enveloped signature required before AEAT / FACe accept the document).
  • Submit XAdES-signed billing records to VeriFactu (AEAT real-time reporting), or generate the VeriFactu QR / cotejo verification artifacts.
  • Submit invoices to FACe (the B2G portal SOAP web services) or register as a FACe sender.

You remain responsible for signing, routing, and transmission through your chosen intermediary (a registered FACe sender / VeriFactu-capable invoicing-software vendor) or in-house process.

VeriFactu phase-in (plan ahead)

The Spanish real-time reporting mandate phases in through 2027 (RD-Ley 15/2025): corporate income tax (IS) payers from 2027-01-01, self-employed / VAT-registered businesses from 2027-07-01. This is a compliance gate at your go-live, not a Beliq capability — integrate VeriFactu via your chosen intermediary.

Integration architecture (Beliq vs VeriFactu / FACe)

Beliq focuses on document correctness for the formats it supports:

Concern In Beliq today Outside Beliq (your stack / partner)
Facturae 3.2.2 invoice XML Generate, Validate, Parse XAdES signing, archiving policy, transmission
VeriFactu real-time reporting (AEAT) Not offered — see boundary above XAdES-signed billing records, SOAP submission, QR / cotejo
FACe B2G submission Not offered — see boundary above FACe SOAP web services, directory lookup, status polling

Authority documentation for the operational systems is published by AEAT (VeriFactu) and the FACe portal; Beliq does not embed or automate those transport protocols in this release. VeriFactu transport stays out of scope by product decision: Beliq is a format vendor, not a reporting operator.

Generating Facturae ordinaria

Use output: "xml" (hybrid PDF is only available for ZUGFeRD / Factur-X). Optional invoice.spain carries document-type and batch defaults — see the Generate reference for the field list aligned with the public API. Party tax-classification codes (PersonTypeCode, ResidenceTypeCode) are auto-derived from the VAT id and address country.

generate-facturae.sh
curl -X POST https://api.beliq.eu/v1/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "standard": "facturae",
    "profile": "ordinaria",
    "output": "xml",
    "invoice": {
      "number": "2026-0001",
      "issueDate": "2026-05-24",
      "currencyCode": "EUR",
      "seller": {
        "name": "Proveedor Test SL",
        "vatId": "ESB12345674",
        "address": { "street": "Calle Test 1", "city": "Madrid", "postalCode": "28001", "countryCode": "ES", "region": "MAD" }
      },
      "buyer": {
        "name": "Comprador Test SL",
        "vatId": "ESB87654321",
        "address": { "street": "Calle Ejemplo 2", "city": "Barcelona", "postalCode": "08001", "countryCode": "ES", "region": "BCN" }
      },
      "lines": [
        {
          "description": "Servicios profesionales",
          "quantity": 1,
          "unitCode": "C62",
          "unitPrice": 100.00,
          "lineTotal": 100.00,
          "vatRate": 21,
          "vatCategoryCode": "S"
        }
      ],
      "taxSummary": [
        { "vatCategoryCode": "S", "vatRate": 21, "taxableAmount": 100.00, "taxAmount": 21.00 }
      ],
      "totalNetAmount": 100.00,
      "totalTaxAmount": 21.00,
      "totalGrossAmount": 121.00
    }
  }'

Validation behaviour

On /v1/validate and /v1/generate, structural failures surface with ruleId: "XSD" in the validation result (no EN 16931 Schematron layer for Facturae). Responses carry spainFacturaeXsdBundle + spainFacturaeRuntimeVersion instead of schematronVersion. CreditNote payloads are not yet supported for facturae.

Further reading