Factuarea API

Suplidos

El dinero que pagas por cuenta de tu cliente —tasas judiciales, aranceles registrales, visados— no es ingreso tuyo. Cómo facturarlo para que quede fuera de tu base imponible, de tu IVA y de tu declaración anual de operaciones con terceros.

Un suplido es una cantidad pagada en nombre y por cuenta del cliente, bajo su mandato expreso (art. 78.Tres.3 de la Ley del IVA). No forma parte de lo que cobras por tu servicio: lo anticipas, lo repercutes a coste y nunca llega a ser tu base imponible.

Facturado como línea ordinaria, ese mismo importe infla tu base imponible, tu IVA repercutido, el total que declaras a la AEAT y la base que informas de ese cliente en la declaración anual de operaciones con terceros (Modelo 347). Facturado como suplido, aparece en el documento, el cliente lo paga y queda fuera de las cuatro cosas.

Cuándo aplica

Solo en facturas emitidas. Los presupuestos, las proformas, los albaranes, las facturas de compra y las plantillas de recurrentes no modelan los suplidos en absoluto — sus tablas de líneas no tienen esa columna (BR-INV-037). Una plantilla de recurrente, en particular, no podría llevar la referencia de origen obligatoria, así que la línea degradaría en silencio a una operación ordinaria y cada factura generada la declararía como ingreso propio.

Dos restricciones más:

  • Una factura simplificada no puede llevar ninguno. El contenido obligatorio de una factura simplificada no identifica al destinatario, así que no puede acreditar por cuenta de quién se pagó el importe, y la Administración tributaria lo trataría como base imponible tuya. Su rectificativa se rechaza por el mismo motivo. Emite una factura completa o quita la línea (BR-INV-040).
  • Una factura no puede estar hecha solo de suplidos. Se exige al menos una línea ordinaria (BR-INV-046).

La API solo puede imponer una de las tres condiciones legales: que puedas justificar el importe. El mandato expreso del cliente es un requisito documental que Factuarea ni pide ni guarda: sin él el importe no es un suplido, lo etiquete como lo etiquete la factura. Y el IVA soportado de un suplido no es deducible por ti — el destinatario real de esa operación es el cliente. Nada en el producto te impide deducirlo, así que esto queda de tu mano.

Qué envía la API

Cuatro campos opcionales de línea en POST /v1/invoices, PUT /v1/invoices/{id} y POST /v1/invoices/{id}/corrective:

CampoReglas
line_typeNORMAL o SUPLIDO. Ausente o null equivale a NORMAL, así que omitirlo reproduce exactamente el comportamiento anterior.
source_invoice_referenceObligatorio en una línea de suplido. Texto libre, hasta 100 caracteres.
source_invoice_idsTrazabilidad opcional: facturas de compra de tu propia empresa, validadas con alcance de tenant. Una lista vacía colapsa a nulo.
line_totalSuma de control opcional de entrada — ver La suma de control de línea.
curl -X POST https://api.factuarea.com/v1/invoices \
  -H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW" \
  -H "Content-Type: application/json" \
  -d '{
        "client_id": "0197a2a8-4cf0-7a31-9a5e-3f2b8c1d6e42",
        "series_id": "019e5584-7a72-7038-a8f6-561ed180b699",
        "issued_on": "2026-06-01",
        "due_on": "2026-07-01",
        "lines": [
          { "description": "Honorarios de constitución de sociedad", "quantity": 1, "unit_price": 1000, "tax_rate": 21 },
          { "description": "Tasa del Registro Mercantil",
            "quantity": 1, "unit_price": 150,
            "line_type": "SUPLIDO",
            "source_invoice_reference": "RM-2026-0451" }
        ]
      }'

POST /v1/invoices no tiene campo type, así que no puede emitir una factura simplificada; el rechazo por factura simplificada solo se alcanza, por tanto, a través del endpoint de rectificativa sobre un original simplificado. Ver Facturas simplificadas o completas.

La referencia de origen es obligatoria, y es texto

Es texto libre y no una clave ajena porque el justificante —una tasa judicial, un arancel registral, un visado— rara vez está registrado como factura de compra en Factuarea. Sin él no puedes acreditar que el gasto pertenece al cliente (BR-INV-038).

source_invoice_ids es la contraparte estructurada opcional, y la regla práctica conviene interiorizarla:

Si el justificante está a tu nombre, no es un suplido. Factúralo como línea ordinaria.

El suplido canónico tiene el documento expedido a nombre del cliente, así que no es una compra tuya y la lista se queda vacía. Enlaza facturas de compra solo cuando hayas registrado de verdad el pago en tus propios libros como soporte del anticipo — y recuerda que el IVA soportado de esa factura no debe deducirse.

