In Spain, certain invoices are subject to withholding taxes, known as retenciones.A withholding tax is a mechanism where the customer withholds part of the invoice amount and pays it directly to the Spanish tax authorities, instead of paying it to the supplier. As a result, the supplier receives a net amount, reduced by the withholding.In practice, Spanish withholding taxes mainly apply under two legal frameworks:
IRPF (Impuesto sobre la Renta de las Personas Físicas)
This is the most common case and applies to self-employed professionals and freelancers.
The legal name is Retención a cuenta del IRPF.
Impuesto sobre Sociedades (Corporate Income Tax)
In some cases, withholding taxes also apply to companies.
The legal name is Retención a cuenta del Impuesto sobre Sociedades.
Unlike VAT, withholding taxes are not line-level taxes, do not increase the invoice total, and must be handled separately at the accounting and API level. This structural difference is why they require dedicated modeling when booking invoices in accounting systems.
Why this matters
Spanish withholding taxes are not optional edge cases. They are a structural part of invoicing in Spain.By introducing:
A dedicated withholding_tax model
Clear validation rules
Explicit tax code separation
Chift ensures:
Accurate accounting
Consistent connector behavior
No hidden connector-specific hacks
If you’re integrating Spanish invoices, this model is the only correct way to handle retenciones.
A withholding_tax object is available in both input and output, located at the invoice header level (see here its definition).This object is mandatory when a withholding applies and contains three required attributes:
tax_rate – the withholding rate to apply (expressed as a negative value in standard usage)
tax_code – a withholding-specific tax code (see section 3 of this article for more details)
tax_amount – the calculated withholding amount (expressed as a negative value in standard usage)
To correctly book a Spanish invoice with withholding tax:
Use standard VAT codes on invoice lines
Lines behave exactly like any regular VAT invoice
Declare the withholding at header level
Populate the withholding_tax object with:
The correct Spanish withholding tax code
Rate and calculated amount (negative)
Adjust tax_amount and totalat the invoice header
Amounts must respect the validation rules described above
This approach matches how Spanish accounting software and ERPs model retenciones, while keeping a clean and predictable Unified API.
How withholding taxes are mapped in Business Central
Additional implementation notes
Business Central does not natively support withholding taxes as a dedicated accounting concept.
As a result, withholding taxes are implemented using a specific VAT configuration and accounting mapping.
The rules below describe how this is modeled in Business Central and exposed through Chift.
VAT codes with a tax rate of 0 and a calculation type set to Full VAT are treated as withholding tax codes.
These VAT codes are exposed via the API with withholding_tax = true. To add, or edit Withholding taxes you need to go to “VAT posting setup” page (use the search icon). See example here👇
VAT Posting Setup in Business Central: a withholding tax code has a VAT % of 0 and the Full VAT calculation type.
VAT codes flagged as withholding:
cannot be used on standard invoice lines
Can only be used in the withholding_tax attribute at invoice header level and are the only taxes accepted at header level.
On customer invoices and refunds, the Sales VAT Account defined on the VAT code is used as the general ledger account for the withholding tax.
On supplier invoices and refunds, the Purchase VAT Account defined on the VAT code is used instead.
For calculation purposes, Business Central relies on internal invoice lines linked to these VAT codes.
These lines:
are used to compute the withholding_tax object returned by the API
are not included in the lines array of the invoice response
This approach allows withholding taxes to be correctly posted in Business Central while preserving a clean and explicit withholding tax model in the Unified API.
Example of an invoice booked with Withholding tax in Business Central 👇
A purchase invoice posted in Business Central with a withholding tax line.
Assistant
Responses are generated using AI and may contain mistakes.