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 is published regulation and what is only announced. We label it because the difference matters when you plan.
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.
The regulation is published. What's still missing is the AEAT's technical specification for its web service and a test environment.
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.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.
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.
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.
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.
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.
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.
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 →Same API key for every Kreyo product. Kreyo B2B is a free preview: it does not use operations from your plan.
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.
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.)
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.
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.
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.
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.