Una línea de suplido no lleva carga fiscal propia

Ocho campos se rechazan en una línea SUPLIDO con valor distinto de cero o de nulo (BR-INV-039):

CampoPor qué
tax_rateUn suplido no es contraprestación — no le repercutes IVA.
retention_rateNo hay ingreso tuyo sobre el que retener.
surcharge_rateEl recargo de equivalencia grava una entrega tuya; esto no lo es.
discount_percentDescontar un importe pagado por cuenta ajena lo distorsiona — repercutes lo que pagaste.
regime_keyUna clave de régimen califica una operación tuya.
exemption_reasonUn suplido ni tributa ni está exento: no es operación tuya.
product_idNo es una entrega de bienes tuyos y no debe mover stock.
pack_idMismo motivo — un pack se expande en entregas propias.

El error nombra el campo infractor, y lo lleva como offending_field en el detalle del error.

Como una línea de suplido no puede referenciar un producto, el libro de stock la ignora por construcción: la fila persistida no tiene producto y ya queda filtrada.

La suma de control de línea

lines[].line_total es una suma de control de entrada y opcional. Cuando viene, se compara con el total que el motor acaba de calcular, y la petición se rechaza si la desviación supera un céntimo (BR-INV-044). El detalle del error lleva los valores expected y received para que localices un descuadre de redondeo con tu ERP sin tener que parsear el mensaje.

Tres propiedades, todas deliberadas:

  • Nunca se persiste, nunca se devuelve. No existe esa columna y ningún recurso la emite. El importe facturado es siempre el que calcula Factuarea.
  • Nunca es obligatoria, en ningún escenario. Exigirla te obligaría a replicar nuestro motor de cálculo, algo explícitamente fuera de alcance.
  • La tolerancia de un céntimo es inclusiva. Una desviación de exactamente 0,01 € pasa; 0,02 € falla. La comparación se hace en aritmética de precisión arbitraria, no en coma flotante — el error de coma flotante es precisamente lo que este campo existe para diagnosticar.

Errores

Todos 422:

subcodeCausa
suplido_requires_source_invoice_referenceLa línea de suplido no tiene referencia de origen.
suplido_line_cannot_carry_taxesSe envió uno de los ocho campos prohibidos.
suplido_not_allowed_in_simplified_invoiceUna factura simplificada o su rectificativa.
invoice_requires_at_least_one_lineTodas las líneas son suplidos, así que la factura no declara ninguna operación.
line_total_checksum_mismatchEl total de línea declarado se desvía más de un céntimo.

El índice del mensaje empieza en cero sobre la colección completa de líneas, de modo que casa con la ruta lines.{i} de tu payload.

Cómo quedan los totales

La calculadora de totales particiona las líneas por tipo (BR-INV-041):

CampoContenido
subtotal, taxes_total, totalSolo las líneas ordinarias. La fórmula queda intacta.
total_disbursementsLa suma de las líneas de suplido, y solo eso. Persistido.
total_to_paytotal + total_disbursements. Derivado, nunca almacenado.

Para la factura de arriba: subtotal 1000, IVA 210, total 1210, suplidos 150, importe a pagar 1360.

Hay exactamente un punto del código donde se suman esos dos términos, y todos los consumidores —recursos de la API, el PDF, el enlace público del documento— leen el valor derivado en vez de recomponer la suma. Dos columnas llamadas «total» acabarían divergiendo.

Toda cifra por factura que mide deuda usa el importe a pagar, no el total fiscal (BR-INV-045): pending_amount es total_to_pay − paid_amount, el libro de cobros acepta un pago que cubra el importe a pagar íntegro sin responder «supera lo pendiente», la transición a paid exige el importe a pagar cubierto —pagar solo el total fiscal deja la factura sin cobrar con el suplido pendiente— y los tres enlaces de pago en línea cobran el importe a pagar.

Las cifras agregadas de cartera son la excepción documentada: miden volumen facturado, no importe debido. Ese límite, y el que afecta a los documentos Facturae y UBL, están recogidos en Alcance y limitaciones.

Una factura sin suplidos tiene total_disbursements: 0 y total_to_pay == total, al céntimo, incluida toda factura histórica.

Qué sale en el PDF

El suplido se imprime —el cliente lo pagó y la factura es la representación legal de eso— pero marcado como lo que es (BR-INV-042): la línea muestra un guion en la columna de IVA, y el bloque de totales gana una fila Suplidos y una fila Total a pagar debajo del total fiscal.

El enlace público del documento muestra lo mismo. La exportación a hoja de cálculo a nivel de línea añade una columna de tipo de línea, porque sin ella un suplido es indistinguible de una operación al 0 % de IVA y sumar la columna de total de línea daría el importe cobrado en lugar del ingreso declarable.

