Submit invoice in deferred mode (canonical command endpoint)
POST
/no-verifactu/invoices/submissionsRequest body
requiredapplication/jsonbilling_agreement_registration_numberstringNumRegistroAcuerdoFacturacion. If provided, must exist in AEAT.
max length 15 · matches ALPHANUMERIC_RE
corrected_invoicesCorrectedInvoiceDto[]List of invoices being corrected. Optional but recommended for R1–R5.
Show propertiesHide properties
Array of
CorrectedInvoiceDtoissue_datestringrequiredIssue date of the invoice being corrected or replaced (DD-MM-YYYY).
matches ISSUE_DATE_RE
numberstringrequiredInvoice number of the invoice being corrected or replaced.
seriesstringSeries of the invoice being corrected or replaced. Can be empty if the original invoice had no series.
corrective_amountobjectRequired when corrective_type = S. Contains totals of the invoice being replaced.
Show propertiesHide properties
corrected_feestringrequiredVAT amount (cuota repercutida) of the original invoice being fully replaced (only when corrective_type = S).
matches CORRECTIVE_AMOUNT_RE
corrected_surcharge_feestringEquivalence surcharge amount of the original invoice being replaced. Only used when equivalence surcharge regime applies.
matches CORRECTIVE_AMOUNT_RE
rectified_basestringrequiredTaxable base of the original invoice being fully replaced (only when corrective_type = S - substitution).
matches CORRECTIVE_AMOUNT_RE
corrective_typestringRequired ONLY for corrective invoices (R1, R2, R3, R4, R5):
• S = By substitution (total replacement)
• I = By differences (partial correction)
Allowed:
SIdescriptionstringrequiredDescription of the operation
min length 1 · max length 500
faqobjectContexto adicional para aplicar FAQs operativas
Show propertiesHide properties
cash_criterionstringCriterio de caja (S/N)
matches SI_NO_RE
issuer_territorystringTerritorio del emisor (TAI, CANARIAS, CEUTA, MELILLA)
Allowed:
TAICANARIASCEUTAMELILLAEUEXTRA_EUlottery_amountstringImporte de lotería incluido como suplido
matches CORRECTIVE_AMOUNT_RE
originstringOrigen del registro: NORMAL, IMPORT, DRAFT, PROFORMA, TEST, VENDING
Allowed:
NORMALIMPORTDRAFTPROFORMATESTVENDINGrecipient_is_businessbooleanDestinatario empresario/profesional
recipient_territorystringTerritorio del destinatario (TAI, CANARIAS, CEUTA, MELILLA, EU, EXTRA_EU)
Allowed:
TAICANARIASCEUTAMELILLAEUEXTRA_EUrecipient_vies_validbooleanDestinatario con VIES válido (si aplica)
suplidos_totalstringTotal suplidos (no forman parte del total factura)
matches CORRECTIVE_AMOUNT_RE
ticketbai_l13stringEquivalencia TicketBAI L13 (OT, RL, VT, IE)
Allowed:
OTRLVTIEtotal_to_paystringTotal a pagar (importe total + suplidos)
matches CORRECTIVE_AMOUNT_RE
id_otroobjectAlternative identifier for non-Spanish or special cases (VAT number, passport, etc.). Required for EU/international recipients or when NIF not applicable.
Show propertiesHide properties
country_codestringCountry code in ISO 3166-1 alpha-2 format (e.g., FR, DE, IT). Required unless id_type = 02 (NIF-IVA). Not allowed when id_type = 07 and country ≠ ES.
idstringrequiredIdentifier value. Maximum 20 characters.
min length 1 · max length 20
id_typestringrequiredType of identification:
• 02 = NIF-IVA (EU VAT number)
• 03 = Passport
• 04 = Official identification document issued in country of residence
• 05 = Residence certificate
• 06 = Other supporting document
• 07 = Not registered in census (only allowed for Spain)
Allowed:
020304050607incidencestringSet to "S" only if an incident occurred during invoice processing
matches FLAG_S_RE
invoice_typestringrequiredInvoice type:
• F1 = Normal invoice
• F2 = Simplified invoice (no recipient ID)
• R1–R5 = Corrective invoices
• F3 = Replacement of simplified invoices
Allowed:
F1F2R1R2R3R4R5F3issue_datestringrequiredInvoice issue date. MUST be the current date (DD-MM-YYYY). If the operation occurred on a past date, use operation_date instead.
matches ISSUE_DATE_RE
linesInvoiceLineDto[]requiredInvoice lines. Maximum 12 items (AEAT restriction). Group items with same VAT rate to avoid exceeding limit.
min items 1 · max items 12
Show propertiesHide properties
Array of
InvoiceLineDto_operationRatingRulesValidatorOperationRatingRulesConstraintShow propertiesHide properties
object_taxRateRequiredValidatorTaxRateRequiredConstraintShow propertiesHide properties
objectequivalent_surcharge_feestringEquivalence surcharge amount
matches CORRECTIVE_AMOUNT_RE
equivalent_surcharge_typestringEquivalence surcharge rate (e.g., 5.2, 1.4)
matches PERCENT_RE
exempt_operationstringExemption cause (E1 to E6). If used, tax_rate and fee_charged must be empty
Allowed:
E1E2E3E4E5E6E7E8fee_chargedstringCharged tax amount. Only allowed if operation_rating = S1 (reverse charge)
matches CORRECTIVE_AMOUNT_RE
operation_ratingstringOperation rating: S1 (taxable), S2 (reverse charge), N1/N2 (not subject)
Allowed:
S1S2N1N2system_keystringVAT/IGIC regime key. Default 01 (general regime)
Allowed:
010203040506070809101114151718192021taxstringTax type. 01 = VAT (default), 02 = IPSI, 03 = IGIC, 05 = Others
default: "01"
Allowed:
01020305tax_ratestringVAT rate applied. Allowed values for VAT (01): 0, 2, 4, 5, 7.5, 10, 21
matches PERCENT_RE
taxable_basestringrequiredTaxable base or non-taxable amount of the line. Can be positive or negative.
matches CORRECTIVE_AMOUNT_RE
taxable_base_at_coststringTaxable base at cost. Only for regime 06, IPSI or tax = 05
matches CORRECTIVE_AMOUNT_RE
namestringRecipient name and surname or company name. Required except for simplified invoices (F2, R5).
max length 120
NIFstringRecipient Spanish NIF. Required except for F2 and R5 if id_otro is provided. If both NIF and id_otro are sent, id_otro takes precedence.
numberstringrequiredInvoice number. Required. The concatenation of series + number cannot exceed 60 characters.
operation_datestringDate of the operation/transaction. Can be a past date. Required if different from issue_date and was included in original record.
matches ISSUE_DATE_RE
replaced_invoicesCorrectedInvoiceDto[]Only for F3 invoices: list of simplified invoices being replaced.
Show propertiesHide properties
Array of
CorrectedInvoiceDtoissue_datestringrequiredIssue date of the invoice being corrected or replaced (DD-MM-YYYY).
matches ISSUE_DATE_RE
numberstringrequiredInvoice number of the invoice being corrected or replaced.
seriesstringSeries of the invoice being corrected or replaced. Can be empty if the original invoice had no series.
seriesstringrequiredInvoice series. Can be empty string (""). Must not begin with a space. The concatenation of series + number cannot exceed 60 characters.
matches NO_LEADING_SPACE_OR_EMPTY_RE
sif_agreement_idstringIdAcuerdoSistemaInformatico. If provided, must exist in AEAT.
max length 16 · matches ALPHANUMERIC_RE
specialobjectSpecial flags:
• coupon (R1/R5)
• simplified_invoice_art_7273 (F1, F3, R1–R4)
• invoice_without_recipient_id_art_61d (F2, R5)
• issued_by_third_party_or_recipient (T/D)
Show propertiesHide properties
couponstringSet to "S" only for corrective invoices R1 or R5
id_other_thirdIdOtroDtoShow propertiesHide properties
country_codestringCountry code in ISO 3166-1 alpha-2 format (e.g., FR, DE, IT). Required unless id_type = 02 (NIF-IVA). Not allowed when id_type = 07 and country ≠ ES.
idstringrequiredIdentifier value. Maximum 20 characters.
min length 1 · max length 20
id_typestringrequiredType of identification:
• 02 = NIF-IVA (EU VAT number)
• 03 = Passport
• 04 = Official identification document issued in country of residence
• 05 = Residence certificate
• 06 = Other supporting document
• 07 = Not registered in census (only allowed for Spain)
Allowed:
020304050607invoice_without_recipient_id_art_61dstringSet to "S" for simplified invoices without recipient ID (F2, R5)
issued_by_third_party_or_recipientstringT = issued by third party, D = issued by recipient
Allowed:
TDsimplified_invoice_art_7273stringSet to "S" for invoices under Art. 7.2-7.3 (F1, F3, R1–R4)
third_party_namestringRequired if issued_by_third_party_or_recipient = T
max length 120
third_party_nifstringThird party NIF. Takes precedence over id_other_third
total_amountstringrequiredTotal invoice amount. Validated against sum of lines with ±10€ tolerance (except for special regimes 03, 05, 06, 08, 09)
matches CORRECTIVE_AMOUNT_RE
validate_recipientbooleanWhether to validate recipient in AEAT census and VIES (for EU VAT). Set to false only if you are 100% sure they are registered.
default: true
Responses
201Invoice successfully submitted
correlationIdstringrequiredCorrelation ID for tracking this request across distributed systems
dataobjectrequiredInvoice data returned after successful submission
Show propertiesHide properties
csvstringCSV devuelto por AEAT para el registro
estadostringrequiredValidation status returned by VeriFactu AEAT
Allowed:
CorrectaAceptadaConErroresIncorrectohuellastringrequiredVeriFactu hash (huella) of the invoice - SHA-256 fingerprint used for chain integrity
min length 64 · max length 64
idPeticionstringIdPeticion devuelto por AEAT
nifPresentadorstringNIFPresentador devuelto por AEAT
pdfUrlstring<uri>Signed URL to download the generated invoice PDF from S3
qrstringrequiredBase64-encoded QR code image (data URI format) for invoice verification
timestampPresentacionstringTimestampPresentacion devuelto por AEAT
urlstring<uri>requiredFull VeriFactu verification URL that can be used to validate the invoice online
uuidstring<uuid>requiredUnique identifier (UUID) of the submitted invoice
successbooleanrequiredIndicates whether the submission was successful
warningobjectPresent only when VeriFactu accepts the invoice with correctable errors (EstadoRegistro = 'AceptadaConErrores'). These are admissible errors per AEAT validation rules that don't prevent invoice registration.
Show propertiesHide properties
additionalErrorInfoobjectAdditional detailed error information
Show propertiesHide properties
causastringrequiredRoot cause of the error
messagestringrequiredBrief error message describing the issue
solucionstringrequiredDetailed solution or recommended action to resolve the error
subsanablebooleanrequiredIndicates whether the error is correctable/recoverable through subsanation (correction) process
codigostringrequiredError code from VeriFactu (correctable error code 2000-2999)
mensajestringrequiredHuman-readable error description from VeriFactu AEAT
severitystringrequiredSeverity level of the warning
Allowed:
warningtypestringrequiredWarning type identifier
400Bad request
correlationIdstringrequiredmessagestringrequiredpathstringrequiredstatusCodenumberrequiredsuccessbooleanrequiredtimestampstringrequired422Unprocessable error
correlationIdstringrequirederrorDetailsobjectPresent only when the error comes from VeriFactu submission
Show propertiesHide properties
verifactuErrorVerifactuErrorrequiredShow propertiesHide properties
causastringRoot cause of the error
codigoErrorRegistrostringdescripcionErrorRegistrostringerrorTypestringrequiredAllowed:
ADMISSIBLEINADMISSIBLEmessagestringBrief error message describing the issue
registroDuplicadoobjectInformación del registro ya existente cuando AEAT rechaza por duplicidad
Show propertiesHide properties
codigoErrorRegistrostringCódigo de error del registro duplicado almacenado en AEAT, si aplica
descripcionErrorRegistrostringDescripción del error del registro duplicado almacenado en AEAT, si aplica
estadoRegistroDuplicadostringEstado del registro duplicado almacenado en AEAT (Correcta, AceptadaConErrores, Anulada)
idPeticionRegistroDuplicadostringIdPeticion asociado a la factura registrada previamente en AEAT (solo se informa si el rechazo es por duplicidad)
solucionstringDetailed solution or recommended action to resolve the error
subsanablebooleanIndicates whether the error is correctable/recoverable through subsanation (correction) process
messagestringrequiredpathstringrequiredstatusCodenumberrequiredsuccessbooleanrequiredtimestampstringrequired500Internal server error
correlationIdstringrequiredmessagestringrequiredpathstringrequiredstatusCodenumberrequiredsuccessbooleanrequiredtimestampstringrequiredRequest
curl -X POST "https://api.multifactu.com/no-verifactu/invoices/submissions" \
-H "Content-Type: application/json" \
-d '{
"billing_agreement_registration_number": "ABC123456789012",
"corrected_invoices": [
{
"issue_date": "15-11-2024",
"number": "2024/00888",
"series": "A"
}
],
"corrective_amount": {
"corrected_fee": "210.00",
"corrected_surcharge_fee": "52.00",
"rectified_base": "1000.00"
},
"corrective_type": "S",
"description": "Servicios de consultoría - Diciembre 2025",
"faq": {
"cash_criterion": "S",
"issuer_territory": "TAI",
"lottery_amount": "10.00",
"origin": "NORMAL",
"recipient_is_business": true,
"recipient_territory": "TAI",
"recipient_vies_valid": true,
"suplidos_total": "12.50",
"ticketbai_l13": "OT",
"total_to_pay": "102.50"
},
"id_otro": {
"country_code": "FR",
"id": "FR123456789",
"id_type": "02"
},
"incidence": "S",
"invoice_type": "F1",
"issue_date": "07-12-2025",
"lines": [
{
"_operationRatingRulesValidator": {},
"_taxRateRequiredValidator": {},
"equivalent_surcharge_fee": "string",
"equivalent_surcharge_type": "string",
"exempt_operation": "E1",
"fee_charged": "210.00",
"operation_rating": "S1",
"system_key": "01",
"tax": "01",
"tax_rate": "21",
"taxable_base": "1000.00",
"taxable_base_at_cost": "string"
}
],
"name": "ACME Solutions S.L.",
"NIF": "B12345678",
"number": "2025/00123",
"operation_date": "01-12-2025",
"replaced_invoices": [
{
"issue_date": "15-11-2024",
"number": "2024/00888",
"series": "A"
}
],
"series": "",
"sif_agreement_id": "ABC1234567890123",
"special": {
"coupon": "S",
"id_other_third": {
"country_code": "FR",
"id": "FR123456789",
"id_type": "02"
},
"invoice_without_recipient_id_art_61d": "S",
"issued_by_third_party_or_recipient": "T",
"simplified_invoice_art_7273": "S",
"third_party_name": "string",
"third_party_nif": "string"
},
"total_amount": "1210.00",
"validate_recipient": true
}'const response = await fetch("https://api.multifactu.com/no-verifactu/invoices/submissions", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
"billing_agreement_registration_number": "ABC123456789012",
"corrected_invoices": [
{
"issue_date": "15-11-2024",
"number": "2024/00888",
"series": "A"
}
],
"corrective_amount": {
"corrected_fee": "210.00",
"corrected_surcharge_fee": "52.00",
"rectified_base": "1000.00"
},
"corrective_type": "S",
"description": "Servicios de consultoría - Diciembre 2025",
"faq": {
"cash_criterion": "S",
"issuer_territory": "TAI",
"lottery_amount": "10.00",
"origin": "NORMAL",
"recipient_is_business": true,
"recipient_territory": "TAI",
"recipient_vies_valid": true,
"suplidos_total": "12.50",
"ticketbai_l13": "OT",
"total_to_pay": "102.50"
},
"id_otro": {
"country_code": "FR",
"id": "FR123456789",
"id_type": "02"
},
"incidence": "S",
"invoice_type": "F1",
"issue_date": "07-12-2025",
"lines": [
{
"_operationRatingRulesValidator": {},
"_taxRateRequiredValidator": {},
"equivalent_surcharge_fee": "string",
"equivalent_surcharge_type": "string",
"exempt_operation": "E1",
"fee_charged": "210.00",
"operation_rating": "S1",
"system_key": "01",
"tax": "01",
"tax_rate": "21",
"taxable_base": "1000.00",
"taxable_base_at_cost": "string"
}
],
"name": "ACME Solutions S.L.",
"NIF": "B12345678",
"number": "2025/00123",
"operation_date": "01-12-2025",
"replaced_invoices": [
{
"issue_date": "15-11-2024",
"number": "2024/00888",
"series": "A"
}
],
"series": "",
"sif_agreement_id": "ABC1234567890123",
"special": {
"coupon": "S",
"id_other_third": {
"country_code": "FR",
"id": "FR123456789",
"id_type": "02"
},
"invoice_without_recipient_id_art_61d": "S",
"issued_by_third_party_or_recipient": "T",
"simplified_invoice_art_7273": "S",
"third_party_name": "string",
"third_party_nif": "string"
},
"total_amount": "1210.00",
"validate_recipient": true
})
});import requests
response = requests.post(
"https://api.multifactu.com/no-verifactu/invoices/submissions",
headers={
"Content-Type": "application/json"
},
json={
"billing_agreement_registration_number": "ABC123456789012",
"corrected_invoices": [
{
"issue_date": "15-11-2024",
"number": "2024/00888",
"series": "A"
}
],
"corrective_amount": {
"corrected_fee": "210.00",
"corrected_surcharge_fee": "52.00",
"rectified_base": "1000.00"
},
"corrective_type": "S",
"description": "Servicios de consultoría - Diciembre 2025",
"faq": {
"cash_criterion": "S",
"issuer_territory": "TAI",
"lottery_amount": "10.00",
"origin": "NORMAL",
"recipient_is_business": True,
"recipient_territory": "TAI",
"recipient_vies_valid": True,
"suplidos_total": "12.50",
"ticketbai_l13": "OT",
"total_to_pay": "102.50"
},
"id_otro": {
"country_code": "FR",
"id": "FR123456789",
"id_type": "02"
},
"incidence": "S",
"invoice_type": "F1",
"issue_date": "07-12-2025",
"lines": [
{
"_operationRatingRulesValidator": {},
"_taxRateRequiredValidator": {},
"equivalent_surcharge_fee": "string",
"equivalent_surcharge_type": "string",
"exempt_operation": "E1",
"fee_charged": "210.00",
"operation_rating": "S1",
"system_key": "01",
"tax": "01",
"tax_rate": "21",
"taxable_base": "1000.00",
"taxable_base_at_cost": "string"
}
],
"name": "ACME Solutions S.L.",
"NIF": "B12345678",
"number": "2025/00123",
"operation_date": "01-12-2025",
"replaced_invoices": [
{
"issue_date": "15-11-2024",
"number": "2024/00888",
"series": "A"
}
],
"series": "",
"sif_agreement_id": "ABC1234567890123",
"special": {
"coupon": "S",
"id_other_third": {
"country_code": "FR",
"id": "FR123456789",
"id_type": "02"
},
"invoice_without_recipient_id_art_61d": "S",
"issued_by_third_party_or_recipient": "T",
"simplified_invoice_art_7273": "S",
"third_party_name": "string",
"third_party_nif": "string"
},
"total_amount": "1210.00",
"validate_recipient": True
},
)Response
{
"correlationId": "550e8400-e29b-41d4-a716-446655440000",
"data": {
"csv": "CSV1234567890",
"estado": "Correcta",
"huella": "3B8D82984B4E67934DD0C9FA4497F9ED9EF454B15A1A02EBB89B1CADE99B69F9",
"idPeticion": "1234567890ABCDEF",
"nifPresentador": "B12345678",
"pdfUrl": "https://bucket.s3.amazonaws.com/...&X-Amz-Signature=...",
"qr": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaQAAAGkCAYAAAB+TFE1...",
"timestampPresentacion": "2025-01-01T12:34:56",
"url": "https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR?nif=B12345678&numserie=INV001&fecha=01-01-2024&importe=1234.56",
"uuid": "bcda84ec-a5a7-4af3-a8fa-3c754b32711a"
},
"success": true,
"warning": {
"codigo": "2000",
"mensaje": "El cálculo de la huella suministrada es incorrecto. The invoice hash calculation doesn't match AEAT specifications.",
"severity": "warning",
"type": "verifactu_accepted_with_errors"
}
}{
"correlationId": "xyz",
"message": "series is required when number is provided",
"path": "/v1/verifactu/invoices/search",
"statusCode": 400,
"success": false,
"timestamp": "2025-12-21T12:10:46.668Z"
}{
"correlationId": "xyz",
"errorDetails": {
"verifactuError": {
"codigoErrorRegistro": "3000",
"descripcionErrorRegistro": "Registro de facturación duplicado.",
"errorType": "INADMISSIBLE"
}
},
"message": "series is required when number is provided",
"path": "/v1/verifactu/invoices/search",
"statusCode": 422,
"success": false,
"timestamp": "2025-12-21T12:10:46.668Z"
}{
"correlationId": "xyz",
"message": "Internal server error",
"path": "/v1/verifactu/invoices",
"statusCode": 500,
"success": false,
"timestamp": "2025-12-21T12:10:46.668Z"
}