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.
| Step | Call |
|---|---|
| Send directly | POST /invoices/simplified → 202 |
| Create a draft | POST /invoices/draft/simplified → 201 |
| Amend a draft | PUT /invoices/draft/simplified/{uuid} → 200 |
| Read / discard a draft | GET /invoices/draft/{uuid} · DELETE /invoices/draft/{uuid} |
| Send a draft | POST /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-Type | Body |
|---|---|
application/vnd.verifactu+xml | a <RegistroAlta> XML element with the business data of the record |
application/json | an 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.
| Element | Required | Notes |
|---|---|---|
IDFactura/IDEmisorFactura | yes | the issuer NIF: must belong to a legal entity you own with customerInvoiceEnabled |
IDFactura/NumSerieFactura | yes | series and number, up to 60 characters |
IDFactura/FechaExpedicionFactura | yes | issue date in AEAT format dd-mm-yyyy (not Facturae's yyyy-mm-dd) |
NombreRazonEmisor | yes | issuer name, up to 120 characters |
DescripcionOperacion | yes | description of the operation, up to 500 characters |
Desglose/DetalleDesglose | yes | one entry per tax breakdown line, see below |
CuotaTotal, ImporteTotal | yes | total tax amount and total invoice amount, 2 decimals |
FacturaSinIdentifDestinatarioArt61d | no | S for an invoice issued under art. 6.1.d RD 1619/2012 |
TipoFactura, Destinatarios | must not be sent | the 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.
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.
- Create it with
POST /invoices/draft/simplifiedand complete it withPUT /invoices/draft/simplified/{uuid}. - Send it with the shared
POST /invoices/draft/{uuid}/send. A draft that is still missing required elements is rejected with422and stays a draft.
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.