Phase 1 live · Kreyo B2B

B2B e-invoicing and VeriFactu, one integration.

Built for invoicing software vendors, ERPs and platforms — not for end businesses. Send the same JSON you already use for FacturaE and PDF; Kreyo generates and validates the UBL EN 16931 invoice the AEAT will require. Submission to the AEAT comes when it publishes its web service.

What's ready and what isn't ↓

The dates, with their status

What is published regulation and what is only announced. We label it because the difference matters when you plan.

6 Oct 2026
Orden HAC/1028/2026 enters into force: the AEAT public e-invoicing solution, UBL EN 16931, faithful copy and invoice statuses.
Firm
By early Aug 2027
The AEAT must have the public solution available at least two months before the first mandatory date. The exact date is up to the AEAT.
Firm (latest date)
6 Oct 2027
B2B e-invoicing becomes mandatory for companies with turnover above €8M.
Firm
6 Oct 2028
B2B e-invoicing becomes mandatory for all other businesses (self-employed excepted).
Firm
Oct 2028
VeriFactu: planned for October 2028, as announced by the Ministry of Finance on 5 Oct 2026.
Pending regulatory approval

Kreyo's dates are not ours to set: submission to the AEAT will be available once the AEAT publishes its solution and we have tested against it.

What's live, what we're working on, where it ends up

The regulation is published. What's still missing is the AEAT's technical specification for its web service and a test environment.

Live today

Kreyo B2B phase 1, in production

  • POST /b2b/v1/generateUBL 2.5 EN 16931 with the Spanish extension (Anexo I) from your InvoiceData. ?copy=true produces the faithful copy.
  • POST /b2b/v1/validateValidates any UBL invoice against the same EN 16931 + AEAT rules.
  • POST /b2b/v1/status-messageAnexo II status messages: payment, rejection, collection and non-payment.
Working on it

The details that depend on the AEAT technical spec

The Orden fixes the invoice content, but leaves some details to the technical specification: the unique code format, how withholdings affect the amount due, and the identifiers of status messages. Today we apply the most literal reading of the Orden and will adjust as soon as the AEAT publishes. Same for validating against the official EN 16931:2026 and UBL 2.5 artefacts once they are released.

Waiting on the Administration

Submission to the AEAT public solution

POST /b2b/v1/submit already exists and is documented so you can code against it; today it returns 501 NOT_YET_AVAILABLE. We'll connect it once the AEAT publishes the web service and its test environment.

Where it ends up

The full flow once the AEAT opens its service. It's designed so your integration keeps the same JSON and API key; if the technical spec forces a change, you'll see it in the changelog.

  1. Generate the UBL invoice and its PDF from your JSONLive
  2. Validate it before it leaves your systemLive
  3. Send the faithful copy to the AEAT public solutionWaiting on the AEAT
  4. Generate status messages (payment, rejection…)Live
  5. Send status messages to the AEATWaiting on the AEAT

Why now, if it isn't finished?

Designing the integration doesn't depend on the AEAT

What your software has to produce — which fields, which code lists, which statuses — is already in the Orden. What's missing is the submission channel.

The data model already exists

Kreyo B2B uses the same InvoiceData as FacturaE, VeriFactu and PDF. If you already integrate one of them, the B2B invoice is another endpoint, not another project.

2027 is closer than it looks

If the public solution ships with the minimum lead time, there will be about two months to connect and test. Better to arrive with the data mapping done than to start then.

In the first year, every B2B invoice comes with its PDF

During the transition period, the electronic invoice is accompanied by a PDF version. With Kreyo both come from the same JSON: UBL for the AEAT and PDF for your customer, without maintaining two templates.

See Kreyo PDF →

Try phase 1

Same API key for every Kreyo product. Kreyo B2B is a free preview: it does not use operations from your plan.

Read the API reference first →

Frequently asked questions

Is this the same as FacturaE?

No. FacturaE is the Spanish XML format FACe requires for invoicing public administrations, and businesses can use it between themselves if both agree. The B2B mandate before the AEAT requires EN 16931 in UBL syntax: FacturaE does not qualify as the faithful copy. Kreyo FacturaE remains what you need for B2G; Kreyo B2B is for the B2B mandate. Both start from the same JSON.

And what does it have to do with FACe?

FACe is the central entry point for invoices to the Spanish central government (B2G). It plays no part in the business-to-business mandate, which goes to the AEAT public solution. (FACeB2B, the registry for public-sector subcontractor invoices, is being replaced by the new system.)

And with VeriFactu?

They are different obligations. VeriFactu registers every issued invoice with the AEAT to guarantee the integrity of the invoicing software, whoever the recipient is. B2B e-invoicing is about how invoices are issued and exchanged between businesses, and the copy the AEAT receives. Many issuers will have to comply with both; that's why we offer them in one integration.

What happens if the AEAT delays the public solution?

Then we wait too: we can't connect to something that doesn't exist. That's why we give no date for submission to the AEAT. What you can do already — map your data, generate and validate UBL, produce status messages — doesn't depend on that calendar. If the mandate dates change, we'll update them here with their status.

Is this for businesses or for developers?

Developers. Kreyo B2B is an API for people building invoicing software, ERPs or platforms. If you're a business that issues invoices, your software provider is the one who needs to integrate it.

How much does it cost?

Nothing, for now. Phase 1 is a free preview: it is not part of the paid plans and does not use operations from your plan. You only need your Kreyo API key.