Dos campos de línea que son solo de presentación ayudan aquí y no tienen efecto fiscal alguno (BR-INV-043): unit, una unidad de medida de texto libre impresa junto a la cantidad, y exemption_reason_text, texto libre impreso bajo la descripción para la redacción de la exención cuando la causa catalogada no la cubre.

Qué llega a la AEAT

Nada. Una línea de suplido no llega nunca al registro de facturación VeriFactu: ni al desglose fiscal, ni al total declarado (BR-VFC-036).

La exclusión ocurre en un único punto, la pasarela de lectura, aguas arriba del constructor del desglose — así el mismo conjunto filtrado alimenta a todos los consumidores: el array de líneas, el tipo de IVA agregado, la descripción de la operación, la clave de régimen y el generador de XML. Filtrar solo el array de líneas habría dejado abiertos los demás caminos: un suplido en primera posición donaba un tipo del 0 % al agregado de una factura que sí repercute IVA, y describía la operación a la AEAT como «Tasa del Registro…».

El total declarado no cambia de fórmula y excluye los suplidos por construcción, porque el total fiscal agrega solo las líneas ordinarias. La AEAT valida ese total contra la suma del desglose; añadir el suplido descuadraría el registro y provocaría su rechazo. El importe a pagar es presentación y no se transmite nunca.

En la declaración anual de operaciones con terceras personas, la base declarada de cada contraparte es (BR-TXR-023):

base = total facturado (IVA incluido) + retención de IRPF − suplidos

La retención suma —la contraparte recibió una factura por el importe bruto— y el suplido resta, porque solo lo repercutiste por cuenta de tu cliente. Invertir cualquiera de los dos signos declara mal a la contraparte. Mientras el término de suplidos fue un cero fijado a fuego, la declaración sobredeclaraba a todo cliente al que se le hubieran repercutido tasas o aranceles, con riesgo de descuadre contra su propia declaración cruzada.

Las facturas de compra no modelan ni retención ni suplidos, así que ambos términos son estructuralmente cero en el lado recibido.

Que un tercero se declare o no se decide en el contacto, no en la factura. El campo accumulate_347 del cliente —escribible desde la v1 en POST /v1/clients y PUT /v1/clients/{id}, con valor por defecto true— excluye todas las operaciones de ese cliente cuando vale false, y se lee en vivo al calcular la declaración en lugar de congelarse al emitir (BR-TXR-037).

La antigua marca por factura sobrevive como override dormido, expuesta en solo lectura en el objeto factura de la v1 como exclude_347: puede forzar la exclusión de una factura concreta, nunca reincluir a un tercero ya marcado como no acumulable, y la API pública no la fija (BR-TXR-024). Ninguna de las dos marcas reincluye lo que las reglas automáticas ya excluyeron —operaciones intracomunitarias, exportaciones y facturas simplificadas sin NIF—.

Trazabilidad

Derivado de las reglas de dominio del backend de Factuarea:

  • BR-INV-037 — el catálogo cerrado de tipos de línea NORMAL|SUPLIDO, su valor por defecto retrocompatible y por qué existe solo en las facturas emitidas.
  • BR-INV-038 — la referencia de origen obligatoria, la trazabilidad opcional a facturas de compra y las dos condiciones legales que el software no puede imponer.
  • BR-INV-039 — los ocho campos que una línea de suplido no puede llevar.
  • BR-INV-040 — sin suplidos en una factura simplificada ni en su rectificativa.
  • BR-INV-041 — suplidos fuera de la base, del IVA y del total; el agregado persistido y la fórmula única derivada del importe a pagar.
  • BR-INV-042 — qué superficies excluyen el suplido y cuáles lo muestran marcado.
  • BR-INV-043unit y exemption_reason_text como campos de sola presentación.
  • BR-INV-044line_total como suma de control de entrada, opcional, nunca persistida, con tolerancia inclusiva de un céntimo.
  • BR-INV-045 — el saldo pendiente medido contra el importe a pagar.
  • BR-INV-046 — una factura no puede componerse solo de suplidos.
  • BR-VFC-036 — los suplidos no llegan nunca al registro de facturación, y la invariante de huella idéntica en las facturas que no los llevan.
  • BR-TXR-023 — la base de la declaración de operaciones con terceros: total facturado más retención menos suplidos.
  • BR-TXR-037 — la acumulación en esa declaración se decide en el contacto, se lee en vivo, y la marca por factura queda como override dormido.
  • BR-TXR-024 — la marca de exclusión por documento, superseded por BR-TXR-037 y conservada como ese override.

En esta página