Skip to main content

Simplified invoices

A simplified invoice (factura simplificada, AEAT TipoFactura F2, RD 1619/2012 art. 4 and 7) is the ticket-style invoice issued without identifying the buyer. It has its own endpoints, because it carries no recipient and is not expressed in Facturae: you send the business data of the VERI*FACTU billing record (RegistroAlta) directly.

StepCall
Send directlyPOST /invoices/simplified → 202
Create a draftPOST /invoices/draft/simplified → 201
Amend a draftPUT /invoices/draft/simplified/{uuid} → 200
Read / discard a draftGET /invoices/draft/{uuid} · DELETE /invoices/draft/{uuid}
Send a draftPOST /invoices/draft/{uuid}/send → 202

Everything after creation (the lifecycle, the VERI*FACTU QR, corrections and search) works exactly as for a complete invoice.

Input format: XML or JSON​

The simplified endpoints accept the record in either representation, selected by the Content-Type header:

Content-TypeBody
application/vnd.verifactu+xmla <RegistroAlta> XML element with the business data of the record
application/jsonan equivalent JSON object whose keys mirror the same element names (DetalleDesglose becomes a JSON array)

A Facturae document (application/xml or text/xml) is not accepted here and is rejected with 415.

You only send the business data. A-Cube adds the rest of the billing record itself: TipoFactura is always F2, and the hash chain (huella, encadenamiento) and the SistemaInformatico block are computed by the platform.

ElementRequiredNotes
IDFactura/IDEmisorFacturayesthe issuer NIF: must belong to a legal entity you own with customerInvoiceEnabled
IDFactura/NumSerieFacturayesseries and number, up to 60 characters
IDFactura/FechaExpedicionFacturayesissue date in AEAT format dd-mm-yyyy (not Facturae's yyyy-mm-dd)
NombreRazonEmisoryesissuer name, up to 120 characters
DescripcionOperacionyesdescription of the operation, up to 500 characters
Desglose/DetalleDesgloseyesone entry per tax breakdown line, see below
CuotaTotal, ImporteTotalyestotal tax amount and total invoice amount, 2 decimals
FacturaSinIdentifDestinatarioArt61dnoS for an invoice issued under art. 6.1.d RD 1619/2012
TipoFactura, Destinatariosmust not be sentthe type is always F2 and a simplified invoice has no recipient

Each DetalleDesglose entry carries TipoImpositivo (tax rate), BaseImponibleOimporteNoSujeto (taxable base) and CuotaRepercutida (tax amount), plus the optional AEAT codes Impuesto (defaults to 01, IVA), ClaveRegimen and CalificacionOperacion.

note

Unless FacturaSinIdentifDestinatarioArt61d is S, the amount of a simplified invoice (the sum of BaseImponibleOimporteNoSujeto and CuotaRepercutida) cannot exceed 3000 EUR; otherwise the request is rejected with 422 and AEAT code 1150 (see Validation).

Send directly​

Request: simplified invoice as XML
POST /invoices/simplified
Authorization: Bearer {{jwt}}
Content-Type: application/vnd.verifactu+xml
Accept: application/json
<RegistroAlta>
<IDFactura>
<IDEmisorFactura>A58818501</IDEmisorFactura>
<NumSerieFactura>T-2026-0001</NumSerieFactura>
<FechaExpedicionFactura>15-01-2026</FechaExpedicionFactura>
</IDFactura>
<NombreRazonEmisor>SupplierOfficialName Ltd.</NombreRazonEmisor>
<DescripcionOperacion>Venta al por menor</DescripcionOperacion>
<Desglose>
<DetalleDesglose>
<TipoImpositivo>21.00</TipoImpositivo>
<BaseImponibleOimporteNoSujeto>100.00</BaseImponibleOimporteNoSujeto>
<CuotaRepercutida>21.00</CuotaRepercutida>
</DetalleDesglose>
</Desglose>
<CuotaTotal>21.00</CuotaTotal>
<ImporteTotal>121.00</ImporteTotal>
</RegistroAlta>
Request: simplified invoice as JSON (equivalent)
POST /invoices/simplified
Authorization: Bearer {{jwt}}
Content-Type: application/json
Accept: application/json
{
"IDFactura": {
"IDEmisorFactura": "A58818501",
"NumSerieFactura": "T-2026-0001",
"FechaExpedicionFactura": "15-01-2026"
},
"NombreRazonEmisor": "SupplierOfficialName Ltd.",
"DescripcionOperacion": "Venta al por menor",
"Desglose": {
"DetalleDesglose": [
{
"TipoImpositivo": "21.00",
"BaseImponibleOimporteNoSujeto": "100.00",
"CuotaRepercutida": "21.00"
}
]
},
"CuotaTotal": "21.00",
"ImporteTotal": "121.00"
}

Sample response (202 Accepted)​

The response is the usual invoice resource, with recipient set to null:

{
"uuid": "01a05b2c-7d41-7a8e-9f20-3c6e1d0b5a44",
"invoiceNumber": "T-2026-0001",
"invoiceDate": "2026-01-15",
"dueDate": null,
"currency": "EUR",
"totalAmount": "121.00",
"netAmount": "100.00",
"direction": "outgoing",
"sender": { "name": "SupplierOfficialName Ltd.", "fiscalId": "A58818501" },
"recipient": null,
"status": "accepted",
"errorReason": null,
"aeatErrorCode": null,
"aeatErrorDescription": null,
"sendAttempts": 1,
"lastSendAttemptAt": "2026-01-15T10:12:04+00:00",
"sentWithIncident": false,
"downloaded": false,
"downloadedAt": null,
"createdAt": "2026-01-15T10:12:04+00:00",
"updatedAt": "2026-01-15T10:12:04+00:00"
}

Send from a draft​

A simplified draft can be created with only the issuer identity (IDFactura/IDEmisorFactura and NombreRazonEmisor); every other element is optional until you send it. It uses the same Content-Type values as above.

A draft keeps its type. PUT /invoices/draft/simplified/{uuid} on a complete-invoice draft, or PUT /invoices/draft/{uuid} on a simplified draft, returns 409 Conflict.

Request: simplified draft with the issuer identity only
POST /invoices/draft/simplified
Authorization: Bearer {{jwt}}
Content-Type: application/json
Accept: application/json
{
"IDFactura": { "IDEmisorFactura": "A58818501" },
"NombreRazonEmisor": "SupplierOfficialName Ltd."
}

See the POST /invoices/simplified API reference for the full request schema.